日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
DB2 9.7數(shù)據(jù)庫在線模式變更指南

我們今天主要向大家描述的是在修改數(shù)據(jù)庫對象時最小化計劃內(nèi)宕機 DB2 9.7數(shù)據(jù)庫在線模式變更,我們大家都知道IBM? DB2? 9.7 引入了新的增強,允許您更改數(shù)據(jù)庫對象,同時確保在修改數(shù)據(jù)庫期間用戶可以完全訪問這些對象。

這些增強允許數(shù)據(jù)庫管理員在不影響用戶的情況下動態(tài)地對數(shù)據(jù)庫模式進行重要修改。本文提供了若干示例,演示如何使用 ALTER TABLE 命令重命名列、修改列數(shù)據(jù)類型,以及使用 ADMIN_MOVE_TABLE 例程移動表。其他示例演示了如何使用 ADMIN_MOVE_TABLE 例程移動和修改表,同時保持可訪問性。

概述

本文提供了有關使用 DB2 9.7 新增強的指南,使您能夠對數(shù)據(jù)庫模式進行在線 更改。在線更改意味著被修改的對象仍然可以進行讀寫訪問,甚至在修改期間也是這樣。

其中一些特定的新功能包括:

使用 ALTER TABLE 語句在線重命名列。

OR REPLACE 作為選項被添加到多個 CREATE 語句中。

為視圖和內(nèi)聯(lián) SQL 函數(shù)添加了帶有錯誤支持的 CREATE。

擴展了 ALTER COLUMN SET DATA TYPE 支持。

可以使用 ADMIN_MOVE_TABLE 例程在線修改和移動表。

先決條件和系統(tǒng)需求

本文專門為 DB2 數(shù)據(jù)庫管理員編寫。您應當理解表空間、表和列的基本概念。

要使用本文的示例,您必須安裝 DB2 9.7 for Linux, UNIX, and Windows。使用 參考資料 小節(jié)提供的鏈接下載 DB2 9.7 for Linux, UNIX, and Windows 的免費試用版。

為使用示例做準備

要使用演示 DB2 的新的在線模式變更功能的示例,首先需要創(chuàng)建一個用作必要基礎設施的樣例數(shù)據(jù)庫。示例使用了 DB2 SAMPLE 數(shù)據(jù)庫。如果尚未創(chuàng)建 DB2 SAMPLE 數(shù)據(jù)庫,那么請按照 DB2 Information Center 的 “The SAMPLE database” 一文中的說明創(chuàng)建數(shù)據(jù)庫(見 參考資料 小節(jié)獲得鏈接)。

一旦創(chuàng)建了 SAMPLE 數(shù)據(jù)庫后,遵循這些步驟創(chuàng)建必要的表和數(shù)據(jù),供示例使用:

使用以下命令,根據(jù)模擬客戶信息的系統(tǒng)目錄創(chuàng)建一個表:

清單 1. 創(chuàng)建 CUSTOMER_INFO 表

 
 
 
  1. CREATE TABLE CUSTOMER_INFO(   
  2. customer_id INTEGER NOT NULL,   
  3. first_name VARCHAR(128) NOT NULL,   
  4. last_name VARCHAR(128),  
  5. address_street VARCHAR(128),   
  6. address_city VARCHAR(128),  
  7. address_state VARCHAR(25),   
  8. address_country VARCHAR(30),  
  9. age VARCHAR(2),  
  10. customer_type VARCHAR(10),  
  11. CONSTRAINT customer_id_pk PRIMARY KEY (customer_id)  
  12. )   
  13. IN USERSPACE1; 

使用以下命令,用來自系統(tǒng)目錄的虛構信息向 CUSTOMER_INFO 表填充數(shù)據(jù):

清單 2. 填充 CUSTOMER_INFO 表

 
 
 
  1. INSERT INTO customer_info  
  2. SELECT   
  3. ROW_NUMBER() OVER () as customer_id ,   
  4. RTRIM(a.tabschema) as first_name,   
  5. RTRIM(a.tabname) as last_name,   
  6. CAST(a.colno AS VARCHAR(3)) || ' ' ||   
  7. RTRIM(a.colname) as address_street,   
  8. RTRIM(a.tabname) as address_city,  
  9. RTRIM(a.TYPENAME) as address_state,   
  10. RTRIM(a.TABSCHEMA) as address_country,   
  11. CAST(CAST(sysfun.rand()*50 AS INTEGER)+1 AS VARCHAR(2)) as age,   
  12. CASE WHEN MOD(CAST(sysfun.rand()*50 AS INTEGER),3)=0 THEN 'New'   
  13. ELSE 'Existing'   
  14. END AS type  
  15. FROM   
  16. syscat.columns a  
  17. ORDER BY   
  18. sysfun.rand();  

在***一步中,您在 CUSTOMER_INFO 表的基礎上創(chuàng)建了一個視圖和函數(shù)。

注意創(chuàng)建對象時使用的順序。您首先創(chuàng)建 EXISTING_CUSTOMERS 視圖,然后創(chuàng)建視圖所依賴的 FULL_NAME 函數(shù)。這一點非常重要,因為在默認情況下,這將造成 CREATE OR REPLACE VIEW 語句失敗,并發(fā)生 SQL0440N 錯誤。

然而,從版本 9.7 開始,您可以配置 DB2 來允許創(chuàng)建具有某些錯誤類型(比如缺失依賴對象)的對象。這個功能對于數(shù)據(jù)庫對象的創(chuàng)建、設計和修改都很有用,因為它允許您按照隨機的順序使用 CREATE 命令。您還可以檢查新的視圖和過程的語法,而不需要創(chuàng)建所依賴的對象。

要啟用這個特性,需要使用以下命令修改 AUTO_REVAL 動態(tài)數(shù)據(jù)庫配置參數(shù),將值設置為 DEFERRED_FORCE。

清單 3. 設置 AUTO_REVAL 配置參數(shù)

 
 
 
  1. db2 update db cfg using AUTO_REVAL DEFERRED_FORCE  

修改該參數(shù)后,在創(chuàng)建 EXISTING_CUSTOMER 視圖時,將收到一個 SQL20480W 警告,并且視圖最初被標記為無效。然而,如果視圖所依賴的函數(shù)在下一次使用視圖時仍然存在,那么該視圖將被自動重新進行驗證。

使用以下命令創(chuàng)建新的視圖和函數(shù)。注意,這些命令利用了新的 CREATE OR REPLACE 語法,此語法適用于函數(shù)、過程、視圖、模塊、別名、觸發(fā)器、變量和昵稱。顧名思義,這個語法創(chuàng)建對象,如果對象已存在的話,那么將替代對象。換言之,對于已經(jīng)存在的對象,它將在同一個命令中結合使用 DROP 和 CREATE,并保留分配給該對象的已有特權。

清單 4. 創(chuàng)建函數(shù)和視圖

 
 
 
  1. CREATE OR REPLACE VIEW existing_customers AS  
  2. SELECT full_name(customer_id) AS full_name, address_city, address_state   
  3. FROM customer_info   
  4. WHERE customer_type='Existing';  
  5. CREATE OR REPLACE function full_name(p_customer_id INTEGER)   
  6. RETURNS VARCHAR(100)   
  7. return   
  8. SELECT first_name || ', ' || last_name   
  9. FROM customer_info   
  10. WHERE customer_id=p_customer_id;  

對表定義進行在線修改

DB2 9.7 新增的兩項重要增強均與在線修改表定義相關:

首先,可以以在線的方式重命名列,同時仍可以針對表運行工作負載,不會對用戶產(chǎn)生任何干擾。

其次,DB2 9.7 擴展了它修改已有表中的列數(shù)據(jù)類型的支持。

下面的示例演示了如何使用 ALTER TABLE 命令重命名一個列,同時保持表具有完整的可訪問性:

清單 5. 重命名列的示例

 
 
 
  1. ALTER TABLE customer_info RENAME COLUMN age TO customer_age ;  

ALTER TABLE 語句中的 ALTER COLUMN SET DATA TYPE 選項進行了擴展,可以支持所有兼容的類型。例如,現(xiàn)在可以修改一個數(shù)據(jù)類型為 INTEGER 的列,從而擁有一個 VARCHAR 數(shù)據(jù)類型,或者將數(shù)據(jù)類型從 TIMESTAMP 修改為 DATE。參考 DB2 Information Center 中的 “Casting between data types” 一文,獲得兼容數(shù)據(jù)類型的完整列表(見 參考資料 小節(jié)獲得鏈接)。

在使用 ALTER COLUMN SET DATA TYPE 選項執(zhí)行 ALTER TABLE 操作期間,DB2 將執(zhí)行一次完整的驗證,確保列數(shù)據(jù)與新數(shù)據(jù)類型兼容,并且沒有發(fā)生截斷、外溢或任何其他類型的錯誤。列默認值也進行了驗證,確保它們遵守新的數(shù)據(jù)類型。如果列類型和數(shù)據(jù)內(nèi)容是兼容的,那么就能夠成功更改數(shù)據(jù)類型。否則,ALTER 命令將返回一個錯誤。

以下示例演示了如何將名為 customer_age from VARCHAR(2) 的列的數(shù)據(jù)類型修改為 SMALLINT:

清單 6. 修改列類型

 
 
 
  1. ALTER TABLE customer_info ALTER COLUMN customer_age SET DATA TYPE SMALLINT;  

大多數(shù)情況下,ALTER SET DATA TYPE 需要對表執(zhí)行重組(reorg),因為它修改了物理行格式??梢允褂?ADMIN_REVALIDATE_DB_OBJECTS 例程來自動判斷是否需要對表執(zhí)行重組:

清單 7. 對表進行重新驗證

 
 
 
  1. CALL ADMIN_REVALIDATE_DB_OBJECTS('TABLE', 'DB2INST1', 'CUSTOMER_INFO');  

如果需要在修改列數(shù)據(jù)類型期間對數(shù)據(jù)庫執(zhí)行寫訪問,可以使用下一小節(jié)描述的 ADMIN_MOVE_TABLE 例程。

以上的相關內(nèi)容就是對在修改數(shù)據(jù)庫對象時最小化計劃內(nèi)宕機 DB2 9.7在線模式變更的介紹,望你能有所收獲。

【編輯推薦】

  1. DB2 數(shù)據(jù)類型如何才能輕松接觸?
  2. DB2v9.5控制中心建庫報錯如何挽救?
  3. IBM DB2數(shù)據(jù)庫錯誤信息的大集合,不得不看!
  4. 降低DB2管理表空間的高水位標記實操
  5. 3個建議實現(xiàn)DB2數(shù)據(jù)庫設計,很簡單!

分享文章:DB2 9.7數(shù)據(jù)庫在線模式變更指南
文章鏈接:http://www.5511xx.com/article/djjpdeh.html