##db2move

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

該工具先從系統(tǒng)目錄表中抽取用戶表列表,接著以 PC/IXF 格式導(dǎo)出每個(gè)表。然后,可以將這些 PC/IXF 文件導(dǎo)入或裝入到另一個(gè)
DB2 數(shù)據(jù)庫。
以下是一些示例。下面這條命令用指定的用戶標(biāo)識(shí)和密碼以 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 是一個(gè)方便的工具,可以從命令提示符或控制中心對(duì)其進(jìn)行調(diào)用。該工具可以:

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


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


接下來這條命令生成:

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

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

##RUNSTATS 實(shí)用程序

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

RUNSTATS ON TABLE db2user.employee ALLOW WRITE ACCESS

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

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

RUNSTATS ON TABLE db2user.employee AND DETAILED INDEXES ALL

##REORG 和 REORGCHK 實(shí)用程序

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

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

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

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

REORGCHK UPDATE STATISTICS ON SCHEMA smith

##REBIND 實(shí)用程序和 FLUSH PACKAGE CACHE 命令

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

REBIND PACKAGE package_name


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

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è)計(jì)顧問程序

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

圖形化工具:desigen Advisor

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

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

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

LOGPRIMARY:該參數(shù)確定要分配的主日志文件數(shù)。
LOGSECOND:該參數(shù)確定可分配的輔助日志文件的最大數(shù)目。(最大254)
LOGFILSIZ:該參數(shù)用于指定日志文件的大小(用 4 KB 頁為單位)。
讓我們考慮一個(gè)示例。假設(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ù)庫的連接,就分配三個(gè)主日志文件,它們均由 250 個(gè) 4 KB 頁組成。
DB2 將填滿第一個(gè)日志,然后繼續(xù)填滿第二個(gè)和第三個(gè)日志。填滿第三個(gè)日志文件后,沒有更多的主
(預(yù)分配的)日志文件,因此 DB2 將動(dòng)態(tài)地分配第一個(gè)輔助日志文件,因?yàn)?LOGSECOND 大于零。一旦
這個(gè)日志文件被填滿,DB2 將繼續(xù)分配另一個(gè)輔助日志文件,并將重復(fù)該過程,直到達(dá)到 LOGSECOND 日
志文件數(shù)目的最大值為止。對(duì)于該示例,當(dāng) DB2 嘗試分配第三個(gè)輔助日志文件時(shí),它將返回一個(gè)錯(cuò)誤,
指出已經(jīng)達(dá)到事務(wù)滿條件。此時(shí),將回滾該事務(wù)。

#無限日志記錄
要允許無限的活動(dòng)日志記錄:

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

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

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

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ù)。

用戶出口

我們?cè)谇皫渍轮卸啻翁岬接脩舫隹凇S脩舫隹谑窃试S將聯(lián)機(jī)歸檔日志移到另一個(gè)目錄(非活動(dòng)日志目錄)或另一個(gè)介質(zhì)的程序。當(dāng)為完全數(shù)據(jù)庫
恢復(fù)進(jìn)行 ROLLFORWARD 操作期間需要脫機(jī)歸檔日志時(shí),用戶出口還會(huì)將它們檢索到活動(dòng)日志目錄中。要啟用用戶出口,將 USEREXIT 數(shù)據(jù)庫配置參
數(shù)設(shè)置為 ON。一旦啟用,DB2 將根據(jù)需要自動(dòng)調(diào)用用戶出口程序。需要將該程序命名為 db2uext2,在 Windows 中,應(yīng)該將它存儲(chǔ)在 sqllib\bin
目錄中,在 UNIX 中,應(yīng)該將它存儲(chǔ)在 sqllib/bin 目錄中。

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

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




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

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

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


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]


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


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


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

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


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


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

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



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

(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 備份文件的命名約定包含下列幾項(xiàng):

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

分區(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’