3. 關於 COPY YES:
在 LOAD 操作結束時,DB2 自動對表所在的表空間進行一次備份操作,因而 LOAD 結束後,表所在的表空間不會再處於“備份暫掛”狀態,而為“正常”狀態。但由於要進行備份操作,所以這種 LOAD 操作的時間會較沒有備份的長。如: E:\TEST>db2 connect to sample
E:\TEST>db2 load from staff.del of del insert into staff copy yes to .
E:\TEST>db2 list tablespaces
:
表空間標識 = 2
名稱 = USERSPACE1
類型 = 系統管理空間
內容 = 任何數據
狀態 = 0x0000
詳細解釋:
正常
:
E:\TEST>db2 select count(*) from staff
1
-----------
105
1 條記錄已選擇。
此時可在當前目錄下看到一個 SAMPLE.4 的子目錄,表明產生的是一個由 LOAD 操作生成的備份,而這份備份將在數據庫進行前滾恢復操作時用於重新創建 LOAD 操作對數據庫的修改。如:
E:\TEST>DB2 restore db sample taken at 20051230174105
DB20000I RESTORE DATABASE 命令成功完成。
E:\TEST>db2 rollforward db sample to end of logs and stop
前滾狀態
輸入數據庫別名 = sample
節點數已返回狀態 = 1
節點號 = 0
前滾狀態 = 未暫掛
下一個要讀取的日志文件 =
已處理的日志文件 = S0000002.LOG - S0000003.LOG
上次落實的事務 = 2005-12-30-11.48.26.000000
DB20000I ROLLFORWARD 命令成功完成。
E:\TEST>db2 connect to sample
E:\TEST>db2 list tablespaces
:
表空間標識 = 2
名稱 = USERSPACE1
類型 = 系統管理空間
內容 = 任何數據
狀態 = 0x0000
詳細解釋:
正常
:
E:\TEST>db2 select count(*) from staff
1
-----------
105
1 條記錄已選擇。
這表明在 SAMPLE.4 下的備份被用於了前滾恢復操作,而重新創建了 LOAD 操作對數據庫插入的記錄。
4. 關於 NONRECOVERABLE:
該選項會將 LOAD 操作標志為不可恢復,即數據庫不能通過後續的前滾操作而被恢復。LOAD 操作結束後,數據庫既不會處於“備份暫掛”狀態,也不會產生任何的備份。 E:\TEST>db2 connect to sample
E:\TEST>db2 load from staff.del of del insert into staff nonrecoverable
E:\TEST>db2 list tablespaces
:
表空間標識 = 2
名稱 = USERSPACE1
類型 = 系統管理空間
內容 = 任何數據
狀態 = 0x0000
詳細解釋:
正常
:
雖然 LOAD 之後表空間和表的狀態都正常,但如果今後需要執行前滾命令恢復數據庫時,前滾操作將跳過 LOAD 事務的處 理,而將 LOAD 的表標記為無效,是對表的任何操作都不能進行。如: E:\TEST>db2 restore db sample taken at 20051230174105
DB20000I RESTORE DATABASE 命令成功完成。
E:\TEST>db2 rollforward db sample to end of logs and stop
前滾狀態
輸入數據庫別名 = sample
節點數已返回狀態 = 1
節點號 = 0
前滾狀態 = 未暫掛
下一個要讀取的日志文件 =
已處理的日志文件 = S0000002.LOG - S0000003.LOG
上次落實的事務 = 2005-12-30-12.19.55.000000
DB20000I ROLLFORWARD 命令成功完成。
E:\>db2 connect to sample
E:\TEST>db2 list tablespaces
:
表空間標識 = 2
名稱 = USERSPACE1
類型 = 系統管理空間
內容 = 任何數據
狀態 = 0x0000
詳細解釋:
正常
:
E:\>db2 select * from staff
ID NAME DEPT JOB YEARS SALARY COMM
------ --------- ------ ----- ------ --------- ---------
SQL1477N 不能存取表 "LIWENLI.STAFF"。 SQLSTATE=55019
這表明該表已不可操作,此時只有將表刪除,重新構建,或使用 LOAD 操作時間點之後所做的數據庫全備份或表空間備份來恢復該表。
5. 關於注冊表變量 DB2_LOAD_COPY_NO_OVERRIDE 的介紹:
另外 DB2 還提供了一個注冊表變量:DB2_LOAD_COPY_NO_OVERRIDE,可將 LOAD 的缺省選項 COPY NO 設置為 NONRECOVERABLE 或 COPY YES。具體使用方法舉例為:
設置為 COPY YES 的方法: E:\TEST>db2set DB2_LOAD_COPY_NO_OVERRIDE="COPY YES TO E:\TEST"
E:\TEST>db2 terminate
E:\TEST>db2set
DB2_LOAD_COPY_NO_OVERRIDE=COPY YES TO E:\TEST
:
E:\TEST>db2 load from staff.del of del insert into staff
SQL27966W DB2_LOAD_COPY_NO_OVERRIDE 注冊表變量值 "COPY YES TO E:\TEST" 將覆蓋在 Load 中指定的 COPY NO 參數。
:
:
設置為 NONRECOVERABLE 的方法: E:\TEST>db2set DB2_LOAD_COPY_NO_OVERRIDE=NONRECOVERABLE
E:\TEST>db2 terminate
E:\TEST>db2set
DB2_LOAD_COPY_NO_OVERRIDE=NONRECOVERABLE
E:\TEST>db2 load from staff.del of del insert into staff
SQL27966W DB2_LOAD_COPY_NO_OVERRIDE 注冊表變量值 "NONRECOVERABLE" 將覆蓋在Load 中指定的 COPY NO 參數。
通過上述對 LOAD 的 COPY NO,COPY YES 和 NONRECOVERABLE 參數,以及 DB2 注冊表變量 DB2_LOAD_COPY_NO_OVERRIDE 的詳細和舉例說明,到此我們已經掌握了它們的功能和使用方法。由於 LOAD 操作幾乎不記日志的特性,在對啟用了前滾恢復的數據庫實現 LOAD 操作時應注意從中選擇適當的選項,以保證執行了 LOAD 操作的表的可用性。