| 導購 | 订阅 | 在线投稿
分享
 
 
 

DB2 LOAD命令所提供的選項及注冊表變量

來源:互聯網  2008-06-01 03:25:01  評論

本文主要介紹了DB2 LOAD 命令所提供的 COPY NO/COPY YES/NONRECOVERABLE 選項,以及與之相關的注冊表變量 DB2_LOAD_COPY_NO_OVERRIDE 的功能和使用方法等。

當DB2的數據庫啓用了前滾恢複模式,即將日志由循環日志方式改爲歸檔日志,以便用戶在進行恢複操作時,可在恢複了數據庫或表空間的備份後,再通過前滾歸檔日志中的事務,恢複數據庫備份時間點之後提交的事務,最大程度的保護數據庫的數據。

而DB2的LOAD實用程序爲實現快速導入數據的功能,除采用了通過直接向數據庫中寫入格式化的數據頁裝載數據,導入過程中不激活觸發器,不會檢查參考完整性和表檢查約束當等方式外,還最小化了記錄事務日志的操作。在 LOAD 的 LOAD、BUILD、DELETE 和 INDEX COPY 四個處理階段中,僅在 DELETE 階段記錄對每個刪除事件記日志,即只對每個違反唯一約束的行的刪除操作記日志,因此整個 LOAD 操作僅記錄了極少的日志。

由于LOAD最小化了日志的記錄,有因啓用了前滾恢複的數據庫在恢複在線備份時需要歸檔日志的特性,對于這種數據庫的 LOAD 操作,爲避免執行 LOAD 操作後,表在使用 ROLLFORWARD 命令前滾歸檔日志的過程中因缺少日志而被置爲非正常狀態,DB2 爲 LOAD 命令提供了如下選項:

·COPY NO(缺省)

·COPY YES

·NONREVERABLE

爲更清楚地說明這些選項的作用,這裏將以舉例的方式進行說明。而在開始操作之前,首先了解一下 DB2 備份操作所産生的映象文件的形式和命名特點:

在 UNIX 環境下是文件的形式: Databasealias.Type.Instancename.Nodename.Catnodename.Timestamp.number

在 Windows 環境下是子目錄及文件的形式: Databasealias.Type\Instancename\Node0000\Catn0000\yyyymmdd\hhmmss.number

而其中的 Type 則因備份類型的不同而不同:

0 -- 數據庫全備份

3 -- 表空間備份

4 -- 由 LOAD 操作産生的備份

1. 進行一次數據庫的全備份:

首先對已啓用前滾恢複模式的 SAMPLE 數據庫進行一次全備份: E:\TEST>db2 backup db sample

備份成功。此備份映像的時間戳記是:20051230174105

這時看到在當前目錄下産生了一個 SAMPLE.0 的子目錄,表明産生的是一個數據庫全備份。下面將對這些現象逐個予以舉例說明:

2. 關于 COPY NO:

在 LOAD 操作結束時,將表所在的表空間置于「備份暫挂」狀態,此時雖然其中的表可以進行 SELECT 操作,但不能進行 UPDATE 和 DELETE 操作。爲使該表狀態恢複正常,除去備份暫挂狀態,必須手動對其表空間執行一個 BACKUP 命令。由于該選項爲缺省選項,如果 LOAD 命令中未指明,則默認爲使用該選項,如: E:\TEST>db2 connect to sample

E:\TEST>db2 load from staff.del of del insert into staff

E:\TEST>db2 list tablespaces:

表空間標識 = 2

名稱 = USERSPACE1

類型 = 系統管理空間

內容 = 任何數據

狀態 = 0x0020

詳細解釋:

備份暫挂

E:\TEST>db2 select count(*) from staff

1

-----------

70

1 條記錄已選擇。

E:\TEST>db2 update staff set id=335 where id=340

DB21034E 該命令被當作 SQL 語句來處理,因爲它不是有效的「命令行處理器」命令。在 SQL 處理期間,它返回:

SQL0290N 不允許存取表空間。 SQLSTATE=55039

在手動對 USERSPACE1 表空間進行一次備份操作後,表空間狀態將正常,再次嘗試更新操作就會成功: E:\TEST>db2 backup db sample tablespace (userspace1)

本文主要介紹了DB2 LOAD 命令所提供的 COPY NO/COPY YES/NONRECOVERABLE 選項,以及與之相關的注冊表變量 DB2_LOAD_COPY_NO_OVERRIDE 的功能和使用方法等。 當DB2的數據庫啓用了前滾恢複模式,即將日志由循環日志方式改爲歸檔日志,以便用戶在進行恢複操作時,可在恢複了數據庫或表空間的備份後,再通過前滾歸檔日志中的事務,恢複數據庫備份時間點之後提交的事務,最大程度的保護數據庫的數據。 而DB2的LOAD實用程序爲實現快速導入數據的功能,除采用了通過直接向數據庫中寫入格式化的數據頁裝載數據,導入過程中不激活觸發器,不會檢查參考完整性和表檢查約束當等方式外,還最小化了記錄事務日志的操作。在 LOAD 的 LOAD、BUILD、DELETE 和 INDEX COPY 四個處理階段中,僅在 DELETE 階段記錄對每個刪除事件記日志,即只對每個違反唯一約束的行的刪除操作記日志,因此整個 LOAD 操作僅記錄了極少的日志。 由于LOAD最小化了日志的記錄,有因啓用了前滾恢複的數據庫在恢複在線備份時需要歸檔日志的特性,對于這種數據庫的 LOAD 操作,爲避免執行 LOAD 操作後,表在使用 ROLLFORWARD 命令前滾歸檔日志的過程中因缺少日志而被置爲非正常狀態,DB2 爲 LOAD 命令提供了如下選項: ·COPY NO(缺省) ·COPY YES ·NONREVERABLE 爲更清楚地說明這些選項的作用,這裏將以舉例的方式進行說明。而在開始操作之前,首先了解一下 DB2 備份操作所産生的映象文件的形式和命名特點: 在 UNIX 環境下是文件的形式: Databasealias.Type.Instancename.Nodename.Catnodename.Timestamp.number 在 Windows 環境下是子目錄及文件的形式: Databasealias.Type\Instancename\Node0000\Catn0000\yyyymmdd\hhmmss.number 而其中的 Type 則因備份類型的不同而不同: 0 -- 數據庫全備份 3 -- 表空間備份 4 -- 由 LOAD 操作産生的備份 1. 進行一次數據庫的全備份: 首先對已啓用前滾恢複模式的 SAMPLE 數據庫進行一次全備份: E:\TEST>db2 backup db sample 備份成功。此備份映像的時間戳記是:20051230174105 這時看到在當前目錄下産生了一個 SAMPLE.0 的子目錄,表明産生的是一個數據庫全備份。下面將對這些現象逐個予以舉例說明: 2. 關于 COPY NO: 在 LOAD 操作結束時,將表所在的表空間置于「備份暫挂」狀態,此時雖然其中的表可以進行 SELECT 操作,但不能進行 UPDATE 和 DELETE 操作。爲使該表狀態恢複正常,除去備份暫挂狀態,必須手動對其表空間執行一個 BACKUP 命令。由于該選項爲缺省選項,如果 LOAD 命令中未指明,則默認爲使用該選項,如: E:\TEST>db2 connect to sample E:\TEST>db2 load from staff.del of del insert into staff E:\TEST>db2 list tablespaces: 表空間標識 = 2 名稱 = USERSPACE1 類型 = 系統管理空間 內容 = 任何數據 狀態 = 0x0020 詳細解釋: 備份暫挂 : E:\TEST>db2 select count(*) from staff 1 ----------- 70 1 條記錄已選擇。 E:\TEST>db2 update staff set id=335 where id=340 DB21034E 該命令被當作 SQL 語句來處理,因爲它不是有效的「命令行處理器」命令。在 SQL 處理期間,它返回: SQL0290N 不允許存取表空間。 SQLSTATE=55039 在手動對 USERSPACE1 表空間進行一次備份操作後,表空間狀態將正常,再次嘗試更新操作就會成功: E:\TEST>db2 backup db sample tablespace (userspace1)
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有