db2命令彙總之四

##db2move

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

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

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

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

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


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


接下來這條命令生成:

數據庫 department 中所有對象的 DLL(由選項 -d、-a 和 -e 指定)。
複製數據庫中所有表和索引的統計信息的 UPDATE 語句(由選項 -m 指定)。
GRANT 授權語句(由選項 -x 指定)。
用於數據庫管理器和數據庫配置參數的 UPDATE 語句,以及用於概要文件註冊表的 db2set 命令(由選項 -f 指定)。

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

##RUNSTATS 實用程序

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

RUNSTATS ON TABLE db2user.employee ALLOW WRITE ACCESS

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

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

RUNSTATS ON TABLE db2user.employee AND DETAILED INDEXES ALL

##REORG 和 REORGCHK 實用程序

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

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

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

下面的命令更新統計信息,然後生成在模式 smith 下創建的全部表的報告:

REORGCHK UPDATE STATISTICS ON SCHEMA smith

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

在執行數據庫應用程序或任何 SQL 語句之前,必須先由 DB2 對它們進行預編譯,並生成一個包。包是一種數據庫對象,其中含有應用程序
源文件中所使用的已編譯 SQL 語句。DB2 使用該包來訪問 SQL 語句中引用的數據。DB2 優化器如何爲這些包選擇數據存取方案呢?它依靠
包創建時的數據庫統計信息。
對於靜態 SQL 語句,包在編譯時創建,並且被綁定到數據庫上。如果對統計信息進行了更新,以反映物理數據庫特徵,那麼也應該更新現有
的包。REBIND 實用程序允許您重新創建包,以便可以利用當前的數據庫統計信息。命令十分簡單:

REBIND PACKAGE package_name


不過,如果您要更改應用程序源代碼,那麼就得顯式地刪除現有的相關包,然後重新創建包。REBIND 實用程序不用於這一目的。這裏,
我們之所以就此對您加以提醒,是因爲 DBA 經常誤解了 REBIND 的用法。
對於動態 SQL 語句,它們是在運行時預編譯的,而且被存儲在包高速緩存中。如果更新了統計信息,那麼您可能會刷新高速緩存,以便
重新編譯動態 SQL 語句,從而獲取更新的統計信息。命令類似下面的樣子:

FLUSH PACKAGE CACHE DYNAMIC

##數據庫維護過程
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 設計顧問程序

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

圖形化工具:desigen Advisor

### 備份與恢復

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

有幾個與日誌記錄相關的數據庫配置參數。其中一些參數是:

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

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/

一旦首次建立與數據庫的連接,就分配三個主日誌文件,它們均由 250 個 4 KB 頁組成。
DB2 將填滿第一個日誌,然後繼續填滿第二個和第三個日誌。填滿第三個日誌文件後,沒有更多的主
(預分配的)日誌文件,因此 DB2 將動態地分配第一個輔助日誌文件,因爲 LOGSECOND 大於零。一旦
這個日誌文件被填滿,DB2 將繼續分配另一個輔助日誌文件,並將重複該過程,直到達到 LOGSECOND 日
志文件數目的最大值爲止。對於該示例,當 DB2 嘗試分配第三個輔助日誌文件時,它將返回一個錯誤,
指出已經達到事務滿條件。此時,將回滾該事務。

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

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

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

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

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

用戶出口

我們在前幾章中多次提到用戶出口。用戶出口是允許將聯機歸檔日誌移到另一個目錄(非活動日誌目錄)或另一個介質的程序。當爲完全數據庫
恢復進行 ROLLFORWARD 操作期間需要脫機歸檔日誌時,用戶出口還會將它們檢索到活動日誌目錄中。要啓用用戶出口,將 USEREXIT 數據庫配置參
數設置爲 ON。一旦啓用,DB2 將根據需要自動調用用戶出口程序。需要將該程序命名爲 db2uext2,在 Windows 中,應該將它存儲在 sqllib/bin
目錄中,在 UNIX 中,應該將它存儲在 sqllib/bin 目錄中。

## 數據庫和表空間備份

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




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

要執行備份,需要 SYSADM、SYSCTRL 或 SYSMAINT 權限。

下面是用於這種備份的 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]


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


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


讓我們更仔細地研究該命令:

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


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


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

注:聯機備份要求爲數據庫啓用歸檔日誌記錄。 DB CFG: LOGHEAD指向活動的最低編號的日誌,小於LOGHEAD的日誌
是歸檔日誌且可以移動。可以使用ARCHIVE LOG 命令來對日誌進行歸檔。



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

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

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

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

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

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

分區數據庫的備份:
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’
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章