<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ##db2move

    db2move 是一個數(shù)據(jù)移動工具,可以用來在 DB2 數(shù)據(jù)庫之間移動大量的表。該命令中支持的操作有 EXPORT、IMPORT 和 LOAD。
    db2move 的語法可以象下面那樣簡單:
    db2move database_name action options

    該工具先從系統(tǒng)目錄表中抽取用戶表列表,接著以 PC/IXF 格式導(dǎo)出每個表。然后,可以將這些 PC/IXF 文件導(dǎo)入或裝入到另一個
    DB2 數(shù)據(jù)庫。
    以下是一些示例。下面這條命令用指定的用戶標(biāo)識和密碼以 REPLACE 方式導(dǎo)入 sample 數(shù)據(jù)庫中的所有表:

    db2move sample import -io replace -u userid -p password
    而下面這條命令則以 REPLACE 方式裝入 db2admin 和 db2user 模式下的所有表:

    db2move sample load -sn db2admin, db2user -lo REPLACE
       ##db2look 是一個方便的工具,可以從命令提示符或控制中心對其進(jìn)行調(diào)用。該工具可以:

    從數(shù)據(jù)庫對象抽取數(shù)據(jù)庫定義語言(DDL)語句
    生成 UPDATE 語句來更新數(shù)據(jù)庫管理器和數(shù)據(jù)庫配置參數(shù)
    生成 db2set 命令來設(shè)置 DB2 概要文件注冊表
    抽取和生成數(shù)據(jù)庫統(tǒng)計報告
    生成 UPDATE 語句來復(fù)制有關(guān)數(shù)據(jù)庫對象的統(tǒng)計信息
    類似 LOAD 的實用程序都要求存在目標(biāo)表。您可以使用 db2look 來抽取表的 DDL,對目標(biāo)數(shù)據(jù)庫運行該 DLL,然后調(diào)用裝入操作。如同下面
    的示例所演示的那樣,db2look 使用起來非常方便。下面這條命令為(來自數(shù)據(jù)庫 department 的)peter 所創(chuàng)建的所有對象生成 DDL 語句,
    同時將輸出存儲在 alltables.sql 中。


    db2look -d department -u peter -e -o alltables.sql


    接下來這條命令生成:

    數(shù)據(jù)庫 department 中所有對象的 DLL(由選項 -d、-a 和 -e 指定)。
    復(fù)制數(shù)據(jù)庫中所有表和索引的統(tǒng)計信息的 UPDATE 語句(由選項 -m 指定)。
    GRANT 授權(quán)語句(由選項 -x 指定)。
    用于數(shù)據(jù)庫管理器和數(shù)據(jù)庫配置參數(shù)的 UPDATE 語句,以及用于概要文件注冊表的 db2set 命令(由選項 -f 指定)。

    db2look -d department -a -e -m -x -f -o db2look.sql

    ##RUNSTATS 實用程序

    DB2 利用一個完善的、基于成本的優(yōu)化器來確定如何訪問數(shù)據(jù)。其決策在很大程度上受到了一些統(tǒng)計信息的影響,這些統(tǒng)計信息是關(guān)于數(shù)據(jù)庫
    表和索引的大小的。因此,要時刻使數(shù)據(jù)庫統(tǒng)計信息保持最新狀態(tài),以便能夠選擇有效的數(shù)據(jù)存取方案,這一點十分重要。RUNSTATS 實用程
    序用于更新表的物理特征及其相關(guān)索引的統(tǒng)計信息。這些特征包括記錄數(shù)(基數(shù))、頁數(shù)和平均記錄長度等。
    讓我們用一些示例來演示此實用程序的用法。下面的命令收集表 db2user.employee 的統(tǒng)計信息。在計算統(tǒng)計信息期間允許閱讀器和記錄器訪
    問該表:

    RUNSTATS ON TABLE db2user.employee ALLOW WRITE ACCESS

    以下命令用分布式統(tǒng)計收集表 db2user.employee 以及列 empid 和 empname 的統(tǒng)計信息。在此命令運行期間,該表只能用于只讀請求。

    RUNSTATS ON TABLE db2user.employee WITH DISTRIBUTION ON COLUMNS ( empid, empname )
        ALLOW READ ACCESS
    以下命令收集表 db2user.employee 的統(tǒng)計信息及其全部索引的詳細(xì)統(tǒng)計信息:

    RUNSTATS ON TABLE db2user.employee AND DETAILED INDEXES ALL

    ##REORG 和 REORGCHK 實用程序

    從數(shù)據(jù)庫增刪的數(shù)據(jù)在物理上可能并不是按順序放置的。在這種情況下,DB2 必須執(zhí)行額外的讀操作來訪問數(shù)據(jù)。通常,這意味著需要更多的
    磁盤 I/O 操作,而我們都知道進(jìn)行這類操作的代價是昂貴的。在這種情況下,您應(yīng)該考慮根據(jù)索引對表進(jìn)行物理上的重組,以便相關(guān)數(shù)據(jù)相
    互之間靠得更近一些,從而盡可能地減少 I/O 操作。
    REORG 是一個為表和/或索引重組數(shù)據(jù)的實用程序。雖然在物理上對數(shù)據(jù)進(jìn)行了重新安排,但 DB2 卻提供了聯(lián)機或脫機執(zhí)行該操作的選項。
    在缺省情況下,脫機 REORG 允許其他用戶讀取該表。您可以通過指定 ALLOW NO ACCESS 選項來限制表訪問。聯(lián)機 REORG(也稱為現(xiàn)場 REORG)
    不支持對表的讀訪問或?qū)懺L問。由于重新安排了數(shù)據(jù)頁,因此并發(fā)應(yīng)用程序可能必須等待 REORG 完成當(dāng)前頁。您可以使用適當(dāng)?shù)倪x項來輕松
    地停止、暫停或重新開始重組過程:
    下面的示例都是非常容易看懂的:

    REORG TABLE db2user.employee INDEX db2user.idxemp INPLACE ALLOW WRITE ACCESS
    REORG TABLE db2user.employee INDEX db2user.idxemp INPLACE PAUSE

    REORGCHK 是另一個數(shù)據(jù)維護(hù)實用程序,它有一個選項可以用來檢索當(dāng)前的數(shù)據(jù)庫統(tǒng)計信息或更新數(shù)據(jù)庫統(tǒng)計信息。它還會生成帶有 REORG
    指示符的統(tǒng)計信息報告。REORGCHK 根據(jù)統(tǒng)計規(guī)則在需要 REORG 的地方用星號(*)標(biāo)記表或索引。
    讓我們考慮一些示例。下面這條命令生成當(dāng)前(關(guān)于運行時授權(quán)標(biāo)識擁有的全部表的)統(tǒng)計信息的報告:
    REORGCHK CURRENT STATISTICS ON TABLE USER

    下面的命令更新統(tǒng)計信息,然后生成在模式 smith 下創(chuàng)建的全部表的報告:

    REORGCHK UPDATE STATISTICS ON SCHEMA smith

    ##REBIND 實用程序和 FLUSH PACKAGE CACHE 命令

    在執(zhí)行數(shù)據(jù)庫應(yīng)用程序或任何 SQL 語句之前,必須先由 DB2 對它們進(jìn)行預(yù)編譯,并生成一個包。包是一種數(shù)據(jù)庫對象,其中含有應(yīng)用程序
    源文件中所使用的已編譯 SQL 語句。DB2 使用該包來訪問 SQL 語句中引用的數(shù)據(jù)。DB2 優(yōu)化器如何為這些包選擇數(shù)據(jù)存取方案呢?它依靠
    包創(chuàng)建時的數(shù)據(jù)庫統(tǒng)計信息。
    對于靜態(tài) SQL 語句,包在編譯時創(chuàng)建,并且被綁定到數(shù)據(jù)庫上。如果對統(tǒng)計信息進(jìn)行了更新,以反映物理數(shù)據(jù)庫特征,那么也應(yīng)該更新現(xiàn)有
    的包。REBIND 實用程序允許您重新創(chuàng)建包,以便可以利用當(dāng)前的數(shù)據(jù)庫統(tǒng)計信息。命令十分簡單:

    REBIND PACKAGE package_name


    不過,如果您要更改應(yīng)用程序源代碼,那么就得顯式地刪除現(xiàn)有的相關(guān)包,然后重新創(chuàng)建包。REBIND 實用程序不用于這一目的。這里,
    我們之所以就此對您加以提醒,是因為 DBA 經(jīng)常誤解了 REBIND 的用法。
    對于動態(tài) SQL 語句,它們是在運行時預(yù)編譯的,而且被存儲在包高速緩存中。如果更新了統(tǒng)計信息,那么您可能會刷新高速緩存,以便
    重新編譯動態(tài) SQL 語句,從而獲取更新的統(tǒng)計信息。命令類似下面的樣子:

    FLUSH PACKAGE CACHE DYNAMIC

    ##數(shù)據(jù)庫維護(hù)過程
    RUNSTATS -- REORGCHK--YES--REORG
                  |      |
                  |      |
                  NO   |----- RUNSTATS
                  |----|---------|
                  REBIND      FLUSH PACKAGE CACHE
                     |      |
                     APPLICATION EXECUTION
                    
    ##DB2性能顧問程序
    1,圖形化工具CONFIGURATION ADVISOR
    2,CLP AUTOCONFIGURE USING mem_percent 60 workload_type complex num_stmts 20 APPLY DB AND DBM

    ##DB2 設(shè)計顧問程序

    設(shè)計顧問程序可以幫您找到 SQL 語句的最佳索引。它使用 DB2 優(yōu)化器、數(shù)據(jù)庫統(tǒng)計信息和解釋(Explain)
    機制來為特定查詢或一組 SQL 語句(也稱為工作負(fù)載)生成推薦索引。您可以從命令行用 db2advis 加上必要的輸入啟動該顧問程序。
    下面的示例使用輸入文件
    input.sql 對 sample 數(shù)據(jù)庫執(zhí)行設(shè)計顧問程序,該輸入文件含有一組 SQL 語句。然后將輸出存儲在 output.out 中。
    db2advis -d sample -i input.sql -o output.out

    圖形化工具:desigen Advisor

    ### 備份與恢復(fù)

    ##數(shù)據(jù)庫恢復(fù)概念
      系統(tǒng)故障,事務(wù)故障,介質(zhì)故障,災(zāi)難。
      #恢復(fù)策略
        問題:可以再次從另一個來源裝入數(shù)據(jù)嗎?能夠承受丟失多少數(shù)據(jù)?
              能化多少時間來恢復(fù)數(shù)據(jù)庫?哪些存儲資源可用于存儲備份和日志?
      #恢復(fù)類型
        崩潰恢復(fù)(系統(tǒng)崩潰,DB2重新啟動執(zhí)行回滾),版本恢復(fù)(使用從BACKUP命令
        獲取的備份中恢復(fù)先前的數(shù)據(jù)庫版本),前滾恢復(fù)(通過使用完全數(shù)據(jù)庫備份,結(jié)合
        日志文件來擴展版本恢復(fù),要求使用歸檔日志記錄)
        db2采用先寫日志后寫磁盤數(shù)據(jù)庫的方式。
      #主日志文件和輔助日志文件
        主日志文件是在首次數(shù)據(jù)庫連接時或數(shù)據(jù)庫激活時直接分配的。輔助日志文件需要時每次動態(tài)地分配一個。

    有幾個與日志記錄相關(guān)的數(shù)據(jù)庫配置參數(shù)。其中一些參數(shù)是:

    LOGPRIMARY:該參數(shù)確定要分配的主日志文件數(shù)。
    LOGSECOND:該參數(shù)確定可分配的輔助日志文件的最大數(shù)目。(最大254)
    LOGFILSIZ:該參數(shù)用于指定日志文件的大小(用 4 KB 頁為單位)。
    讓我們考慮一個示例。假設(shè)數(shù)據(jù)庫配置文件中有下列值:

    Log file size (4 KB)                        (LOGFILSIZ) = 250
    Number of primary log files                (LOGPRIMARY) = 3
    Number of secondary log files               (LOGSECOND) = 2
    Path to log files                                       = C:\mylogs\

    一旦首次建立與數(shù)據(jù)庫的連接,就分配三個主日志文件,它們均由 250 個 4 KB 頁組成。
    DB2 將填滿第一個日志,然后繼續(xù)填滿第二個和第三個日志。填滿第三個日志文件后,沒有更多的主
    (預(yù)分配的)日志文件,因此 DB2 將動態(tài)地分配第一個輔助日志文件,因為 LOGSECOND 大于零。一旦
    這個日志文件被填滿,DB2 將繼續(xù)分配另一個輔助日志文件,并將重復(fù)該過程,直到達(dá)到 LOGSECOND 日
    志文件數(shù)目的最大值為止。對于該示例,當(dāng) DB2 嘗試分配第三個輔助日志文件時,它將返回一個錯誤,
    指出已經(jīng)達(dá)到事務(wù)滿條件。此時,將回滾該事務(wù)。

    #無限日志記錄
    要允許無限的活動日志記錄:

    將 USEREXIT 數(shù)據(jù)庫配置參數(shù)設(shè)置為 ON。
    將 LOGSECOND 設(shè)置為值 -1。
    #日志類型
    活動日志。如果滿足下面兩個條件中的任何一個,則認(rèn)為該日志是活動的:
    它包含有關(guān)還未提交或回滾的事務(wù)的信息。
    它包含有關(guān)已經(jīng)提交但其更改還未被寫入數(shù)據(jù)庫磁盤(外部化)的事務(wù)的信息。
    聯(lián)機歸檔日志。這種類型的日志包含已提交的且已外部化的事務(wù)的信息。這種日志被保存在與活動日志相同的目錄中。
    脫機歸檔日志。是指已經(jīng)從活動日志目錄移動到另一個目錄或介質(zhì)的歸檔日志。可以手工或使用用戶出口(userexit)
    的自動過程來完成這個移動。

       ##日志記錄類型
       循環(huán)日志類型:循環(huán)日志記錄是 DB2 的缺省日志記錄方式。從其名稱可以知道,這種類型的日志記錄以循環(huán)方式重用日志。例如,如果
    有四個主日志文件
       ,那么 DB2 將以如下順序使用它們:Log #1,Log #2,Log #3,Log #4,Log #1,Log #2 等。
    只要日志僅包含有關(guān)已經(jīng)提交的且被外部化到數(shù)據(jù)庫磁盤的事務(wù)的信息,就可以用循環(huán)日志記錄方式重用它。換言之,如果日志仍
    是一個活動日志,則不能重用它。
    采用上面的示例,如果一個長期運行的事務(wù)使用五個日志,那么將發(fā)生什么情況呢?
    在這種情況下,DB2 將分配另一個日志文件 — 輔助日志文件,

      歸檔日志記錄。同樣,可以從其名稱知道,當(dāng)使用歸檔日志記錄時,將歸檔(保留)日志。在循環(huán)日志記錄中,要覆蓋已提交且已外部化的
    事務(wù),而在歸檔日志記錄中,將保存它們。
      例如,如果有四個主日志,DB2 可能以如下順序使用它們:Log #1,Log #2,Log #3,Log #4,(如果 Log #1 的所有事務(wù)都已被提
    交且外部化,則將其歸檔),Log #5,
      (如果 Log #2 的所有事務(wù)都已被提交且外部化,則將其歸檔),Log #6 等。
    正如您從上面的示例所看到的那樣,DB2 將使四個主日志文件保持可用,并且將不重用那些已經(jīng)用某些事務(wù)填滿的日志文件,這些
    事務(wù)已經(jīng)被提交且外部化。換言之,
    它不會覆蓋已變成歸檔日志的日志。
    注:在使用歸檔日志記錄之前,需要啟用它。要啟用它,必須同時打開下列參數(shù)或打開其中的任意一個:

    LOGRETAIN (db2 update db cfg for database_name using LOGRETAIN ON)
    USEREXIT  (db2 update db cfg for database_name using USEREXIT ON)
    循環(huán)日志記錄僅支持崩潰和版本恢復(fù),而歸檔日志記錄支持所有類型的恢復(fù):崩潰恢復(fù)、版本恢復(fù)和前滾恢復(fù)。

    用戶出口

    我們在前幾章中多次提到用戶出口。用戶出口是允許將聯(lián)機歸檔日志移到另一個目錄(非活動日志目錄)或另一個介質(zhì)的程序。當(dāng)為完全數(shù)據(jù)庫
    恢復(fù)進(jìn)行 ROLLFORWARD 操作期間需要脫機歸檔日志時,用戶出口還會將它們檢索到活動日志目錄中。要啟用用戶出口,將 USEREXIT 數(shù)據(jù)庫配置參
    數(shù)設(shè)置為 ON。一旦啟用,DB2 將根據(jù)需要自動調(diào)用用戶出口程序。需要將該程序命名為 db2uext2,在 Windows 中,應(yīng)該將它存儲在 sqllib\bin
    目錄中,在 UNIX 中,應(yīng)該將它存儲在 sqllib/bin 目錄中。

    ## 數(shù)據(jù)庫和表空間備份

    #數(shù)據(jù)庫備份 第 2 頁(共6 頁)




    數(shù)據(jù)庫備份是數(shù)據(jù)庫的完整副本。除了數(shù)據(jù)外,備份副本還會包含有關(guān)表空間、容器、數(shù)據(jù)庫配置、日志控制文件以及恢復(fù)歷史記錄文件的信息。注:備份將不存儲數(shù)據(jù)庫管理器配置文件或注冊表變量。只備份數(shù)據(jù)庫配置文件。

    要執(zhí)行備份,需要 SYSADM、SYSCTRL 或 SYSMAINT 權(quán)限。

    下面是用于這種備份的 BACKUP 命令實用程序的語法:


    BACKUP DATABASE database-alias [USER username [USING password]]
          [TABLESPACE (tblspace-name [ {,tblspace-name} ... ])] [ONLINE]
          [INCREMENTAL [DELTA]] [USE {TSM | XBSA} [OPEN num-sess SESSIONS]] |
       TO dir/dev [ {,dir/dev} ... ] | LOAD lib-name [OPEN num-sess SESSIONS]]
          [WITH num-buff BUFFERS] [BUFFER buffer-size] [PARALLELISM n]
          [WITHOUT PROMPTING]


    要使用其它備份選項來執(zhí)行數(shù)據(jù)庫“sample”的完全脫機備份,可以使用以下命令:


    (1) BACKUP DATABASE sample                     
    (2)   TO /db2backup/dir1, /db2backup/dir2    
    (3)   WITH 4 BUFFERS                         
    (4)   BUFFER 4096                            
    (5)   PARALLELISM 2                          


    讓我們更仔細(xì)地研究該命令:

    指明要備份的數(shù)據(jù)庫的名稱(或別名)。
    指定用來存儲備份的一個或多個位置。
    確定在備份操作期間可以使用內(nèi)存中的多少緩沖區(qū)。使用多個緩沖區(qū)可以改善性能。
    確定每個緩沖區(qū)的大小。
    確定使用多少個介質(zhì)閱讀器/記錄器進(jìn)程/線程來執(zhí)行備份。
    注:語法中沒有關(guān)鍵字 OFFLINE,因為這是缺省方式。要執(zhí)行 sample 數(shù)據(jù)庫的完全聯(lián)機備份,必須指定關(guān)鍵字 ONLINE,如下所示:


    BACKUP DATABASE sample                  
      ONLINE                              
      TO /dev/rdir1, /dev/rdir2           


    我們先前提到過:聯(lián)機備份允許其他用戶在備份數(shù)據(jù)庫時對它進(jìn)行訪問。這些用戶所做的一些更改很可能在備份時沒有存儲在備份副本中。
    因此,恢復(fù)時需要聯(lián)機備份和一組完整的歸檔日志。此外,聯(lián)機備份一完成,DB2 就強制當(dāng)前的活動日志關(guān)閉;結(jié)果,將歸檔該日志。

    注:聯(lián)機備份要求為數(shù)據(jù)庫啟用歸檔日志記錄。 DB CFG: LOGHEAD指向活動的最低編號的日志,小于LOGHEAD的日志
    是歸檔日志且可以移動。可以使用ARCHIVE LOG 命令來對日志進(jìn)行歸檔。



    #表空間備份
       在只有一些表空間有相當(dāng)大更改的數(shù)據(jù)庫中,可以選擇不備份整個數(shù)據(jù)庫,而只備份特定表空間。
    要執(zhí)行表空間備份,請使用以下語法:

    (1) BACKUP DATABASE sample
    (2) TABLESPACE ( syscatspace, userspace1, userspace2 )
    (3) ONLINE
    (4) TO /db2tbsp/backup1, /db2tbsp/backup2
    通常,您想要將相關(guān)的表空間備份在一起,如數(shù)據(jù),索引,LOB
      或定義了表間引用約束的表的表空間
     
      注意:此備份方式只能用于ARCHIVAL LOGGIN 環(huán)境中。

      #增量備份
      有兩種類型的增量備份:

    增量:DB2 備份自上次完全數(shù)據(jù)庫備份以來所更改的所有數(shù)據(jù)。
    delta:DB2 將只備份自上一次成功的完全、增量或差異備份以來所更改的數(shù)據(jù)。

    注意:要執(zhí)行增量備份,DB CFG中的TRACKMOD必須設(shè)置為 YES(跟蹤表空間中發(fā)生變化的頁面).
      在控制中心執(zhí)行備份。
     
      #備份文件
      磁盤上的 DB2 備份文件的命名約定包含下列幾項:

    數(shù)據(jù)庫別名
    表示備份類型的數(shù)字(0 表示完全數(shù)據(jù)庫備份,3 表示表空間備份,4 表示來自 LOAD 的副本)
    實例名
    數(shù)據(jù)庫節(jié)點(對于單一分區(qū)數(shù)據(jù)庫始終是 NODE0000)
    目錄節(jié)點號(對于單一分區(qū)數(shù)據(jù)庫始終是 CATN0000)
    備份的時間戳記
    映像序列號

    分區(qū)數(shù)據(jù)庫的備份:
    In the following example, the database WSDB is defined on all 4 partitions,
    numbered 0 through 3. The path /dev3/backup is accessible from all
    partitions. Partition 0 is the catalog partition, and needs to be backed-up
    separately since this is an offline backup. To perform an offline backup of all
    the WSDB database partitions to /dev3/backup, issue the following
    commands from one of the database partitions:

    db2_all ’<<+0< db2 BACKUP DATABASE wsdb TO /dev3/backup’
    db2_all ’|<<-0< db2 BACKUP DATABASE wsdb TO /dev3/backup’
    posted @ 2005-06-08 19:08 小馬歌 閱讀(981) | 評論 (0)編輯 收藏
     
    #聲明臨時表
    DECLARE GLOBAL TEMPORARY TABLE session.temp1
      LIKE employee
      ON COMMIT PRESERVE ROWS
      NOT LOGGED
    IN mytempspace

    #ALTER
      可以修改:緩沖池,表,表空間,視圖

    #DROP
      可以刪除:緩沖池,事件監(jiān)控程序,函數(shù),索引,模式,存儲過程,表,表空間,觸發(fā)器,視圖.
    #產(chǎn)生數(shù)據(jù)備份
    CREATE TABLE pers LIKE staff

    INSERT INTO pers
      SELECT id, name, dept, job, years, salary, comm
        FROM staff
        WHERE dept = 38

    #唯一性約束
    CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY,
                        BOOKNAME VARCHAR(100),
                        ISBN CHAR(10) NOT NULL CONSTRAINT BOOKSISBN UNIQUE)

    ALTER TABLE BOOKS ADD  CONSTRAINT UNIQUE (BOOKID)

    #參照完整性約束
    CREATE TABLE AUTHORS (AUTHORID INTEGER NOT NULL PRIMARY KEY,
                          LNAME VARCHAR(100),
                          FNAME VARCHAR(100))
    CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY,
                        BOOKNAME VARCHAR(100),
                        ISBN CHAR(10),
                        AUTHORID INTEGER REFERENCES AUTHORS)

    #表檢查約束
    ALTER TABLE BOOKS ADD BOOKTYPE CHAR(1) CHECK (BOOKTYPE IN ('F','N') )


    #創(chuàng)建索引
    CREATE INDEX I2BOOKNAME ON BOOKS (AUTHOID DESC, BOOKNAME ASC)


    #設(shè)置概要文件注冊表
      設(shè)置后實例要重新啟動
      列出所有的變量: db2set -lr
      設(shè)置變量:db2set variable_name=value
      設(shè)置為缺省值:db2set variable_name=
      顯示設(shè)置的變量:db2set -all
    # 設(shè)置數(shù)據(jù)庫管理器和數(shù)據(jù)庫的參數(shù)
      獲取當(dāng)前參數(shù):
        db2 get database manager configuration
    db2 get database configuration for database_name
    db2 get database manager configuration show detail
      設(shè)置參數(shù):
       db2 update database manager configuration using parameter new_value
    db2 update database configuration for database_name using parameter new_value
    #準(zhǔn)備數(shù)據(jù)庫服務(wù)端口
      db2set DB2COMM=TCPIP,NETBIOS
      在services文件中包含服務(wù)和端口號,
       如:db2icdb2    50000/tcp
      db2 update database manager configuration using svcename db2icdb2
      重新啟動數(shù)據(jù)庫.
     
    #查看連接的應(yīng)用程序
      db2 list applications [for database db-name] [show detail]
    #斷開應(yīng)用程序
      db2 force application (6,5)
      db2 force application all
    #設(shè)置客戶認(rèn)證方式
      db2 update database manager configuration authentication auth_type
    #創(chuàng)建緩沖池
      create bufferpool BP2 size 25000 pagesize 8 k

    CONNECT TO SCCRM;
    ALTER BUFFERPOOL IBMDEFAULTBP IMMEDIATE NODE 1 SIZE 50000;
    ALTER BUFFERPOOL IBMDEFAULTBP IMMEDIATE NODE 0 SIZE 50000;
    CONNECT RESET;

    #將表空間的狀態(tài)復(fù)位成正常(NORMAL)
      quiesce tablespaces for table <tablename> reset
     
    #有用的目錄表
      SYSCAT.COLUMNS:所包含的每一行對應(yīng)于表或視圖中定義的每個列
      SYSCAT.INDEXCOLUSE:列出索引中包含的所有列
      SYSCAT.INDEXES:包含的每一行對應(yīng)于表或視圖中定義的每個索引(包括適用的繼承索引)。
      SYSCAT.TABLES:所創(chuàng)建每個表、視圖、別名(nickname)或別名(alias)都對應(yīng)其中一行。所有目錄表和視圖都在 SYSCAT.TABLES 目錄視圖中擁有一項。
      SYSCAT.VIEWS:所創(chuàng)建的每個視圖都對應(yīng)其中一行或多行。
     

    ###監(jiān)控DB2活動
      ##捕獲快照
        數(shù)據(jù)庫,表空間,表,緩沖池,鎖,數(shù)據(jù)庫管理器,應(yīng)用程序
      #拍攝快照
       API,命令行
      UPDATE MONITOR SWITCHES
      #打開和關(guān)閉快照
       1,在實例級別上設(shè)置監(jiān)視器開關(guān)(影響所有用戶和數(shù)據(jù)庫)
         DFT_MON_STMT:語句監(jiān)視器(用于動態(tài) SQL)
    DFT_MON_TABLE:表監(jiān)視器
    DFT_MON_LOCK:鎖監(jiān)視器
    DFT_MON_BUFPOOL:緩沖池監(jiān)視器
    DFT_MON_SORT:排序監(jiān)視器
    DFT_MON_UOW:工作單元信息
    DFT_MON_TIMESTAMP:跟蹤時間戳記信息
         db2 get dbm cfg|grep DFT_MON
         db2 update dbm cfg using monitorSwitch [ON|OFF]
    db2 update dbm cfg using DFT_MON_SORT ON

       2,在應(yīng)用程序級別上設(shè)置監(jiān)視器開關(guān)(只適合于特定的應(yīng)用程序)
       在CLP中打開只適合這個CLP
         Bufferpool
    Lock
    Sort
    Statement
    Table
    Timestamp
    UOW

    db2 get monitor switches
        db2 update monitor switches using switchName [ON|OFF]
        3,復(fù)位開關(guān)
      db2 reset monitor [ALL|for database databaseName] [at dbpartitionnum partitionNum]
    將監(jiān)視器開關(guān)的值復(fù)位成空或0.
        #數(shù)據(jù)庫快照
         包含如下信息:
         連接
    DB2 代理程序

    排序
    緩沖池活動總數(shù)
    SQL 活動
    SQL 語句數(shù)量
    日志使用情況
    高速緩存使用情況
    散列連接
        下面是獲取這種快照的命令
    db2 get snapshot for database on databaseName

        #數(shù)據(jù)庫管理器快照
        db2 get snapshot for database manager
        #表快照
        db2 get snapshot for tables on drew_db
        #表空間和緩沖池快照
        db2 get snapshot for tablespaces on drew_db
        db2 get snapshot for bufferpools on drew_db

    計算緩沖池命中率:
        Ratio = ((1-(physical index and data reads))/(logical index and data reads))*100%

        #鎖快照
        db2 get snapshot for locks on drew_db
       
        #動態(tài)SQL快照
        #查找執(zhí)行速度較慢的SQL
         SELECT stmt_text,total_exec_time,num_executions
         FROM TABLE (SNAPSHOT_DYN_SQL('DREW_DB',-1)) as dynSnapTab
         ORDER BY total_exec_time desc
         FETCH FIRST 1 ROW ONLY

        第二個示例查找平均執(zhí)行時間最長的五條 SQL 語句:


    SELECT stmt_text,
    CASE WHEN num_executions = 0
    THEN 0
    ELSE (total_exec_time / num_executions)
    END avgExecTime,
    num_executions
    FROM TABLE( SNAPSHOT_DYN_SQL('DREW_DB', -1)) as dynSnapTab
    ORDER BY avgExecTime desc
    FETCH FIRST 5 ROWS ONLY

    ### 事件監(jiān)控器
         人們用快照來檢查某個精確時刻的DB2,并聚集性能信息。事件監(jiān)控器與此不同,人們用他在固定的時間
        周期內(nèi)監(jiān)控DB2性能。事件監(jiān)視器檢查數(shù)據(jù)庫中的轉(zhuǎn)換事件,并將每個事件都當(dāng)成一個對象。這允許對 DB2 的行為進(jìn)行非常詳細(xì)的分析。
            事件監(jiān)視器捕獲的信息類似于快照捕獲的信息。同時可以運行多個監(jiān)視器,并且每個監(jiān)視器也可以捕獲多種事件類型的信息。這允許不同的管理員相互獨立地監(jiān)控不同的活動。

    事件監(jiān)視器可以捕獲有關(guān)下列內(nèi)容的信息:

    數(shù)據(jù)庫

    死鎖
    表空間
    緩沖池
    連接
    語句
    事務(wù)
    可將事件監(jiān)視器的信息寫到:

    SQL 表
    文件
    管道

       ##創(chuàng)建事件監(jiān)視器
         CREATE EVENT MONITOR
       ##打開和關(guān)閉監(jiān)視器
         db2 set event monitor eventMonitorName state [0|1]
    eventMonitorName 是已創(chuàng)建的事件監(jiān)視器的名稱。0 將關(guān)閉監(jiān)視器,而 1 將打開監(jiān)視器。
          #獲取狀態(tài)
          SELECT EVENT_MON_STATE('drewTest') FROM SYSIBM.SYSDUMMY1

    SYSIBM.SYSEVENTMONITORS 表及該表的視圖 SYSCAT.EVENTMONITORS 包含有關(guān)已創(chuàng)建的事件監(jiān)視器的信息。可以對這些表運行 SQL 查詢,以確定監(jiān)視器的狀態(tài):
    SELECT evmonname, target_type, target,
    FROM syscat.eventmonitors
    where evmonname LIKE 'drew%'

    autostart 選項

    用于創(chuàng)建事件監(jiān)視器的命令中的 autostart 選項表明,每當(dāng)數(shù)據(jù)庫啟動時,自動啟動事件監(jiān)視器。

    #清空事件監(jiān)視器
          注意:事件監(jiān)控器名稱使用大寫字母,需要創(chuàng)建目錄。
         
         
    還可將事件監(jiān)視器數(shù)據(jù)清空到磁盤中。如果您希望記錄這類信息,如通常僅當(dāng)終止所有連接時才寫的數(shù)據(jù)庫事件,那么這非常有用。下面是一個示例命令:

    db2 flush event monitor eventMonitorName
    #使用事件監(jiān)視器
           事件監(jiān)視器應(yīng)當(dāng)用于監(jiān)控非常具體的一些事件或短時間內(nèi)的工作負(fù)載。它
    們旨在為您提供非常具體的信息,以允許您診斷數(shù)據(jù)庫或應(yīng)用程序的問題或行為。
    與快照不同,事件監(jiān)視器對 DB2 的性能影響極大。這是由于為每個事件對象寫的
    信息的數(shù)量造成的。語句監(jiān)視器對性能的影響極大,因為數(shù)據(jù)庫引擎必須為每個
    查詢執(zhí)行所有額外的工作:不只是能夠執(zhí)行查詢,DB2 引擎還必須寫出這條查詢
    的所有特征和運行時信息。該信息必須寫入文本文件,這樣會進(jìn)一步降低性能。

    #死鎖監(jiān)控
            CREATE EVENT MONITOR DEADLOCK_DB
    FOR DEADLOCKS
    WRITE TO FILE 'deadlock_db'
    MAXFILES 1
    MAXFILESIZE NONE
    AUTOSTART
                  注意:事件監(jiān)控器名稱使用大寫字母,需要創(chuàng)建目錄。

    #SQL監(jiān)控
            SQL 監(jiān)視器十分有用,因為它可以俘獲動態(tài)和靜態(tài) SQL 語句。如果應(yīng)用
    程序利用了無法用 SQL 快照捕獲的預(yù)編譯 SQL 語句,那么該監(jiān)視器就
    很重要。

    對于每條被執(zhí)行的 SQL 語句記錄一個事件。每個語句的屬性(如讀取、
    選擇和刪除等等操作的行數(shù))都被記錄下來,但是不象在快照中那樣以
    匯總的方式進(jìn)行表示。另外還記錄執(zhí)行的時間范圍以及啟動和停止次數(shù)。這允許您對一些事務(wù)以及某個應(yīng)用程序的 SQL 執(zhí)行對其它應(yīng)用程序的 SQL 執(zhí)行有何影響進(jìn)行詳細(xì)分析。

    還可以使用 SQL 監(jiān)視器來發(fā)現(xiàn)拙劣的執(zhí)行代碼;如果將輸出放入表中,
    那么通過對個別代碼的執(zhí)行次數(shù)進(jìn)行搜索,可以做到這一點。由于運行
    SQL 監(jiān)視器的信息量以及性能開銷,所以只應(yīng)在短期測試或問題確定中
    使用該技術(shù),而不應(yīng)在生產(chǎn)環(huán)境中使用它。

    CREATE EVENT MONITOR BAR
    FOR STATEMENTS
    WRITE TO TABLE
    STMT(TABLE drewkb.stmtTab)
    includes(rows_read,rows_written_stmt_text)

    #捕獲事件監(jiān)視器數(shù)據(jù)
            db2eva [db databaseName] [evm eventMonitorName]

           #利用EXPLAIN分析SQL
            SQL 的 Explain 通過圖形化或基于文本的方式詳細(xì)說明了 SQL 語句的每個部分是如何執(zhí)行以及何時執(zhí)行的。這包括以下一些基本信息:

    正被訪問的表
    正被使用的索引
    何時連接數(shù)據(jù)
    何時排序數(shù)據(jù)
    Explain 還捕獲更復(fù)雜的信息,在細(xì)究 SQL 正在發(fā)生什么時,該信息非常有用:

    表和索引基數(shù)
    正連接的表和索引的順序
    結(jié)果集的基數(shù)
    在查詢的每部分正在選擇哪些字段
    排序方法
    SQL 每部分的時間范圍

           要理解 Explain 信息,您需要掌握的最重要概念是 timeron。timeron 是 DB2 優(yōu)化器使
    用的計量單位,用來計量完成查詢的時間和資源數(shù)量。timeron 綜合了時間、CPU 利用率、
    I/O 和其它因素。由于這些參數(shù)值是變化的,因此執(zhí)行某個查詢所需的 timeron 數(shù)量是動態(tài)
    的,每次執(zhí)行該查詢所需的 timeron 都不同。

    #使用控制中心的EXPLAIN SQL
             觀察SQL的存取方案,分析優(yōu)化參數(shù),考慮優(yōu)化的級別。
            #使用字符工具
             db2 set current explain mode [no|yes|explain]
    db2exfmt
    可以從命令行調(diào)用 db2expln 工具,以獲得查詢的存取方案。但是,該工具不返回優(yōu)化器信息。
            db2expln -database drew_db -statement "select * from syscat.tables" -terminal

    #SQL故障診斷
            索引使用,是否使用索引,使用索引的順序
            表基數(shù)和"SELECT *" 的使用
            優(yōu)化級別太低。
            設(shè)置優(yōu)化級別:db2 set current query optimization [0|1|2|3|5|7|9]
       ##使用運行狀況中心和內(nèi)存可視化工具
           # 選定實例使用view memory usage,可以把輸出保存到文件。
       除了提供了內(nèi)存可視化之外,該工具還允許您對某些參數(shù)值設(shè)置警報。警報的輸出將被寫到名為
    threshold 的文件,該文件與 db2diag.log 位于同一目錄下。該目錄位于實例主目錄下。根據(jù)
    您創(chuàng)建實例時所做選擇的不同,該位置也會不同。
    # DB2運行狀況中心
             是否有充足的資源(如可用內(nèi)存、表空間容器或日志存儲器)來完成任務(wù)
    資源使用是否有效
    任務(wù)是否在可接受的時間周期內(nèi)完成,或者任務(wù)的完成是否不會大幅度降低性能
    資源或數(shù)據(jù)庫對象是否不會永遠(yuǎn)處于不可用狀態(tài)

      ##DB2查詢巡視器和控制器
           IBM 為 DB2 提供了兩種主要工具,它們允許您監(jiān)控和控制數(shù)據(jù)庫上 SQL 的執(zhí)行。DB2 控制器(Governor)用于控制
    用戶和應(yīng)用程序執(zhí)行其 SQL 的優(yōu)先級。DB2 查詢巡視器(Query Patroller)為決策支持系統(tǒng)提供了查詢和資源管理。
    該工具接受通過您系統(tǒng)的所有查詢,并對其進(jìn)行分析、優(yōu)先排序和調(diào)度。
          
    DB2 查詢巡視器為決策支持系統(tǒng)提供了查詢和資源管理。該工具可以接受流經(jīng)您系統(tǒng)的所有查詢,并對其進(jìn)行分析、
    優(yōu)先排序和調(diào)度。一旦完成查詢,用戶也將接到通知。在大型環(huán)境(其中完成某些查詢可能要花幾個小時,或者不
    同部門可能具有不同的系統(tǒng)優(yōu)先級或用途)中,該功能極其有用。

    通過將工作重定向到合適的數(shù)據(jù)庫分區(qū),查詢巡視器還將執(zhí)行負(fù)載均衡,以確保某個數(shù)據(jù)庫分區(qū)的使用不會過于繁重
    。該工具只能與 SMP 或 MMP 環(huán)境中 DB2 ESE 的多分區(qū)選項一起使用。

    在經(jīng)過最新修訂以后,IBM 已經(jīng)對 DB2 查詢巡視器徹底進(jìn)行了重新架構(gòu),從而將查詢控制功能集成進(jìn)了類似 DB2 控制
    中心的 DB2 查詢巡視器中心,并提供了一個易于使用的用戶界面。查詢巡視器是完全基于服務(wù)器的,不需要客戶機軟件。

    #性能  監(jiān)控命令
    get monitor switches  返回會話監(jiān)控開關(guān)的狀態(tài)
    update monitor switches using <monitor> <on|off> 為<monitor>設(shè)置會話監(jiān)控開關(guān)的狀態(tài)
    reset monitor all 復(fù)位性能監(jiān)控程序值
    get snapshot for dbm
    get snapshot for all on <dbname>
    get snapshot for dynamic sql on <dbname>   返回動態(tài)SQL高速緩存的內(nèi)容
    runstats on table <tbschema>.<tbname> 收集<tbname>的統(tǒng)計信息
    reorgchk on table all      確定是否需要重組  reorgchk on table <tbschema>.<tbname>
    reorg table <tablename> 通過重組消除碎片
    ###DB2實用程序
        三種實用程序:EXPORT,IMPORT,LOAD
            這些實用程序支持的文件格式有:

    非定界或定長 ASCII(ASC):顧名思義,這種文件類型包含定長 ASCII 數(shù)據(jù),以便與列數(shù)據(jù)對齊。每個 ASC 文件都是一個
    ASCII 字符流,這個字符流由根據(jù)行和列排序的數(shù)據(jù)值組成。數(shù)據(jù)流中的行由行定界符分隔,而通常將行定界符假定為換行符。
    定界 ASCII(DEL):它是各種數(shù)據(jù)庫管理器用于數(shù)據(jù)交換的最常用文件格式。這種格式包含 ASCII 數(shù)據(jù),它使用特殊字符定
    界符分隔列值。數(shù)據(jù)流中的行由換行符充當(dāng)行定界符進(jìn)行分隔。
    PC 版集成交換格式(PC version of the Integrated Exchange Format,PC/IXF):它是數(shù)據(jù)庫表的結(jié)構(gòu)化描述。這種文件格式不僅
    可以用于導(dǎo)入數(shù)據(jù),還可以用于創(chuàng)建目標(biāo)數(shù)據(jù)庫中尚不存在的表。
    工作表格式(Worksheet Format,WSF):以這種格式存儲的數(shù)據(jù)可以在工作表中顯示。這種格式只能用于導(dǎo)出和導(dǎo)入。
    游標(biāo):游標(biāo)是用查詢聲明的。它只能用作裝入操作的輸入。

    #EXPORT 實用程序使用 SQL SELECT 語句將數(shù)據(jù)從數(shù)據(jù)庫表抽取到某個文件中。對于導(dǎo)出的數(shù)據(jù)而言,其文件格式可以是 DEL、IXF 或 WSF。建議您在
    導(dǎo)出中包含 MESSAGES 子句,以便在導(dǎo)出期間捕獲錯誤、警告和信息性消息。
    EXPORT TO myfile.del OF DEL
        MESSAGES msg.out
            SELECT staff.name, staff.dept, org.location
            FROM org,staff
                    WHERE org.deptnumb = staff.dept;

       在前一頁上的示例中,數(shù)據(jù)被抽取到一個 DEL 格式的文件中。缺省情況下,列值由逗號(,)分隔,而字符串由雙引號(")括起來。如果要抽取
    的數(shù)據(jù)已經(jīng)包含逗號和雙引號,那該怎么辦呢?如果是這樣的話,導(dǎo)入或裝入實用程序不可能確定:哪些符號是實際的數(shù)據(jù),哪些是定界符。要定
    制 EXPORT 的運作方式,可以使用 MODIFIED BY 子句并指定想用文件類型修飾符修改什么。EXPORT 命令的格式如下:


    EXPORT TO file_name OF file_type
        MODIFIED BY file_type_modifiers
        MESSAGES message_file
        select_statement
    chardelx
    指定 x 為新的單字符串定界符。缺省值是雙引號(")。
    coldelx
    指定 x 為新的單字符列定界符。缺省值是逗號(,)。
    codepage=x
    指定 x 這個 ASCII 字符串為輸出數(shù)據(jù)的新代碼頁。在導(dǎo)出操作期間,將字符數(shù)據(jù)從應(yīng)用程序代碼頁轉(zhuǎn)換成這一代碼頁。
    timestampformat="x"
    x 是源表中時間戳記的格式。
    考慮下面這個示例:


    EXPORT TO myfile.del OF DEL
      MODIFIED BY chardel! coldel@ codepage=1208 timestampformat="yyyy.mm.dd hh:mm tt"
      MESSAGES msg.out
      SELECT * FROM schedule


    面的命令以 DEL 格式從 SCHEDULE 表導(dǎo)出數(shù)據(jù),其間發(fā)生了下列行為:

    字符串由感嘆號(!)括起來
    列由 @ 號定界
    字符串被轉(zhuǎn)換成代碼頁 1208
    SCHEDULE 表中用戶定義的時間戳記具有 yyyy.mm.dd hh:mm tt 這種格式

      #導(dǎo)出大對象
      #可以在控制中心導(dǎo)出表,并進(jìn)行調(diào)度。
      #IMPORT實用程序
       IMPORT FROM file_name OF file_type
        MESSAGES message_file
        [ INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE | CREATE ]
        INTO target_table_name


    INSERT 選項將導(dǎo)入的數(shù)據(jù)插入表中。目標(biāo)表必須已經(jīng)存在。
    INSERT_UPDATE 向表中插入數(shù)據(jù),或者用匹配的主鍵更新表中現(xiàn)有的行。目標(biāo)表必須存在,且定義了主鍵。
    REPLACE 選項刪除現(xiàn)有的全部數(shù)據(jù),然后將導(dǎo)入的數(shù)據(jù)插入現(xiàn)有的目標(biāo)表中。
    有了 REPLACE_CREATE 選項,如果目標(biāo)表存在,那么實用程序刪除現(xiàn)有的數(shù)據(jù),然后插入新數(shù)據(jù),就好像指定了 REPLACE 選項一樣。如果沒有定義目標(biāo)表,那么在導(dǎo)入數(shù)據(jù)之前將先創(chuàng)建該表及其相關(guān)索引。正如您可以想到的那樣,輸入文件必須是 PC/IXF 格式的,因為這種格式含有導(dǎo)出表的結(jié)構(gòu)化描述。如果目標(biāo)表是由外鍵引用的父表,就不能使用 REPLACE_CREATE。
    CREATE 選項創(chuàng)建目標(biāo)表及其索引,然后將數(shù)據(jù)導(dǎo)入到新表中。它唯一支持的文件格式是 PC/IXF。您也可以指定表空間的名稱,新表將創(chuàng)建于其中。
    示例:


    IMPORT FROM emp.ixf OF IXF
    COMMITCOUNT 500
        MESSAGES msg.out
        CREATE INTO employee IN datatbsp INDEX IN indtbsp
           
            如果上面的命令因為某些原因而執(zhí)行失敗,那么您可以使用消息文件確定被成功導(dǎo)入并提交的最后一行。然后,您可以使用
    RESTARTCOUNT 選項重新啟動導(dǎo)入。在下面的命令中,實用程序?qū)⑻^前面的 30000 條記錄才開始 IMPORT 操作。


    IMPORT FROM myfile.ixf OF IXF
       COMMITCOUNT 500 RESTARTCOUNT 30000
       MESSAGES msg.out
       INSERT INTO newtable

           compound=x
    使用非原子的復(fù)合 SQL 來插入數(shù)據(jù)。每次會嘗試 x 條語句。
    indexschema=schema
    在創(chuàng)建索引期間對索引使用指定的模式。
    striptblanks
    在向變長字段裝入數(shù)據(jù)時,截斷任何尾部空格。
    lobsinfile
    指出要導(dǎo)入 LOB 數(shù)據(jù)。實用程序?qū)z查 LOBS FROM 子句,以獲取輸入 LOB 文件的路徑。
    這里有一個實際使用這些文件類型修飾符的示例:


    IMPORT FOR inputfile.asc OF ASC
        LOBS FROM /u/db2load/lob1, /u/db2load/lob2
       MODIFIED BY compount=5 lobinsfile
        INSERT INTO newtable
    使用控制中心進(jìn)行import。

      ##LOAD實用程序概述
            LOAD 實用程序是另一種用數(shù)據(jù)來填充表的方法。經(jīng)過格式化的頁被直接
    寫入數(shù)據(jù)庫。這種機制允許進(jìn)行比 IMPORT 實用程序更有效的數(shù)據(jù)移動。
    不過,LOAD 實用程序不執(zhí)行某些操作,如引用或表約束檢查以及觸發(fā)器調(diào)用。

      LOAD FROM input_source OF input_type
        MESSAGES message_file
        [ INSERT | REPLACE | TERMINATE | RESTART ]
        INTO target_tablename


    #example,execute at partition en

    date
    db2 connect to sccrm user db2inst1 using db2inst1
    db2 "LOAD FROM /backup1114/dw_call_cdr_20031002.txt OF DEL modified by coldel; fastparse anyorder replace into dw_call_cdr_20030801"
    date

    db2 "LOAD FROM /db2home/db2inst1/data/dw_newbusi_smscdr_20031026.txt OF DEL modified by coldel; terminate into dw_newbusi_smscdr_20031026_1"

    LOAD 的源輸入的格式可以是 DEL、ASC、PC/IXF 或 CURSOR。游標(biāo)是從 SELECT
    語句返回的結(jié)果集。使用 CURSOR 作為裝入輸入的示例顯示如下:


    DECLARE mycursor CURSOR FOR SELECT col1, col2, col3 FROM tab1;
    LOAD FROM mycursor OF CURSOR INSERT INTO newtab;


    裝入目標(biāo)必須存在,該實用程序才能啟動。這個目標(biāo)可以是表、類型表或表別名。不支持向系統(tǒng)表或臨時表進(jìn)行裝入。

    請使用 MESSAGES 選項來捕獲裝入期間的任何錯誤、警告和信息性消息。

    LOAD 可以以四種不同方式執(zhí)行:

    INSERT 方式將輸入數(shù)據(jù)添加到表中,不更改現(xiàn)有表數(shù)據(jù)。
    REPLACE 方式從表中刪除全部現(xiàn)有數(shù)據(jù),然后用輸入數(shù)據(jù)填充該表。
    TERMINATE 方式終止裝入操作,然后回滾到裝入操作的起始點。一個例外是:如果指定了 REPLACE 方式,那么表將會被截斷。
    RESTART 方式用于重新啟動以前中斷的裝入。它將自動從上一個一致性點繼續(xù)操作。要使用該方式,請指定與前面的 LOAD 命令中相同的選項,
    但卻使用 RESTART 方式。它允許該實用程序找到在裝入處理期間生成的所有必需臨時文件。因此
    ,除非能夠確信不需要從裝入生成的臨時文件,否則就不要以手工方式除去任何這類文件,這一點十分重要。
    一旦裝入不出任何錯誤地完成,臨時文件就會被自動除去。缺省情況下,臨時文件是在當(dāng)前工作目錄中創(chuàng)建的。
    可以使用 TEMPFILES PATH 選項指定存儲臨時文件的目錄。
       #裝入過程的四個階段
           完整的裝入過程分為四個不同階段。

    裝入階段:
    將數(shù)據(jù)裝入表中。
    收集索引鍵和表統(tǒng)計信息。
    記錄一致性點。
    將無效數(shù)據(jù)放入轉(zhuǎn)儲文件,并在消息文件中記錄消息。當(dāng)數(shù)據(jù)行與表的定義不一致時,這些數(shù)據(jù)行就被認(rèn)為是無效數(shù)據(jù),
    并會被拒絕(不裝入表中)。請使用 dumpfile 修飾符來指定文件的名稱和位置,以記錄任何被拒絕的行。
    構(gòu)建階段:
    根據(jù)裝入階段所收集的鍵創(chuàng)建索引。
    刪除階段:
    刪除導(dǎo)致違反鍵唯一性的那些行,并將這些行放入異常表中。除了如上所述有些數(shù)據(jù)只是不滿足目標(biāo)表的定義之外,還有
    一些數(shù)據(jù)已經(jīng)通過了裝入階段,但卻違反了表中定義的唯一性約束。注:這里只將違反鍵唯一性的行作為壞數(shù)據(jù);目前不檢查其它約束。
    由于這類數(shù)據(jù)已經(jīng)裝入了表中,因此 LOAD 實用程序?qū)⒃诖穗A段刪除違規(guī)行。異常表可以用來存儲被刪除的行,使您可以決定在裝入操
    作完成之后如何處理它們。如果沒有指定異常表,那么就刪除違規(guī)行,而不做任何跟蹤,下面對異常表進(jìn)行了更詳細(xì)的討論。
    在消息文件中記錄消息。
    索引復(fù)制階段:
    如果 ALLOW READ ACCESS 是用 USE TABLESPACE 選項指定的,那么就會將索引數(shù)據(jù)從系統(tǒng)臨時表空間復(fù)制到
    索引應(yīng)該駐留的表空間。
    異常表是一個用戶定義的表,它必須與要裝入的目標(biāo)表具有相同的列定義。如果至少有一列沒有出現(xiàn)在異常表中,那么就
    會廢棄違規(guī)行。只可以向表末尾添加兩個額外的列:記錄行插入時間的時間戳記列,以及存儲(認(rèn)為行所包含的是壞數(shù)據(jù)的)
    理由(或消息)的 CLOB 列。



    LOAD FROM emp.ixf OF IXF
        MODIFIED BY DUMPFILE=c:\emp.dmp
      MESSAGES msg.out
        TEMPFILES PATH d:\tmp
        INSERT INTO employee
        FOR EXCEPTION empexp

    在上圖中,(1)顯示了輸入源文件的內(nèi)容。
    (2)中顯示的目標(biāo)表 EMPLOYEE 是用以下列定義創(chuàng)建的:
    第一列必須具有唯一性。
    最后一列是不能為 NULL 的數(shù)字列。
    (3)中顯示的異常表 EMPEXP 是用與 EMPLOYEE 相同的那些列以及時間戳記和消息列創(chuàng)建的。
    在裝入階段,輸入文件的所有數(shù)據(jù)都被裝入了 EMPLOYEE — 但用粉紅色標(biāo)記的兩行除外,
    因為它們不滿足 NOT NULL 和 NUMERIC 列定義。由于指定了 DUMPFILE 修飾符,因此這兩行被記錄在文件 C:\emp.dmp 中。

    在刪除階段,用黃色標(biāo)記的兩行被從 EMPLOYEE 中刪除了,并且被插入異常表 EMPEXP 中。這是由于違反了 EMPLOYEE 表中第一
    列的唯一性而引起的。

    在裝入結(jié)束時,您應(yīng)該檢查消息文件、轉(zhuǎn)儲文件和異常表,然后決定如何處理被拒絕的行。
    如果裝入成功完成,那么就會除去在 D:\tmp 中生成的臨時文件。

      #裝入選項
          ROWCOUNT n:允許用戶指定只裝入輸入文件中的前 n 條記錄。
    SAVECOUNT n:每裝入 n 條記錄之后就建立一致性點。同時會生成消息,并會將其記錄在消息文件中,以指出在保存點成功地裝入了多少輸入行。這一點在輸入文件類型為 CURSOR 時是無法做到的。
    WARNINGCOUNT n:在發(fā)出 n 次警告后停止裝入。
    INDEXING MODE [ REBUILD | INCREMENTAL | AUTOSELECT | DEFERRED ]:在構(gòu)建階段,構(gòu)建索引。這個選項指定 LOAD實用程序是重新構(gòu)建索引還是增量式地擴展索引。支持四種不同方式:
    REBUILD 方式強制重新構(gòu)建所有索引。
    INCREMENTAL 方式只用新數(shù)據(jù)擴展索引。
    AUTOSELECT 方式允許實用程序在 REBUILD 和 INCREMENTAL 之間進(jìn)行選擇。
    DEFERRED 方式意味著在裝入期間不創(chuàng)建索引。所涉及的索引都用需要的刷新進(jìn)行標(biāo)記。這些索引將在重新啟動數(shù)據(jù)庫或第一次訪問這類索引時重新構(gòu)建。
    STATISTICS [ YES | NO ]:在執(zhí)行完裝入以后,以前的目標(biāo)表統(tǒng)計信息極有可能不再有效,因為目標(biāo)表中已加入了更多的數(shù)據(jù)。您可以通過指定 STATISTICS YES 來選擇收集這些統(tǒng)計信息。
      #文件類型修飾符。文件類型修飾符是用 MODIFIED BY 子句指定的。下面是少數(shù)幾個您可能會覺得有用的修飾符:

    fastparse:減少了對裝入數(shù)據(jù)的語法檢查以增強性能。
    identityignore、identitymissing 和 identityoverride:分別用來忽略、指出丟失或覆蓋標(biāo)識列數(shù)據(jù)。
    indexfreespace n、pagefreespace n 和 totalfreespace n:在索引和數(shù)據(jù)頁中保留指定量的空閑頁。
    norowwarnings:禁止行警告。
    lobsinfile:指出將裝入 LOB 文件;并檢查 LOBS FROM 選項以獲取 LOB 路徑。
     
      ##裝入期間的表訪問
        在裝入表期間,LOAD 實用程序會用互斥鎖將它鎖定。在裝入完成以前,不允許任何其它訪問。這是 ALLOW NO ACCESS 選項的缺省行為。在進(jìn)行這種裝入期間,表處于 LOAD IN PROGRESS 狀態(tài)。有一個方便好用的命令可以檢查裝入操作的狀態(tài),還返回表狀態(tài):


    LOAD QUERY TABLE table_name


    您可能猜到了這一點,即有一個選項允許進(jìn)行表訪問。ALLOW READ ACCESS 選項導(dǎo)致表在共享方式下被鎖定。閱讀器可以訪問表
    中已經(jīng)存在的數(shù)據(jù),卻不能訪問新的數(shù)據(jù)。正在裝入的數(shù)據(jù)要等到裝入完成后才可獲得。此選項將裝入表同時置于 LOAD IN PROGRESS
    狀態(tài)和 READ ACCESS ONLY 狀態(tài)。
    正如在前一頁中所提到的那樣,在構(gòu)建階段可以重新構(gòu)建全部索引,也可以用新數(shù)據(jù)擴展索引。對于 ALLOW READ ACCESS 選項,
    如果重新構(gòu)建全部索引,那么會為該索引創(chuàng)建一個鏡像副本。當(dāng) LOAD 實用程序到達(dá)索引復(fù)制階段時(請參閱裝入過程的四個階段)
    ,目標(biāo)表被置為脫機,然后將新索引復(fù)制到目標(biāo)表空間。
    無論指定哪個表訪問選項,裝入都需要各種鎖來進(jìn)行處理。如果某一應(yīng)用程序已經(jīng)鎖定了目標(biāo)表,那么 LOAD 實用程序就必須等到
    鎖被釋放。不想等待鎖的話,您可以在 LOAD 命令中使用 LOCK WITH FORCE 選項,以強制關(guān)閉其它持有沖突鎖的應(yīng)用程序。

      ##檢查暫掛表狀態(tài)
         至此,我們知道:不會將與目標(biāo)表定義不一致的輸入數(shù)據(jù)裝入表中。在裝入階段,這樣的數(shù)據(jù)會遭到拒絕,并被記錄在消息文件中。
    在刪除階段,LOAD 實用程序會刪除那些違反任何唯一性約束的行。如果指定了異常表,違規(guī)的行將插入該表。對于表可能定義的
    其它約束(如引用完整性和檢查約束),怎么辦呢?LOAD
    實用程序不檢查這些約束。表會被置于 CHECK PENDING 狀態(tài),這種狀態(tài)迫使您先手工檢查數(shù)據(jù)完整性,然后才能訪問表。如前一頁
    中所討論的那樣,可以使用 LOAD QUERY 命令查詢表狀態(tài)。系統(tǒng)目錄表 SYSCAT.TABLES 中的列 CONST_CHECKED 也指出表中所定義的
    每個約束的狀態(tài)。

           狀態(tài)類型:Y,N,U,W,F
         要手工為一個或多個表關(guān)閉完整性檢查,請使用 SET INTEGRITY 命令。下面給出了一些示例,以演示該命令的部分選項。要立即檢查表
    EMPLOYEE 和 STAFF 追加的選項的完整性,請使用以下命令:
    SET INTEGRITY FOR employee, staff IMMEDIATE CHECKED INCREMENTAL
    要用 IMMEDIATE UNCHECKED 選項忽略對表 EMPLOYEE 的外鍵檢查:
    SET INTEGRITY FOR employee FOREIGN KEY IMMEDIATE UNCHECKED
    在裝入完成以后,有時您可能想將目標(biāo)表及其具有外鍵關(guān)系的派生表置于 CHECK PENDING 狀態(tài)。這樣做確保了在對完整性進(jìn)行手工
    檢查之前,所有這些表的可訪問性都得到了控制。裝入選項是 CHECK PENDING CASCADE IMMEDIATE,它指出:立即將外鍵約束的檢查
    暫掛狀態(tài)擴展到所有派生外鍵表。缺省情況下,只會將裝入的表置于檢查暫掛狀態(tài)。這正是裝入選項
    CHECK PENDING CASCADE DEFERRED 的行為。

    ## IMPORT VS LOAD
       IMPORT LOAD
       SLOWER ON LARGE AMOUNTS OF DATA FASTER ON LARGE LOADS-WRITES FORMATTED PAGES
       CREATION OF TABLES & INDEXES WITH IXF   TABLES AND INDEXES MUST EXIST
       WSF SUPPORTED WSF NOT SUPPORTED
       IMPORT INTO TABLES AND VIEWS LOAD TABLES ONLY
       NO SUPPORT FOR IMPORTING INTO SUPPORTED
          MATERIALIZED QUERY TABLES
       ALL ROWS LOGGED MINIMAL LOGGING SUPPORTED
       TRIGGERS WILL BE FIRED TRIGGERS NOT SUPPORTED
       TEMPORARY SPACE USED WITHIN THE DATABASE  USED OUTSIDE THE DATABASE
       CONSTRAINTS VALIDATED DURING IMPORT   ALL UNIQUE KEY IS VERIFIED DURING LOAD
       OTHER CONSTRAINTS ARE VALIDATED WITH THE
       SET INTEGRITY COMMAND
       IF INTERRUPTED,TABLE IS USABLE WITH IF INTERRUPTED,THE TABLE IS HELD IN LOAD PENDING
       DATA UP TO THE LAST COMMIT POINT STATE,EITHER RESTART OR RESTORE TABLES EFFECTED
      
       RUN RUNSTATS AFTER IMPORT FOR STATISICS  STATISTICS CAN BE GATHERED DURING LOAD
       IMPORT INTO MAINFRAM DATABASE VIA CANNOT LOAD INTO MAINFRAME DATABASE
          DB2 CONNECT
       NO BACK-UP IMAGE REQUIRED BACKUP CAN BE CREATED DURING LOAD
    posted @ 2005-06-08 19:07 小馬歌 閱讀(2951) | 評論 (0)編輯 收藏
     
    六,創(chuàng)建數(shù)據(jù)庫
    創(chuàng)建數(shù)據(jù)庫時,完成如下任務(wù):
    * 設(shè)置數(shù)據(jù)庫所需的所有系統(tǒng)目錄表
    * 分配數(shù)據(jù)庫恢復(fù)日志
    * 創(chuàng)建數(shù)據(jù)庫配置文件,設(shè)置缺省值
    * 將數(shù)據(jù)庫實用程序與數(shù)據(jù)庫綁定

    初始數(shù)據(jù)庫分區(qū)組的定義
    當(dāng)最初創(chuàng)建數(shù)據(jù)庫時,會為所有在db2nodes.cfg文件中指定的分區(qū)創(chuàng)建數(shù)據(jù)庫分區(qū).可以用
    add dbpartitionnum 和 drop dbpartitionnum verify 命令來添加或除去其他分區(qū).
    定義了三個數(shù)據(jù)庫分區(qū)組:
             * 用于容納syscatspace表空間的ibmcatgroup, 保存系統(tǒng)目錄表
             * 用于容納tempspaces1表空間的ibmtempgroup,保存系統(tǒng)臨時表
    * 用于容納userspace1表空間的ibmdefaultgroup,缺省保存用戶表和索引

    (創(chuàng)建新的數(shù)據(jù)庫后最好重新啟動db2clp)

    EXAMPLE:
    CREATE DATABASE PERSONL
       CATALOG TABLESPACE
         MANAGED BY SYSTEM USING (path 'D:\PCATALOG','E:\PCATALOG')
         EXTENTSIZE 16 PREFETCHSIZE 32
       USER TABLESPACE
         MANAGED BY DATABASE USING (FILE 'D:\DB2DATA\PERSION1' 5000,
                                    FILE 'D:\DB2DATA\PERSION2' 5000)
         EXTENSIZE 32 PREFETCHSIZE 64
       TEMPORARY TABLESPACE
         MANAGED BY SYSTEM USING (path 'F:\DB2TEMP\PERSONL')
       WITH "PERSONNEL DB FOR DSCHIEFER CO"

    create database sccrm using codeset GBK territory CN

    #刪除數(shù)據(jù)庫
       DROP DATABASE <DB-NAME>
      

    # 數(shù)據(jù)庫目錄的定義
      *本地數(shù)據(jù)庫目錄(節(jié)點的目錄中的文件SQLDBDIR)
         本地數(shù)據(jù)庫目錄文件存在于定義了數(shù)據(jù)庫的每條路徑(或WIN中的"驅(qū)動器")
         對于可以從該位置存取得每個數(shù)據(jù)庫此目錄都包含一個條目.包含信息:
          數(shù)據(jù)庫名稱,數(shù)據(jù)庫別名,數(shù)據(jù)庫注釋,數(shù)據(jù)庫的根目錄的名稱,其他系統(tǒng)信息.
      *系統(tǒng)數(shù)據(jù)庫目錄(實例中的目錄中的文件SQLDBDIR)
         對于數(shù)據(jù)庫管理器的每個實例,都存在一個系統(tǒng)數(shù)據(jù)庫目錄文件,該文件對于針對
         此實例編目的每個數(shù)據(jù)庫都包含一個條目.使用CREATE DATABASE時隱式的編目數(shù)據(jù)庫
         每個數(shù)據(jù)庫包含一條信息: 數(shù)據(jù)庫名,數(shù)據(jù)庫別名,數(shù)據(jù)庫注釋,本地數(shù)據(jù)庫目錄的位置,
          指示該數(shù)據(jù)庫是間接的指示符,表示它與系統(tǒng)數(shù)據(jù)庫目錄文件駐留在相同的機器上.
    查看本地或系統(tǒng)數(shù)據(jù)庫目錄文件
       LIST DATABASE DIRECTORY ON <location>
       LIST DATABASE DIRECTORY
      
      *節(jié)點目錄
         數(shù)據(jù)庫管理器在編目第一個數(shù)據(jù)庫分區(qū)時會創(chuàng)建節(jié)點目錄.要編目數(shù)據(jù)庫分區(qū),
         使用CATALOG NODE命令.要顯示本地節(jié)點目錄的內(nèi)容,使用LIST NODE DIRECTORY
         .在每個數(shù)據(jù)庫客戶機上都創(chuàng)建并維護(hù)節(jié)點目錄.對于具有客戶機可以存取得一個
         或多個數(shù)據(jù)庫的每個遠(yuǎn)程工作站,該目錄都包含一個條目.db2客戶機使用該節(jié)點目錄中
         的通信端點信息.
         catalog tcpip node my_node_name remote 10.10.10.10 server 54321
    uncatalog node my_node_name
         catalog database DB as my_data_alias at node my_node_name
    # "輕量級目錄訪問協(xié)議" (LDAP)目錄服務(wù)
        目錄服務(wù)是一個關(guān)于分布式環(huán)境中的多個系統(tǒng)和服務(wù)的資源信息的資源庫;它
        提供對這些資源的客戶機和服務(wù)器存取.客戶機和服務(wù)器將使用目錄服務(wù)來找出
        如何存取其他資源.
        LDAP是業(yè)界標(biāo)準(zhǔn)的存取目錄服務(wù)的方法.每個數(shù)據(jù)庫服務(wù)器實例都會將它的存在情況發(fā)布給LDAP,
        并在創(chuàng)建數(shù)據(jù)庫時向LDAP目錄提供數(shù)據(jù)庫信息.當(dāng)客戶機與數(shù)據(jù)庫連接后,可從LDAP目錄檢索
        服務(wù)器的目錄信息.不再要求每個客戶機將目錄信息以本地方式存儲在每臺機器上.

    # 創(chuàng)建數(shù)據(jù)庫分區(qū)組
        可以使用CREATE DATABASE PARTITION GROUP語句創(chuàng)建數(shù)據(jù)庫分區(qū)組.此語句指定表空間
        容器和表數(shù)據(jù)將駐留其上的一組數(shù)據(jù)庫分區(qū).
          *為數(shù)據(jù)庫分區(qū)組創(chuàng)建分區(qū)映象.
          *生成分區(qū)映象標(biāo)識
          *將記錄插入下列目錄表:
           SYSCAT.DBPARTITONGROUPS,SYSCAT.PARTITIONMAPS,SYSCAT.DBPARTITIONGROUPDEF

       CREATE DATABASE PARTITION GROUP <name> ON DBPARTITIONNUMS (<value>,<value>)
     
    #創(chuàng)建表空間
    表空間建立數(shù)據(jù)庫系統(tǒng)使用的物理存儲設(shè)備與用來存儲數(shù)據(jù)的邏輯容器或表的關(guān)系

    CREATE TABLESPACE <name>
        MANAGED BY SYSTEM
        USING ('<path>')
       
    CREATE TABLESPACE <name>
        MANAGED BY DATABASE
        USING (FILE'<path>' <size>)
               DEVICE
    *指定分區(qū)組
    CREATE TABLESPACE PLANS IN ODDNODEGROUP
        MANAGED BY DATABASE
        USING (DEVICE '/dev/HDISK0' 10000,DEVICE '/dev/n1hd01' 40000) on node 1
            (DEVICE '/dev/HDISK0' 10000,DEVICE '/dev/n1hd03' 40000) on node 3
            (DEVICE '/dev/HDISK0' 10000,DEVICE '/dev/n1hd05' 40000) on node 5 

    CREATE  REGULAR  TABLESPACE CUSTTBS IN DATABASE PARTITION GROUP CUSTOMER
    PAGESIZE 4 K  MANAGED BY DATABASE  USING
    ( FILE 'D:\testdbtbs\custtbs0_1' 5120 ) ON DBPARTITIONNUM (0)
    USING
    ( FILE 'D:\testdbtbs\custtbs1_1' 5120 ) ON DBPARTITIONNUM (1)
    EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16
     
       在多分區(qū)數(shù)據(jù)庫中創(chuàng)建單分區(qū)組.
       CREATE DATABASE PARTITION GROUP single_tbs_grp ON DBPARTITIONNUM(0)
       在單分區(qū)組中創(chuàng)建單分區(qū)表空間.
       CREATE TABLESPACE single_part_tbs IN DATABASE PARTITION GROUP single_tbs_grp
       MANAGED BY DATABASE USING (FILE 'd:\testdbtbs\single_part_tbs_1' 5120)
      
      在UNIX中使用字符設(shè)備.
     
    * 創(chuàng)建特定類型的表空間
      創(chuàng)建系統(tǒng)臨時表空間
      CREATE SYSTEM TEMPORARY TABLESPACE tmp_tbsp
       MANAGED BY SYSTEM
       USING ('d:\tmp_tbsp','e:\tmp_tbsp')
      
       在分區(qū)數(shù)據(jù)庫中創(chuàng)建系統(tǒng)臨時表空間 只能在IBMTEMPGROUP中產(chǎn)生
       CREATE  SYSTEM TEMPORARY  TABLESPACE TEMPSYS_TBSP1
        IN DATABASE PARTITION GROUP IBMTEMPGROUP
        PAGESIZE 4 K  MANAGED BY SYSTEM 
        USING ('D:\testdbtbs\sys_temp_0' ) ON DBPARTITIONNUM (0)
        USING ('d:\testdbtbs\sys_temp_1' ) ON DBPARTITIONNUM (1)
        EXTENTSIZE 16 OVERHEAD 10.5 PREFETCHSIZE 16
      創(chuàng)建用戶臨時表空間
       CREATE USER TEMPORARY TABLESPACE usr_tbsp
        MANAGED BY DATABASE
        USING (FILE 'd:\db2data\user_tZbsp' 5000,
               FILE 'e:\db2data\user_tbsp' 5000)
       
        在分區(qū)數(shù)據(jù)庫中創(chuàng)建用戶臨時表空間 可在除IBMTEMPGROUP中的其他分區(qū)組中產(chǎn)生.
       CREATE  USER TEMPORARY  TABLESPACE USER_TEMP_TBSP
        IN DATABASE PARTITION GROUP USER_TEMP_TBSGRP
        PAGESIZE 4 K  MANAGED BY SYSTEM 
        USING ('D:\testdbtbs\user_temp_0' ) ON DBPARTITIONNUM (0)
        USING ('d:\testdbtbs\user_temp_1' ) ON DBPARTITIONNUM (1)       
      
      *指定物理設(shè)備
      在WINDOWS上,指定物理硬盤驅(qū)動器,使用\\.\PhysicalDriveN (N-0,1,2..)
                  指定邏輯驅(qū)動器使用\\.\N: (N是系統(tǒng)中的邏輯盤符)
      在UNIX中指定字符設(shè)備.
     
       #SMS  當(dāng)對象增大時,文件每次擴展一頁。若需要提高插入性能,可以考慮啟用多頁分配,如MDC表。
    運行db2empfa. 對于多分區(qū)數(shù)據(jù)庫必須對每個分區(qū)運行此使用程序,一旦啟用就不能禁止。
       #DMS 
    單分區(qū)表空間大小,4kb - 64gb;8kb-128gb;16kb-256gb;32kb-512gb
                在缺省情況下,每個容器都保留一個數(shù)據(jù)塊作為開銷,表空間的最小大小是5個數(shù)據(jù)塊。
    三個保留給開銷使用。兩個用于用戶表數(shù)據(jù)。

      #在多個節(jié)點上產(chǎn)生表空間
    CREATE TABLESPACE TS1 MANAGED BY DATABASE USING
    (device '/dev/rcont $N' 20000)

    CREATE TABLESPACE TS2 MANAGED BY DATABASE USING
    (file '/DB2/containers/TS2/container $N+100' 10000)

    CREATE TABLESPACE TS3 MANAGED BY SYSTEM USING
    ('/TS3/cont $N%2', '/TS3/cont $N%2+2')

      #增加表空間的空間
        ALTER TABLESPACE RESOURCE
           ADD (DEVICE '/dev/rhd9' 10000,
                DEVICE '/dev/rhd10' 10000)
       #改變表空間狀態(tài)
        DB2 ALTER TABLESPACE <name> SWITCH ONLINE
       #刪除表空間
        DROP TABLESPACE <name>
        可以先增加一個系統(tǒng)臨時表空間,然后刪除老的.
       #獲取表空間使用信息
        get snapshot for tablespaces on sample
       #獲取表空間的CONTAINER
        LIST TABLESPACE CONTAINERS FOR 0(TABLESPACE_ID) SHOW DETAIL
      
    # 創(chuàng)建和填充表

      列出表:
      list tables - 列出當(dāng)前用戶的表
      list tables for all - 列出數(shù)據(jù)庫中所定義的所有表
      list tables for schema schemaname - 列出具有指定模式的表
      describe table tablename - 顯示指定表的結(jié)構(gòu)

      產(chǎn)生表和主鍵
      CREATE TABLE DEPARTMENT
    (DEPTNO CHAR(3) NOT NULL,
    DEPTNAME VARCHAR(29) NOT NULL,
    MGRNO CHAR(6),
    ADMRDEPT CHAR(3) NOT NULL,
    LOCATION CHAR(16),
    PRIMARY KEY (DEPTNO))
      IN RESOURCE
      產(chǎn)生外鍵
      CREATE TABLE EMPLOYEE
    (EMPNO CHAR(3) NOT NULL PRIMARY KEY,
    FIRSTNME VARCHAR(12) NOT NULL,
    LASTNAME VARCHAR(15) NOT NULL,
    WORKDEPT CHAR(3),
    PHONENO CHAR(4),
    PHOTO BLOB(10m) NOT NULL,
    FOREIGN KEY DEPT (WORKDEPT)
    REFERENCES DEPARTMENT ON DELETE NO ACTION)
      IN RESOURCE
            ON DELETE NO ACTION 表示如果該部門有任何雇員則該部門不能被刪除.
      定義表檢查約束
          在創(chuàng)建或改變表時,通過將檢查約束定義與表關(guān)聯(lián)來對該表創(chuàng)建表檢查約束.
          當(dāng)INSERT或UPDATE語句修改該表中的數(shù)據(jù)時,就自動激活此約束.表檢查約束對
          DELETE或SELECT沒有影響.檢查約束不能與類型表相關(guān).
           約束名不能與在同一個CREATE TABLE語句內(nèi)指定的任何其他約束相同.若不
           指定約束名,系統(tǒng)會自動生成18個字符的唯一標(biāo)識符.
          表檢查約束用于實現(xiàn)鍵唯一性或引用完整性約束所未涵蓋的數(shù)據(jù)完整性規(guī)則.
          如:
    CREATE TABLE EMP_ACT
    (EMPNO CHAR(6) NOT NULL,
    PROJNO CHAR(6) NOT NULL,
    ACTNO SMALLINT NOT NULL,
    EMPTIME DECIMAL(5,2),
    EMSTDATE DATE,
    EMENDATE DATE,
    CONSTRAINT ACTDATES CHECK(EMSTDATE <= EMENDATE) )
    IN RESOURCE
         約束EMSTDATE必須小于EMENDATE

       定義信息性約束
           信息性約束是一個規(guī)則,可由SQL編譯器使用,但數(shù)據(jù)庫管理器不會強制使用它.
           SQL編譯器包括一個重寫查詢階段,它將SQL語句變換為可能是優(yōu)化的格式并改進(jìn)
           所需數(shù)據(jù)的存取路徑.目的是改進(jìn)查詢性能.
       對新表定義生成列
           生成列在基本表中定義,在這些列中,存儲的值是使用表達(dá)式計算得出的,而不是
    通過插入或更新操作指定.可以改善查詢性能,特別是計算很復(fù)雜或在查詢時要進(jìn)行
    多次表達(dá)式求值.
    CREATE TABLE t1 (c1 INT,
    c2 DOUBLE,
    c3 DOUBLE GENERATED ALWAYS AS (c1 + c2)
    c4 GENERATED ALWAYS AS
    (CASE WHEN c1 > c2 THEN 1 ELSE NULL END))
        創(chuàng)建用戶定義臨時表
    臨時表不出現(xiàn)在系統(tǒng)目錄中,不能共享此表
    DECLARE GLOBAL TEMPORARY TABLE gb1_temp
      LIKE tmpltab1
      ON COMMIT DELETE ROES
      NOT LOGGED
      IN usr_tbsp
     
    定義此用戶臨時表所使用的列的名稱和描述與empltabl的列的名稱和描述完全相同.
    隱式定義只包括列名,數(shù)據(jù)類型,可空性特征和列缺省值屬性.未定義其他列屬性,包括
    唯一約束,外鍵約束,觸發(fā)器和索引.
        對新表定義身份列
            為插入表的每一行自動生成保證唯一數(shù)字值的方法.
            只在單分區(qū)數(shù)據(jù)庫中支持.
    CREATE TABLE test_table ( col1 int,
      col2 double,
      col3 int not null generated always as identity
           (start with 100,increment by 5))

        創(chuàng)建序列
            序列是一個數(shù)據(jù)庫對象,它允許自動生成值.序列特別適合于生成唯一鍵值.
            與身份列屬性不同,未使序列與特定表列相關(guān),也未將它綁定至唯一列,只是僅可通過該表
            列存取.只在單分區(qū)數(shù)據(jù)庫中才受支持.
            在多分區(qū)環(huán)境中的單分區(qū)數(shù)據(jù)庫也不行.
            CREATE SEQUENCE order_seq
                   START WITH 1
                   INCREMENT BY 1
                   NOMAXVALUE
                   NOCYCLE
                   CACHE 24
           使用序列
             insert into order (orderno,custno)
                 values (nextval for order_seq,123456);
             insert into line_item (orderno,partno,quantity)
                 values (prevval for order_seq,987654,1)
             使用NEXTVAL,PREVVAL可以在兩個不同的表中使用相同的序列號.
       對表定義維
      
    引用完整性約束 第 13 頁(共17 頁)




    引用完整性約束是在創(chuàng)建表時定義的,或者是在之后使用 alter table 語句定義的。

    建立引用完整性的子句有:

    primary key 子句
    unique constraint 子句
    foreign key 子句
    references 子句
    例如:


    create table artists (artno INT, ...  primary key (artno) foreign key dept (workdept)
              references department on delete no action)


    讓我們了解一下各種引用完整性規(guī)則:

    插入規(guī)則:

    有一個隱式規(guī)則,在沒有找到父項時取消插入。
    刪除規(guī)則:

    Restrict:如果有從屬行就不能刪除父行。
    Cascade:刪除父表中的行會自動刪除其從屬表中的任何相關(guān)行。
    No Action(缺省值):在應(yīng)用了所有其它引用約束之后強制每個子行的父行都存在。
    Set Null:外鍵字段設(shè)置成 null;其它列保持不變。
    更新規(guī)則:

    Restrict:如果從屬表中的行與鍵的初始值相匹配,則不更新父鍵。
    No Action(缺省值):如果從屬表中沒有任何行與父鍵相匹配,則不更新父鍵。

       增加表中的列
       ALTER TABLE EMPLOYEE
         ADD <COLUMN_NAME> <DATA_TYPE> <NULL_ATTRIBUTE>
        
       增加唯一性約束
       ALTER TABLE EMPLOYEE
            ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE)
       刪除唯一性約束
       ALTER TABLE EMPLOYEE
         DROP UNIQUE NEWID
       刪除主鍵
       ALTER TABLE <NAME>
         DROP PRIMARY KEY
       增加主鍵
      ALTER TABLE <NAME> ADD PRIMARY KEY (COL1,COL2,..)
       刪除外鍵
       ALTER TABLE <name>
    DROP FOREIGN KEY <foreign_key_name>
       刪除表檢查約束
       ALTER TABLE <table_name>
    DROP CHECK <check_constraint_name>   
       添加表的外鍵
         ALTER TABLE <NAME>
            ADD CONSTRAINT <constraint_NAME>
            FOREIGN KEY <COLUMN_NAME>
            references table_name <col_name>
            ON DELETE <ACTION_TYPE>
            ON UPDATE <ACTION_TYPE>
     
       在多個表空間中創(chuàng)建表
           表數(shù)據(jù),表索引及與表相關(guān)聯(lián)的任何長型列數(shù)據(jù)可以存儲在同一表空間中,也可以
           放在不同的表空間中.只能使用DMS.
           CREATE TABLE <name>
            (<column_name> <data_type> <null_attribute>)
             IN <table_space_name>
             INDEX IN <index_space_name>
             LONG IN <long_space_name>
            
        在分區(qū)數(shù)據(jù)庫中創(chuàng)建表
            必須小心的選擇適當(dāng)?shù)姆謪^(qū)建,以后不能跟改.再者,必須將任何唯一索引定義為分區(qū)鍵的一個超集.
            表的大小是(分區(qū)數(shù)*分區(qū)大小(4K是64GB).
            CREATE TABLE MIXREC (MIX_CNTL INTEGER NOT NULL,
                 MIX_DESC CHAR(20) NOT NULL,
                 MIX_INT INTEGER NOT NULL)
                 IN MIXTS12
                 PARTITIONING KEY (MIX_INT) USING HASHING
        產(chǎn)生觸發(fā)器
          用途:
          驗證輸入的數(shù)據(jù)
          為新插入的行生成值
          為交叉引用而從其他表中進(jìn)行讀取
          為審計跟蹤而向其他表寫入
         
          CREATE TRIGGER <name>
            <action> ON <table_name>
            <operation>
            <triggered_action>
           
        創(chuàng)建用戶定義函數(shù)(UDF)或方法
            UDF擴展并添加了SQL的內(nèi)置函數(shù)提供的支持,且可在可使用內(nèi)置函數(shù)的任何
            地方使用.可使用兩種方式創(chuàng)建UDF:
               外部函數(shù),用一種編程語言編寫
               有源函數(shù),從另一個現(xiàn)有函數(shù)繼承產(chǎn)生.
              
              
               三種UDF:標(biāo)量,返回一個單值答案.
                       列,從一組相似(一列)的值中返回單值答案,如AVG()只能定義有源函數(shù).
                       表,將一個表返回至引用它的SQL,只能在select語句的from子句中引用表函數(shù).
             UDF 記錄在SYSCAT.FUNCTIONS AND SYSCAT.FUNCPARMS目錄視圖中.
        用戶定義類UDT
            UDT是由用戶在數(shù)據(jù)庫中創(chuàng)建的命名的數(shù)據(jù)類型.UDT可以是單值類型,它與內(nèi)部數(shù)據(jù)類型或
            結(jié)構(gòu)化類型共享一個公共的表示法,結(jié)構(gòu)化類型具有一個命名屬性序列,其中每個屬性都有一個類型.
            結(jié)構(gòu)化類型可以是另一個定義類型層次結(jié)構(gòu)的結(jié)構(gòu)化類型的子類型.
       
        創(chuàng)建視圖
            CREATE VIEW <name> (<column>,<column>,<column>)
               SELECT <column_names> FROM <table_name>
               WITH CHECK OPTION
           WITH CHECK OPTION 子句指示必須根據(jù)該視圖定義檢查該視圖的任何更新的行或插入的行,
           如它不符合,則拒絕它,增加了數(shù)據(jù)完整性.
           CREATE VIEW EMP_VIEW
             SELECT LASTNAME AS DA00NAME,
                    EMPNO AS DA00NUM,
                    PHONENO
             FROM EMPLOYEE
           WHERE WORKDEPT = 'A00'
           WITH CHECK OPTION
          
        創(chuàng)建具體查詢表
            具體查詢表是以查詢結(jié)果為基礎(chǔ)所定義的一種表.因此,具體查詢表通常包含預(yù)先計算的結(jié)果,
            這些結(jié)果是根據(jù)表定義中引用的一個或多個表中的現(xiàn)有數(shù)據(jù)計算而得.若SQL編譯器確定查詢
            在針對具體查詢表運行時比對一個或多個基本表運行時效率更高,將對具體查詢表執(zhí)行該查詢.
           
       創(chuàng)建別名
           別名是引用表,別名或視圖的間接方法,這樣SQL語句可與該表或視圖的限定名無關(guān).
          
           CREATE ALIAS WORKERS FOR EMPLOYEE
          
       索引,索引擴展或索引規(guī)范
           索引是行位置的列表,按一個或多個指定列的內(nèi)容來排序.
           索引擴展是一個索引對象,它配合帶有結(jié)構(gòu)化類型或單值類型列的索引使用.
           索引規(guī)范是一個元數(shù)據(jù)結(jié)構(gòu).它告訴優(yōu)化器別名所引用的數(shù)據(jù)源對象(表或視圖)
           是否存在索引.只是索引的描述.
             索引顧問,,db2advis
           索引得最大列數(shù)是16,最大長度是1024字節(jié).
           CREATE INDEX <name> ON <talbe_name> (<column_name>)
       重命名表或索引
           要重命名的表或索引不能是目錄表或索引,總結(jié)表或索引,類型表,已聲明
           全局臨時表以及昵稱的名稱.
            并且不能在下列任何一個對象中引用現(xiàn)有表或索引:
            視圖,觸發(fā)器,引用約束,總結(jié)表,現(xiàn)有引用列的作用域
            表中不能有檢查約束,不能有除身份列以外的其他生成列.
           
            RENAME TABLE <SCHEMA_NAME>.<TABLE_NAME> TO <NEW_NAME>
            RENAME INDEX <schema_name>.<index_name> TO <new_name>
           

    索引可以:

    是升序或是降序(如果沒有指定,缺省值是升序)
    是唯一的,也可以是不唯一的(如果沒有指定,缺省值是不唯一的)
    是復(fù)合的
    用來執(zhí)行群集
    是雙向的(這由 allow 或 disallow reverse scans 控制的)
    包括其它列(這只適用于唯一索引)。

       刪除表
           DROP TABLE <TABLE_NAME>
       刪除索引
           DROP INDEX <index_name>
        
       通過命令行處理器調(diào)用"性能配置向?qū)?
           使用AUTOCONFIGURE 
          
    終止所有應(yīng)用程序與數(shù)據(jù)庫的連接
    db2 force applicaitons all

    #給用戶授權(quán)
    GRANT privilege ON object-type object-name
      TO [{USER | GROUP | PUBLIC}] authorization-name
      [WITH GRANT OPTION]
     
      GRANT INSERT,DELETE ON TABLE staff TO USER rosita WITH GRANT OPTION
     
      #撤消用戶權(quán)利
      REVOKE privilege ON object-type object-name
      FROM [{USER | GROUP | PUBLIC}] authorization-name

      REVOKE ALL PRIVILEGES ON TABLE staff FROM joanna
    posted @ 2005-06-08 19:06 小馬歌 閱讀(1201) | 評論 (0)編輯 收藏
     
    db2 -tvf my.sql

    db2level 顯示db2的版本號

    顯示SQL出錯信息
    db2 "? sql6031"

    db2mtrk

    管理DAS
    產(chǎn)生:root運行-dascrt -u dasuser1
    刪除:root運行-dasdrop
    啟動:dasusr1運行-db2admin start
    停止:dasusr1運行-db2admin stop

    db2_kill
    ipclean

    db2start dbpartitionnum 9 restart

    AIX啟動控制中心:
    db2cc

    DB2用戶管理:
      db2 use os to manage users.You can use following steps to add a db2 user:
      1,add a user on os.
      2,grant rights to user.
        GRANT  CREATETAB,CONNECT ON DATABASE  TO USER FUJIE;
        grant select, update, delete on table employee to user john with grant option

    一,實例

    產(chǎn)生
    db2icrt -a AuthType(SERVER,CLIENT,SERVER_ENCRYPT) -p PORT_NAME
    表空間PREFETCHSIZE的設(shè)置,EXTENTSIZE的關(guān)系,緩沖池的監(jiān)控,頁清除程序的多少。
       臨時表空間頁面大小與其他表空間頁面大小的設(shè)置,臨時表空間與緩沖池的設(shè)置。
    example:db2icrt db2 -s ese -p d:\db2 -u Administrator

    注意:在UNIX 上產(chǎn)生實例時需要產(chǎn)生一個和實例名稱相同的用戶名,和fencedid 用戶。
      如:db2icrt -s ese -u db2fenc2 db2inst2 將在db2inst2用戶中產(chǎn)生實例db2inst2.

    缺省創(chuàng)建32位實例,創(chuàng)建64位實例:db2icrt -s ese -w 64 -u db2fenc2 db2inst2
      
    刪除
    db2idrop instance-name
    啟動
    db2start
    停止
    db2stop force
    連接
    db2 attach to testdb2
    db2 detach
    列出實例
    db2ilist
    設(shè)置當(dāng)前實例
    set db2instance=<instance-name>
    得到當(dāng)前實例
    db2 get instance
    設(shè)置實例自動重啟動UNIX
    db2iauto -on <instance-name>
    db2iauto -off <instance-name>

    獲取實例的配置參數(shù)
    db2 get dbm cfg
    修改配置參數(shù)
    例如:db2 update dbm cfg using authentication server_encrypt
         db2stop and db2start
        
    二,聲明注冊表和環(huán)境變量
    db2set   注意:設(shè)置完成后需要退出用戶,再注冊進(jìn)入才能生效。
    列出所有受支持的變量
    db2set -lr
    列出當(dāng)前實例所有已定義的變量
    db2set
    要列出概要文件注冊表中所有定義的注冊表變量
    db2set -all
    列出單個變量
    db2set registry_variable_name
    更改變量
    db2set registry_variable_name=new_value
    變量復(fù)位為缺省值
    db2set -r registry_variable_name

    db2set DB2CODEPAGE=819

    db2set DB2CODEPAGE=1386

    db2 -tvf my_sql.sql

    三,創(chuàng)建節(jié)點配置文件
    db2nodes.cfg

    UNIX 格式:dbpartitionnum(0-999) hostname [logical-port [netname]]
    WIN  格式:nodenumber hostname computername logical_port netname

    四,管理服務(wù)器
    <配置助手,控制中心,開發(fā)中心> 通過DAS來進(jìn)行工作
    創(chuàng)建DAS
    db2admin create (windows)
    dascrt -u <DASUser>  需要root權(quán)限
    啟動和停止
    db2admin start
    db2admin stop
    列出
    db2admin
    配置DAS
    db2 get admin cfg
    db2 update admin cfg using
    db2 reset admin cfg
    最好stop再start
    五,配置多個邏輯節(jié)點
    可以用兩個方法來配置多個邏輯節(jié)點:
    * 在db2nodes.cfg文件中配置邏輯節(jié)點(數(shù)據(jù)庫分區(qū)).然后,可使用db2start啟動所有邏輯和遠(yuǎn)程節(jié)點.
        對于windows nt,若系統(tǒng)中沒有數(shù)據(jù)庫,則必須使用db2ncrt來添加節(jié)點,否則,若一個或多個數(shù)據(jù)庫,
        則應(yīng)使用db2start addnode 命令.在nt 中,不能手工編輯db2nodes.cfg文件.
       db2ncrt /n:1 /u:administrator,yhnu0987 /m:fujie /p:1 /h:fujie
       db2start addnode nodenum 1 hostname guosd port 1 computer GUOSD user db2admin password db2admin

    * 在另一個處理器上重新啟動一個邏輯節(jié)點,其他邏輯數(shù)據(jù)庫分區(qū)(節(jié)點)已在該處理器上運行.這允許覆蓋
      在db2nodes.cfg中為邏輯數(shù)據(jù)庫分區(qū)指定的主機名和端口號.
     

    在WIN中添加邏輯節(jié)點
      db2ncrt /n:1 /u:Administrator,<pwd> /i:db2 /m:FUJIE /p:1
     
    #刪除邏輯節(jié)點
    db2ndrop
    有數(shù)據(jù)庫的時候使用db2stop drop nodenum
    #改變邏輯節(jié)點
    db2nchg
    posted @ 2005-06-08 19:04 小馬歌 閱讀(860) | 評論 (0)編輯 收藏
     
    1.
    當(dāng)使用PreparedStatement\CallableStatement時,盡量使用它提供的setParams的方法。

    下面是錯誤的方法:
    CallableStatement cstmt = conn.prepareCall (
      "{call getCustName (12345)}");
    ResultSet rs = cstmt.executeQuery ();

    下面是正確的方法:
    CallableStatement cstmt - conn.prepareCall (
      "{call getCustName (?)}");
    cstmt.setLong (1,12345);
    ResultSet rs = cstmt.executeQuery();

    2.使用批量更新的方法

    一般都是使用這樣的方法更新:
    PreparedStatement ps = conn.prepareStatement(
      "INSERT into employees values (?, ?, ?)");

    for (n = 0; n < 100; n++) {

      ps.setString(name[n]);
      ps.setLong(id[n]);
      ps.setInt(salary[n]);
      ps.executeUpdate();
    }

    如果使用JDBC的高級功能的話,批量更新應(yīng)該會有更高的效率:

    PreparedStatement ps = conn.prepareStatement(
      "INSERT into employees values (?, ?, ?)");

    for (n = 0; n < 100; n++) {

      ps.setString(name[n]);
      ps.setLong(id[n]);
      ps.setInt(salary[n]);
      ps.addBatch();
    }
    ps.executeBatch();

    3.正確使用ResultSet的GET方法

    盡量不要使用諸如rs.getObject()這樣的方法,另外如果還要更高的效率的話,請使用rs.getString(1)這樣通過字段索引號的方式來取得字段值,而不是使用象rs.getString("UserName")這樣的方法來取得字段值。

    4.取得剛增加的記錄的自動增加類型的字段的值

    如果你的JDBC驅(qū)動支持的話,有一個很方便的方法可以取得自增字段的值,如下:

    int rowcount = stmt.executeUpdate (
      "insert into LocalGeniusList (name) values ('Karen')",
    Statement.RETURN_GENERATED_KEYS);
    ResultSet rs = stmt.getGeneratedKeys ();
    posted @ 2005-06-08 18:03 小馬歌 閱讀(200) | 評論 (0)編輯 收藏
     

    開發(fā)一個系統(tǒng)基本完畢的時候,為了提高系統(tǒng)的響應(yīng)時間,我們需要把經(jīng)常從數(shù)據(jù)庫獲取而又不經(jīng)常修改的內(nèi)容給緩存起來,但是,緩存起來,我們怎么知道是否緩存生效了,沒從數(shù)據(jù)庫去取呢?
    對于DB2 V8.1數(shù)據(jù)庫,它提供了一個數(shù)據(jù)庫監(jiān)視器開關(guān),可以監(jiān)視系統(tǒng)訪問數(shù)據(jù)庫里表的記錄。
    首先,db2cmd,然后db2 connect to dbname user username using pwd;
    執(zhí)行db2 get dbm cfg ,其中可以看到:

     缺省數(shù)據(jù)庫監(jiān)視器開關(guān)
       緩沖池                         (DFT_MON_BUFPOOL) = OFF
       鎖定                                   (DFT_MON_LOCK) = OFF
       排序                                   (DFT_MON_SORT) = OFF
       語句                              (DFT_MON_STMT) = OFF
       表                                 (DFT_MON_TABLE) = OFF
       時間戳記                         (DFT_MON_TIMESTAMP) = ON
       工作單元                            (DFT_MON_UOW) = OFF

    現(xiàn)在,我們把表的監(jiān)視器開關(guān)給打開,執(zhí)行 db2 update dbm cfg using dft_mon_table on,
    這種方式是 在實例級別上設(shè)置監(jiān)視器開關(guān)(影響所有用戶和數(shù)據(jù)庫),還有另外一種方式,
    執(zhí)行 db2 get monitor switches,顯示

                監(jiān)視器記錄開關(guān)

    db 分區(qū)號 0 的開關(guān)列表
    緩沖池活動信息        (BUFFERPOOL) = OFF
    鎖定信息                    (LOCK) = OFF
    排序信息                    (SORT) = OFF
    SQL 語句信息           (STATEMENT) = OFF
    表活動信息                 (TABLE) = OFF
    獲取時間戳記信息(時間戳記)    = ON  06/08/2005 08:28:10.052196
    工作單元信息                 (UOW) = OFF
        db2 update monitor switches using switchName ,這種方式是 在應(yīng)用程序級別上設(shè)置監(jiān)視器開關(guān)(只適合于特定的應(yīng)用程序)
    再執(zhí)行 db2 get dbm cfg 的時候發(fā)現(xiàn) 表的監(jiān)視開關(guān)打開了:   表        (DFT_MON_TABLE) = ON
    然后db2admin stop,db2admin start 讓表監(jiān)視器開關(guān)生效。
    執(zhí)行 db2 reset monitor for database dbname 讓計數(shù)器復(fù)位,現(xiàn)在就可以運行應(yīng)用系統(tǒng)了。之后獲取數(shù)據(jù)庫的快照可以執(zhí)行 db2 get snapshot for database on dbname 就可以知道系統(tǒng)是否訪問數(shù)據(jù)庫了,緩存是否生效了。

    posted @ 2005-06-08 17:57 小馬歌 閱讀(503) | 評論 (0)編輯 收藏
     
         剛開始學(xué)習(xí)加載的時候,接觸到的是HeloWorld程序,當(dāng)時不知道為什么在public static void main(String [] args) 方法里寫了System.out.println("Hello World!") 就可以在控制臺打出“Hello World!”來,確實的說,是什么東西隱蔽在后面執(zhí)行了我們寫的這段代碼,通過后來的學(xué)習(xí),知道了所有的class都是通過classloader來加載的。java規(guī)范這么說,Java的ClassLoader就是用來動態(tài)裝載class的,ClassLoader對一個class只會裝載一次,JVM使用的ClassLoader一共有4種:

             啟動類裝載器,標(biāo)準(zhǔn)擴展類裝載器,類路徑裝載器網(wǎng)絡(luò)類裝載器
    這4種ClassLoader的優(yōu)先級依次從高到低,使用所謂的“雙親委派模型”。確切地說,如果一個網(wǎng)絡(luò)類裝載器被請求裝載一個java.lang.Integer,它會首先把請求發(fā)送給上一級的類路徑裝載器,如果返回已裝載,則網(wǎng)絡(luò)類裝載器將不會裝載這個java.lang.Integer,如果上一級的類路徑裝載器返回未裝載,它才會裝載java.lang.Integer。

           再說說Package權(quán)限。Java語言規(guī)定,在同一個包中的class,如果沒有修飾符,默認(rèn)為Package權(quán)限,包內(nèi)的class都可以訪問。但是這還不夠準(zhǔn)確。確切的說,只有由同一個ClassLoader裝載的class才具有以上的Package權(quán)限。比如啟動類裝載器裝載了java.lang.String,類路徑裝載器裝載了我們自己寫的java.lang.Test,它們不能互相訪問對方具有Package權(quán)限的方法。這樣就阻止了惡意代碼訪問核心類的Package權(quán)限方法。    
           現(xiàn)在來通過擴展ClassLoader類實現(xiàn)一個自己的類裝載器,每個Class對象都有一個引用指向裝載他的ClassLoader,可以通過public ClassLoader getClassLoader()方法得到它。為了創(chuàng)建自己的類裝載器我們應(yīng)該擴展ClassLoader類,這是一個抽象類。假設(shè)要從本地文件系統(tǒng)使用我們實現(xiàn)的類裝載器裝載一個類,創(chuàng)建一個FileClassLoader extends ClassLoader,需要覆蓋ClassLoader中的findClass(String name)方法,這個方法通過類的名字而得到一個Class對象。

    package test.International;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    public class FileClassLoader extends ClassLoader {
        
    public static final String drive = "d:/";
        
    public static final String fileType = ".class";
        
    public FileClassLoader() {
            super();
        }

        
    public FileClassLoader(ClassLoader arg0) {
            super(arg0);
        }

        
    public Class findClass(String name) {
            
    byte[] data = loadClassData(name);
            
    return defineClass(name, data, 0, data.length);
        }

        
    public byte[] loadClassData(String name) {
            FileInputStream fis 
    = null;
            
    byte[] data = null;
            
    try {
                fis 
    = new FileInputStream(new File(drive + name + fileType));
                ByteArrayOutputStream baos 
    = new ByteArrayOutputStream();
                
    int ch = 0;
                
    while ((ch = fis.read()) != -1{
                    baos.write(ch);
                }

                data 
    = baos.toByteArray();
            }
     catch (IOException e) {
                e.printStackTrace();
            }

            
    return data;
        }

        
    public static void main(String[] args) throws Exception {
            FileClassLoader loader 
    = new FileClassLoader();
            Class objClass 
    = loader.loadClass("HelloWorld"true);
            Object obj 
    = objClass.newInstance();
            System.
    out.println(objClass.getName());
            System.
    out.println(objClass.getClassLoader());
        }

    }

    現(xiàn)在把HelloWorld.java放到默認(rèn)包下,然后編譯,把HelloWorld.class放到D:\盤根目錄下,運行FileClassLoader類,控制臺輸出:

    HelloWorld
    sun.misc.Launcher$AppClassLoader@82ba41
    可見,我們的確加載上了HelloWorld.class
    posted @ 2005-05-19 22:57 小馬歌 閱讀(1271) | 評論 (4)編輯 收藏
     

          最近,部門的一個關(guān)于基礎(chǔ)數(shù)據(jù)和權(quán)限控制的項目已近尾聲,可由于性能的問題,一直沒有做好正式上線運行的準(zhǔn)備,由此,引發(fā)了一些我對壓力測試的認(rèn)識。
          MI 的LoadRunner8.0是一個工業(yè)級負(fù)載測試標(biāo)準(zhǔn)工具,用它進(jìn)行壓力測試,可以節(jié)約公司的人力,財力, 它本身可以模擬成千上萬個用戶并發(fā)訪問系統(tǒng),給系統(tǒng)一定的壓力,模擬實際的生產(chǎn)環(huán)境,并且根據(jù)測試結(jié)果,它可以幫助我們分析系統(tǒng)的瓶頸,提供我們應(yīng)用系統(tǒng)的性能。它分三個部分,首先要錄制腳本,并在此基礎(chǔ)上進(jìn)行一些編輯(例如設(shè)置集合點,事務(wù),參數(shù)化數(shù)據(jù)等),然后把這個腳本放到一個特定的場景里去執(zhí)行,執(zhí)行前可以進(jìn)行一些運行期的設(shè)置,運行過程中可以監(jiān)控系統(tǒng)的一些反映參數(shù),最后通過它的分析工具來分析測試結(jié)果,給我們的應(yīng)用系統(tǒng)提供一些性能方面的合理化建議。
         壓力測試做完之后,雖然知道了問題,但是問題的方向是比較模糊的,為此,可以借助Quest公司的JProbe Suite性能測試工具進(jìn)行內(nèi)存,代碼覆蓋,方法調(diào)用時間方面的分析,查出具體的問題,進(jìn)行修改發(fā)布之后,再利用LoadRunner進(jìn)行反復(fù)測試,看性能是否優(yōu)化了。
       
      在壓力測試的過程中,應(yīng)用服務(wù)器和數(shù)據(jù)庫的一些參數(shù)調(diào)優(yōu)也是非常重要的,針對應(yīng)用服務(wù)器,比較重要的參數(shù)有jvm占用堆大小,線程池的大小,連接池的大小,prepareStatement Cache條數(shù)大小;針對數(shù)據(jù)庫,表空間,索引,事務(wù)級別,鎖大小,臨時表這些參數(shù)也對系統(tǒng)應(yīng)用有重要的影響。同時,在java應(yīng)用里,sql優(yōu)化,數(shù)據(jù)庫連接的管理,緩存的使用,查詢分頁,防內(nèi)存泄露的代碼的使用會直接對應(yīng)用系統(tǒng)造成巨大的性能影響。

         跟蹤應(yīng)用服務(wù)器里jvm垃圾回收的頻率和所消耗時間的時候,可以加 -Xverbosegc參數(shù)來打印垃圾回收的詳細(xì)信息。分析gc日志的工具有GCAnalyze 和HeapRoot 。

    posted @ 2005-05-19 22:07 小馬歌 閱讀(339) | 評論 (0)編輯 收藏
     
        以前很早就聽說過java是單繼承的類結(jié)構(gòu),即一個類只能繼承一個直接父類,并且所有的類都直接或間接繼承于java.lang.Object類。對于這一點,一直接受,并且在jdk文檔里看到的類繼承層次結(jié)構(gòu)也的確是這樣。后來,無意中看到一個問題,問數(shù)組是不是繼承自O(shè)bject類,這一下還給問糊涂了,因為數(shù)組在java里是對象,不過像這種繼承結(jié)構(gòu)我還一直未看到呢?后來,寫了點代碼做了一個小測試,如下:
    System.out.println(new int[1].getClass().getName());

    發(fā)現(xiàn)int型數(shù)組的類是:[I 比較奇怪,是吧,并且代碼顯示:
    System.out.println(new int[1].getClass().getSuperClass().getName());

    它的直接父類就是java.lang.Object類,即所有類的根類。根據(jù)這些,做了一個總結(jié):
    第一種情況,當(dāng)數(shù)組元素是基本類型時:
             int [] 對應(yīng)class [I
             char [] 對應(yīng)class [C
             byte [] 對應(yīng)class [B
             short [] 對應(yīng)class [S
             long [] 對應(yīng)class [J
             float[] 對應(yīng)class [F
             double [] 對應(yīng)class [D
             boolean [] 對應(yīng)class [Z

    第二種情況,當(dāng)數(shù)組元素是對象時:
            統(tǒng)一為 [L java.lang.Object

    posted @ 2005-04-09 15:35 小馬歌 閱讀(355) | 評論 (0)編輯 收藏
     
    // 判斷是否閏年,如果是,返回true,否則,返回false,
    public boolean isLeapYear(int year){
    //MAX_YEAR,MIN_YEAR分別代表可以判斷的最大年最小年
    if(year< MIN_YERA || year> MAX_YEAR){
         
    throw new Exception("判斷的年份不在判斷范圍內(nèi)!");
      }

    //覺得精練的地方就在下一行
    if((year&3)==0){
        
    return ((year%400==0|| (year%100!=0));
      }

     
    return false;
    }
      寫到這里,我想起來“java程序員變態(tài)32題”的其中一題了,題目是這么說的:請寫出利用 2 最有效率得到 8的代碼?答案是 2<<2。
      位操作一直是計算機最擅長的事情,可自從有了高級編程語言之后,我?guī)缀醢阉恕,F(xiàn)在明白java要保留位操作的原因了,覺得是效率~ 
      回到這個方法上,一般的人代碼寫得邏輯清晰,也能實現(xiàn)功能,可是像這么簡潔高效的代碼才是程序員夢寐以求的!我從此不敢小瞧 編碼 。
    posted @ 2005-04-08 21:09 小馬歌 閱讀(2479) | 評論 (8)編輯 收藏
    僅列出標(biāo)題
    共95頁: First 上一頁 87 88 89 90 91 92 93 94 95 
     
    主站蜘蛛池模板: 色影音免费色资源| 免费日本黄色网址| 亚洲精品成人久久久| 成人免费的性色视频| 国产亚洲精品2021自在线| 成年人视频在线观看免费| 亚洲国产成人精品激情| 9久9久女女免费精品视频在线观看| 夜夜亚洲天天久久| 久久99国产综合精品免费| 亚洲综合在线成人一区| 成人福利免费视频| 2019亚洲午夜无码天堂| 成人毛片18女人毛片免费96| 亚洲国产一区二区三区在线观看| 日本免费无遮挡吸乳视频电影| 亚洲av无码专区在线电影天堂 | 久久精品国产亚洲7777| 中文字幕久无码免费久久| 亚洲综合无码一区二区| 91青青青国产在观免费影视| 亚洲精品一区二区三区四区乱码 | 成人免费毛片内射美女APP| 国产精品亚洲片夜色在线| 日韩免费视频一区| 四虎影视在线看免费观看| 亚洲韩国精品无码一区二区三区 | 中文字幕无码成人免费视频| 亚洲丶国产丶欧美一区二区三区| 国产a不卡片精品免费观看 | 青草青草视频2免费观看| 国产亚洲人成网站观看| 亚洲一区免费视频| 亚洲A∨精品一区二区三区下载| 亚洲高清最新av网站| 99在线观看免费视频| 亚洲国产日韩a在线播放| 国产亚洲AV夜间福利香蕉149| 美女内射无套日韩免费播放| 亚洲国产欧美一区二区三区| 91麻豆国产自产在线观看亚洲|