自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

DB2 9.7數(shù)據(jù)庫在線模式變更指南

數(shù)據(jù)庫
以下的文章主要向大家描述的是在修改數(shù)據(jù)庫對象時最小化計劃內(nèi)宕機 DB2 9.7數(shù)據(jù)庫在線模式變更的實際操作步驟,以下就是正文的主要內(nèi)容講述。

我們今天主要向大家描述的是在修改數(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 例程移動和修改表,同時保持可訪問性。

概述

本文提供了有關(guān)使用 DB2 9.7 新增強的指南,使您能夠?qū)?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ù)庫管理員編寫。您應(yīng)當(dāng)理解表空間、表和列的基本概念。

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

為使用示例做準(zhǔn)備

要使用演示 DB2 的新的在線模式變更功能的示例,首先需要創(chuàng)建一個用作必要基礎(chǔ)設(shè)施的樣例數(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)目錄的虛構(gòu)信息向 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 表的基礎(chǔ)上創(chuàng)建了一個視圖和函數(shù)。

 

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

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

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

 

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

  1. db2 update db cfg using AUTO_REVAL DEFERRED_FORCE  

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

 

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

 

清單 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 新增的兩項重要增強均與在線修改表定義相關(guān):

首先,可以以在線的方式重命名列,同時仍可以針對表運行工作負(fù)載,不會對用戶產(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ā)生截斷、外溢或任何其他類型的錯誤。列默認(rèn)值也進行了驗證,確保它們遵守新的數(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 例程。

 

 

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

【編輯推薦】

  1. DB2 數(shù)據(jù)類型如何才能輕松接觸?
  2. DB2v9.5控制中心建庫報錯如何挽救?
  3. IBM DB2數(shù)據(jù)庫錯誤信息的大集合,不得不看!
  4. 降低DB2管理表空間的高水位標(biāo)記實操
  5. 3個建議實現(xiàn)DB2數(shù)據(jù)庫設(shè)計,很簡單!
責(zé)任編輯:佚名 來源: 51CTO.com
相關(guān)推薦

2010-08-03 17:15:47

DB2 9.7 兼容

2009-04-30 08:59:13

DB2 9.7InfoSphereIBM

2010-08-12 11:38:21

DB2數(shù)據(jù)庫

2010-08-19 09:22:03

DB2 V9.7 分區(qū)

2010-08-06 14:29:14

DB2數(shù)據(jù)庫并置

2010-08-25 10:50:48

DB2數(shù)據(jù)庫

2011-03-11 16:02:03

DB2數(shù)據(jù)庫安裝

2010-08-04 13:30:49

2010-08-16 17:07:43

DB2 trc

2010-07-29 13:09:48

DB2 9.7 兼容

2010-08-26 16:15:25

DB2數(shù)據(jù)庫管理

2010-11-01 11:30:41

DB2數(shù)據(jù)庫權(quán)限

2010-09-30 11:49:21

DB2數(shù)據(jù)庫權(quán)限

2010-11-03 16:21:18

DB2數(shù)據(jù)庫授權(quán)

2009-07-06 17:34:26

遠(yuǎn)程復(fù)制DB2

2010-09-06 13:06:08

DB2 9.7

2010-11-02 11:49:18

SQL SERVER連

2010-08-31 13:06:49

DB2數(shù)據(jù)庫

2010-08-31 11:26:59

DB2數(shù)據(jù)庫

2010-11-03 16:32:10

DB2創(chuàng)建數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號