精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

DB2下數(shù)據(jù)轉(zhuǎn)移任務(wù)操作實例

數(shù)據(jù)庫 數(shù)據(jù)庫運維
本文通過示例場景演示了如何使用 DB2 的 LOAD FROM CURSOR 特性在一個數(shù)據(jù)庫中以及不同的數(shù)據(jù)庫之間快速輕松地復(fù)制數(shù)據(jù)。還解釋了通過 ADMIN_CMD 存儲過程在應(yīng)用程序代碼中執(zhí)行 LOAD FROM CURSOR 操作時的特殊問題。另外,還講解了如何為另一個數(shù)據(jù)庫配置聯(lián)邦訪問,從而像訪問本地表或視圖一樣透明地讀寫遠(yuǎn)程數(shù)據(jù)庫中的表和視圖。

使用 DB2 LOAD 實用程序的 FROM CURSOR 選項簡化 DB2 for Linux, UNIX, and Windows的數(shù)據(jù)轉(zhuǎn)移過程。本文介紹 LOAD FROM CURSOR 特性并提供兩個接口 Command Line Processor 和 ADMIN_CMD 存儲過程的使用示例。

簡介

典型的 DB2 數(shù)據(jù)轉(zhuǎn)移任務(wù)涉及三個步驟:

◆把數(shù)據(jù)以二進(jìn)制或文本格式從源數(shù)據(jù)庫導(dǎo)出到一個臨時數(shù)據(jù)交換文件

◆在系統(tǒng)之間轉(zhuǎn)移生成的文件

◆把數(shù)據(jù)從文件導(dǎo)入或裝載到目標(biāo)數(shù)據(jù)庫中

在數(shù)據(jù)量很大的情況下,使用 EXPORT 實用程序生成數(shù)據(jù)交換文件常常要花費很長時間。另外,在把數(shù)據(jù)移入和移出數(shù)據(jù)庫時,必須考慮不同的數(shù)據(jù)庫編碼頁和操作系統(tǒng)。

可以使用 LOAD 實用程序的 FROM CURSOR 選項避免這些問題。當(dāng)指定 FROM CURSOR 選項時,LOAD 實用程序直接把一個 SQL 查詢的結(jié)果集作為數(shù)據(jù)裝載操作的來源,這樣就不需要生成臨時數(shù)據(jù)交換文件。因此,LOAD FROM CURSOR 是在不同的表空間或數(shù)據(jù)庫之間快速輕松地轉(zhuǎn)移數(shù)據(jù)的方法。可以在命令行上執(zhí)行 LOAD FROM CURSOR,也可以通過使用 DB2 的 ADMIN_CMD 存儲過程在應(yīng)用程序或存儲過程中執(zhí)行它。本文介紹 LOAD FROM CURSOR 特性并提供兩個接口 Command Line Processor (CLP) 和 ADMIN_CMD 存儲過程的使用示例。

把表轉(zhuǎn)移到另一個表空間

首先,看看如何把表從一個表空間轉(zhuǎn)移到另一個表空間。如果創(chuàng)建表的表空間的頁面大小不合適,或者應(yīng)該用另一個緩沖區(qū)池訪問表,就可能需要執(zhí)行這種數(shù)據(jù)轉(zhuǎn)移。在 9.1 以前的 DB2 版本中,常常由于達(dá)到表空間的最大大小而在表空間之間轉(zhuǎn)移表。但是,在 DB2 9.1 和更高版本中,這應(yīng)該不再是問題了,因為表空間大小限制已經(jīng)顯著提高了(前提是使用大表空間,而不是以前使用的常規(guī)表空間)。

這個示例場景首先創(chuàng)建 DB2 SAMPLE 數(shù)據(jù)庫。這可以通過在命令行上調(diào)用 db2sampl 命令來完成,見清單 1。

清單 1. 創(chuàng)建 SAMPLE 數(shù)據(jù)庫

C:\>db2sampl

Creating
database "SAMPLE"...

Connecting
to database "SAMPLE"...

Creating tables
and data in schema "FECHNER"...

'db2sampl' processing complete.

除了其他表之外,SAMPLE 數(shù)據(jù)庫包含一個名為 SALES 的表。在默認(rèn)情況下,在表空間 USERSPACE1 中創(chuàng)建這個表。可以通過對 DB2 編目視圖 SYSCAT.TABLES 和 SYSCAT.TABLESPACES 執(zhí)行查詢來確認(rèn)這一點。

清單 2. 判斷 SALES 表的表空間

C:\>db2 "CONNECT TO SAMPLE"

Database Connection Information

Database server = DB2/NT 9.5.2

SQL
authorization ID = FECHNER

Local
database alias = SAMPLE

C:\
>db2 "SELECT TABLES.TABSCHEMA, TABLES.TABNAME, TBSPACES.TBSPACE FROM SYSCAT.TABLES AS

TABLES, SYSCAT.TABLESPACES
AS TBSPACES WHERE TABLES.TBSPACEID = TBSPACES.TBSPACEID AND

TABNAME
= 'SALES'"

TABSCHEMA

TABNAME

TBSPACE

------------------------------------------------------------------------------------------

-------- ---------------------------------------------------------------------------------

----------------- ------------------------------------------------------------------------

--------------------------

FECHNER

SALES

USERSPACE1

1 record(s) selected.

除了 USERSPACE1 表空間之外,還有第二個表空間 IBMDB2SAMPLEREL,它也用于存儲用戶數(shù)據(jù)。在這個示例場景中,IBMDB2SAMPLEREL 作為轉(zhuǎn)移 SALES 表的目標(biāo)表空間。執(zhí)行 DB2 命令 LIST TABLESPACES,就可以看到一個數(shù)據(jù)庫的所有表空間。清單 3 演示具體做法。

清單 3. 列出 SAMPLE 數(shù)據(jù)庫的所有表空間

C:\>db2 "LIST TABLESPACES"

Tablespaces
for Current Database

Tablespace ID
= 0

Name
= SYSCATSPACE

Type
= Database managed space

Contents
= All permanent data. Regular table space.

State
= 0x0000

Detailed explanation:

Normal

Tablespace ID
= 1

Name
= TEMPSPACE1

Type
= System managed space

Contents
= System Temporary data

State
= 0x0000

Detailed explanation:

Normal

Tablespace ID
= 2

Name
= USERSPACE1

Type
= Database managed space

Contents
= All permanent data. Large table space.

State
= 0x0000

Detailed explanation:

Normal

Tablespace ID
= 3

Name
= IBMDB2SAMPLEREL

Type
= Database managed space

Contents
= All permanent data. Large table space.

State
= 0x0000

Detailed explanation:

Normal

在把 SALES 表的內(nèi)容復(fù)制到 IBMDB2SAMPLEREL 表空間之前,必須在目標(biāo)表空間中創(chuàng)建一個空表,此表的結(jié)構(gòu)應(yīng)該與 SALES 表相同。因為在同一個數(shù)據(jù)庫模式中不可能有兩個同名的表,所以臨時用 SALES_TMP 這個名稱創(chuàng)建新的表。通過在 CREATE TABLE 命令中指定 LIKE 選項,創(chuàng)建一個與現(xiàn)有表結(jié)構(gòu)相同的空表(清單 4)。通過 IN 選項顯式地定義新表 SALES_TMP 的表空間。

清單 4. 創(chuàng)建數(shù)據(jù)轉(zhuǎn)移操作所需的目標(biāo)表 SALES_TMP

C:\>db2 "CREATE TABLE FECHNER.SALES_TMP LIKE FECHNER.SALES IN IBMDB2SAMPLEREL"

DB20000I The SQL command completed successfully.

現(xiàn)在,可以執(zhí)行數(shù)據(jù)轉(zhuǎn)移操作了。使用 DECLARE CURSOR 命令定義一個游標(biāo),它使用 SELECT 語句讀取源表 SALES 的所有數(shù)據(jù)。可以自由選擇游標(biāo)的名稱,在此示例中使用 C1。然后,在用來填充目標(biāo)表 SALES_TMP 的 LOAD 命令中引用此游標(biāo)。此示例中的 LOAD 命令把它的消息寫到日志文件 load_sales_tmp.msg 中。執(zhí)行的 LOAD 操作包含 NONRECOVERABLE 選項。這意味著在數(shù)據(jù)庫恢復(fù)的前滾階段無法重新執(zhí)行這個 LOAD 操作。因此,在執(zhí)行數(shù)據(jù)轉(zhuǎn)移操作之后,應(yīng)該執(zhí)行數(shù)據(jù)庫備份,至少是表空間備份。LOAD 命令有其他選項可以避免這種情況,但是這些選項超出了本文的范圍。更多信息請參見 DB2 Information Center 中對 LOAD 命令的說明(參見 參考資料)。

清單 5. 執(zhí)行 LOAD FROM CURSOR 操作把 SALES 表中的所有行復(fù)制到 SALES_TMP 表

C:\>db2 "DECLARE C1 CURSOR FOR SELECT * FROM FECHNER.SALES"

DB20000I The SQL command completed successfully.

C:\
>db2 "LOAD FROM C1 OF CURSOR MESSAGES C:\load_sales_tmp.msg INSERT INTO

FECHNER.SALES_TMP NONRECOVERABLE"

Number of rows read = 41

Number of rows skipped = 0

Number of rows loaded = 41

Number of rows rejected = 0

Number of rows deleted = 0

Number of rows committed = 41

在把 SALES 表中的所有行成功地復(fù)制到 SALES_TMP 表之后,可以刪除源表(DROP TABLE 語句)。然后,把目標(biāo)表 SALES_TMP 重命名為 SALES(RENAME TABLE 語句)。在使用 RENAME TABLE 時,只能修改表名,而不能修改表的模式名。因此,一定要在正確的模式中創(chuàng)建 SALES_TMP 表。

清單 6. 刪除源表 SALES 并重命名目標(biāo)表 SALES_TMP

C:\>db2 "DROP TABLE FECHNER.SALES"

DB20000I The SQL command completed successfully.

C:\
>db2 "RENAME TABLE FECHNER.SALES_TMP TO SALES"

DB20000I The SQL command completed successfully.

再次對 DB2 編目視圖執(zhí)行查詢,可以確認(rèn) SALES 表已經(jīng)從原來的表空間 USERSPACE1 轉(zhuǎn)移到了新的表空間 IBMDB2SAMPLEREL 中,見清單 7。

清單 7. 確認(rèn)新 SALES 表的表空間

C:\>db2 "SELECT TABLES.TABSCHEMA, TABLES.TABNAME, TBSPACES.TBSPACE FROM SYSCAT.TABLES AS

TABLES, SYSCAT.TABLESPACES
AS TBSPACES WHERE TABLES.TBSPACEID = TBSPACES.TBSPACEID AND

TABNAME
= 'SALES'"

TABSCHEMA

TABNAME

TBSPACE

------------------------------------------------------------------------------------------

-------- ---------------------------------------------------------------------------------

----------------- ------------------------------------------------------------------------

--------------------------

FECHNER

SALES

IBMDB2SAMPLEREL

1 record(s) selected.

C:\
>db2 "TERMINATE"

DB20000I The TERMINATE command completed successfully.

#p#

使用別名在另一個數(shù)據(jù)庫中創(chuàng)建表拷貝

除了可以在一個數(shù)據(jù)庫中的表空間之間轉(zhuǎn)移表之外,還可以在不同的數(shù)據(jù)庫之間轉(zhuǎn)移表。這意味著:通過使用 LOAD FROM CURSOR,也可以把表從一個數(shù)據(jù)庫轉(zhuǎn)移到另一個數(shù)據(jù)庫。這可以通過兩種方法完成:

方法 1 - 在目標(biāo)數(shù)據(jù)庫中,使用 DB2 的聯(lián)邦數(shù)據(jù)庫機(jī)制訪問源數(shù)據(jù)庫。

方法 2 - 使用 LOAD FROM CURSOR 命令的遠(yuǎn)程訪問特性。

這兩種方法各有優(yōu)點,下面分別討論。

方法1 使用 DB2 的聯(lián)邦數(shù)據(jù)庫機(jī)制

通過對源數(shù)據(jù)庫執(zhí)行聯(lián)邦訪問來復(fù)制表內(nèi)容。方法 1 要求目標(biāo)數(shù)據(jù)庫被配置為聯(lián)邦數(shù)據(jù)庫。因此,對應(yīng)的 DB2 實例的 FEDERATED 參數(shù)必須設(shè)置為 YES(UPDATE DBM CFG)。在修改 DBM CFG 參數(shù) FEDERATED 之后,必須重新啟動 DB2 實例(db2stop/db2start)。在這個示例場景中,源和目標(biāo)數(shù)據(jù)庫在同一個 DB2 實例中運行。創(chuàng)建一個名為 MYSAMPLE 的空數(shù)據(jù)庫作為目標(biāo)數(shù)據(jù)庫。對于沒有特殊需求的測試數(shù)據(jù)庫,可以使用 CREATE DATABASE 命令創(chuàng)建此數(shù)據(jù)庫,不需要其他選項。

清單 8. 在 DBM CFG 中啟用聯(lián)邦數(shù)據(jù)庫支持并創(chuàng)建空的目標(biāo)數(shù)據(jù)庫 MYSAMPLE

C:\>db2 "UPDATE DBM CFG USING FEDERATED YES"

DB20000I The
UPDATE DATABASE MANAGER CONFIGURATION command completed

successfully.

SQL1362W One
or more of the parameters submitted for immediate modification

were
not changed dynamically. Client changes will not be effective until the

next time the application is started or the TERMINATE command has been issued.

Server changes will
not be effective until the next DB2START command.

C:\
>db2stop

2008-09-22 14.55.36 0 0 SQL1064N DB2STOP processing was successful.

SQL1064N DB2STOP processing was successful.

C:\
>db2start

2008-09-22 14.55.53 0 0 SQL1063N DB2START processing was successful.

SQL1063N DB2START processing was successful.

C:\
>db2 "CREATE DATABASE MYSAMPLE"

DB20000I The
CREATE DATABASE command completed successfully.

與前面一樣,必須在目標(biāo)數(shù)據(jù)庫 MYSAMPLE 中創(chuàng)建一個空表,它的結(jié)構(gòu)與 SAMPLE 數(shù)據(jù)庫中的 SALES 表相同。因此,應(yīng)該使用 db2look 實用程序提取源數(shù)據(jù)庫中 SALES 表的 DDL。

清單 9. 使用 db2look 實用程序提取源表 SALES 的 DDL

C:\>db2look -d sample -e -z fechner -t sales -o sales.ddl

-- USER is: FECHNER

-- Specified SCHEMA is: FECHNER

-- The db2look utility will consider only the specified tables

-- Creating DDL for table(s)

-- Schema name is ignored for the Federated Section

-- Output is sent to file: sales.ddl

-- Binding package automatically ...

-- Bind is successful

-- Binding package automatically ...

-- Bind is successful

db2look 調(diào)用的結(jié)果是 sales.ddl 文件,其中包含 SALES 表的 CREATE TABLE 語句。如果在 SALES 表上定義了約束和/或索引,也會提取出對應(yīng)的定義并寫到 sales.ddl 文件中。清單 10 顯示這些結(jié)果。

清單 10. db2look 調(diào)用的結(jié)果文件 sales.ddl

-- This CLP file was created using DB2LOOK Version 9.5

-- Timestamp: 23.09.2008 07:35:10

-- Database Name: SAMPLE

-- Database Manager Version: DB2/NT Version 9.5.2

-- Database Codepage: 1208

-- Database Collating Sequence is: IDENTITY

CONNECT
TO SAMPLE;

------------------------------------------------

-- DDL Statements for table "FECHNER "."SALES"

------------------------------------------------

CREATE TABLE "FECHNER "."SALES" (

"SALES_DATE" DATE ,

"SALES_PERSON"
VARCHAR(15) ,

"REGION"
VARCHAR(15) ,

"SALES"
INTEGER )

IN "IBMDB2SAMPLEREL" ;

COMMIT WORK;

CONNECT RESET;

TERMINATE;

在對目標(biāo)數(shù)據(jù)庫 MYSAMPLE 執(zhí)行 sales.ddl 文件中的語句之前,在文本編輯器中打開此文件并對生成的語句做兩處修改:

在文件的開頭,db2look 為源數(shù)據(jù)庫 SAMPLE 生成 CONNECT 語句。因為希望對目標(biāo)數(shù)據(jù)庫 MYSAMPLE 執(zhí)行下面的語句,所以要相應(yīng)地修改 CONNECT 語句。

因為在目標(biāo)數(shù)據(jù)庫 MYSAMPLE 中沒有用于存儲用戶數(shù)據(jù)的表空間 IBMDB2SAMPLREL,所以要把 CREATE TABLE 語句中的表空間名替換為 USERSPACE1。

清單 11. 結(jié)果文件 sales.ddl 中創(chuàng)建目標(biāo)表所需的修改

CONNECT TO SAMPLE; -> CONNECT TO MYSAMPLE;

IN "IBMDB2SAMPLEREL" ; -> IN "USERSPACE1";

在修改 sales.ddl 文件之后,通過調(diào)用 DB2 CLP (command line processor) 執(zhí)行此腳本。

清單 12. 在 MYSAMPLE 數(shù)據(jù)庫中創(chuàng)建目標(biāo)表

C:\>db2 -tf sales.ddl

Database Connection Information

Database server = DB2/NT 9.5.2

SQL
authorization ID = FECHNER

Local
database alias = MYSAMPLE

DB20000I The SQL command completed successfully.

DB20000I The SQL command completed successfully.

DB20000I The SQL command completed successfully.

DB20000I The TERMINATE command completed successfully.

到目前為止,只在目標(biāo)數(shù)據(jù)庫 MYSAMPLE 中創(chuàng)建了 SALES 表的空拷貝。準(zhǔn)備數(shù)據(jù)轉(zhuǎn)移操作的下一步是把源數(shù)據(jù)庫 SAMPLE 編目為遠(yuǎn)程數(shù)據(jù)庫。顯然,這對于這個示例場景并不是必需的,因為源和目標(biāo)數(shù)據(jù)庫在同一個服務(wù)器上的同一個 DB2 實例中運行。但是在真實的環(huán)境中,必須對運行目標(biāo)數(shù)據(jù)庫的 DB2 實例執(zhí)行以下 CATALOG 命令,從而允許對源數(shù)據(jù)庫進(jìn)行 TCP/IP 訪問。

清單 13. 在節(jié)點和數(shù)據(jù)庫目錄中創(chuàng)建訪問 SAMPLE 數(shù)據(jù)庫所需的條目

C:\>db2 "CATALOG TCPIP NODE SRCNODE REMOTE localhost SERVER 50000"

DB20000I The CATALOG TCPIP NODE command completed successfully.

DB21056W Directory changes may
not be effective until the directory cache is

refreshed.

C:\
>db2 "CATALOG DATABASE SAMPLE AS SRCDB AT NODE SRCNODE AUTHENTICATION SERVER"

DB20000I The CATALOG
DATABASE command completed successfully.

DB21056W Directory changes may
not be effective until the directory cache is

refreshed.

C:\
>db2 "TERMINATE"

DB20000I The TERMINATE command completed successfully.

準(zhǔn)備 LOAD FROM CURSOR 操作的最后一步是配置對源數(shù)據(jù)庫 SAMPLE 中 SALES 表的聯(lián)邦訪問。這需要在目標(biāo)數(shù)據(jù)庫 MYSAMPLE 中創(chuàng)建對另一個數(shù)據(jù)庫執(zhí)行聯(lián)邦訪問所需的幾個特殊對象:

包裝器

包裝器支持訪問外部數(shù)據(jù)源。外部數(shù)據(jù)源可以是另一個 DBMS(數(shù)據(jù)庫管理系統(tǒng)),比如 Oracle 或 SQL Server,也可以僅僅是 Excel 文件。根據(jù)應(yīng)該訪問的數(shù)據(jù)源,需要適當(dāng)?shù)陌b器。這些包裝器包含在單獨的 IBM product WebSphere® Federation Server 中。如果只希望訪問 DB2 產(chǎn)品系列(DB2 LUW 或 DB2 z/OS)的另一個數(shù)據(jù)庫,那么需要 DRDA 包裝器。DB2 LUW 中已經(jīng)包含這個包裝器,所以在這種情況下不需要 WebSphere Federation Server。通過在目標(biāo)數(shù)據(jù)庫中執(zhí)行以下命令,創(chuàng)建 DRDA 包裝器:CREATE WRAPPER DRDA。

服務(wù)器

“服務(wù)器” 這個詞在這里有點容易引起誤解,因為這實際上意味著源數(shù)據(jù)庫扮演(數(shù)據(jù))服務(wù)器的角色。為了在目標(biāo)數(shù)據(jù)庫中識別源數(shù)據(jù)庫,要創(chuàng)建一個服務(wù)器對象,它指定數(shù)據(jù)源的類型 (DB2/UDB VERSION 9.5)、要使用的包裝器 (DRDA) 和訪問源數(shù)據(jù)庫所需的用戶名/密碼組合。使用 DBNAME 選項提供源數(shù)據(jù)庫本身的名稱。用戶名/密碼必須在引號中指定。為了避免命令行解釋器刪除引號,應(yīng)該加上一個反斜杠 (\)。可以自由選擇服務(wù)器對象的名稱。在這個示例場景中,使用名稱 SRCSRV。

用戶映射

對于希望用前面定義的服務(wù)器對象訪問遠(yuǎn)程數(shù)據(jù)庫的每個用戶,都必須創(chuàng)建一個用戶映射。用戶映射定義本地數(shù)據(jù)庫 (MYSAMPLE) 中的授權(quán) ID 如何映射到遠(yuǎn)程數(shù)據(jù)庫 (SAMPLE) 中的授權(quán) ID。在這個示例場景中,本地用戶和遠(yuǎn)程用戶是相同的,但是仍然必須定義用戶映射。

別名

別名是源數(shù)據(jù)庫中的遠(yuǎn)程表的本地別名。指定了別名,就可以在目標(biāo)數(shù)據(jù)庫中用 SQL 語句查詢遠(yuǎn)程表,就像查詢?nèi)魏伪镜乇硪粯印?/P>

清單 14. 創(chuàng)建聯(lián)邦訪問所需的數(shù)據(jù)庫對象

C:\>db2 "CONNECT TO MYSAMPLE"

Database Connection Information

Database server = DB2/NT 9.5.2

SQL
authorization ID = FECHNER

Local
database alias = MYSAMPLE

C:\
>db2 "CREATE WRAPPER DRDA"

DB20000I The SQL command completed successfully.

C:\
>db2 "CREATE SERVER SRCSRV TYPE DB2/UDB VERSION 9.5 WRAPPER DRDA AUTHORIZATION

\"fechner\" PASSWORD \"password\" OPTIONS (DBNAME
'SRCDB')"

DB20000I The SQL command completed successfully.

C:\
>db2 "CREATE USER MAPPING FOR fechner SERVER SRCSRV OPTIONS (REMOTE_AUTHID 'fechner',

REMOTE_PASSWORD
'password')"

DB20000I The SQL command completed successfully.

C:\
>db2 "CREATE NICKNAME FECHNER.SRCTAB FOR SRCSRV.FECHNER.SALES"

DB20000I The SQL command completed successfully.

注意:這里描述的設(shè)置聯(lián)邦訪問所需的步驟完全獨立于 LOAD FROM CURSOR 功能。這意味著這些是為遠(yuǎn)程數(shù)據(jù)庫中的表創(chuàng)建別名的通用步驟。

配置了對源數(shù)據(jù)庫表的聯(lián)邦訪問之后,就可以像前面一樣執(zhí)行 LOAD FROM CURSOR 操作。首先,定義一個游標(biāo),它使用上面創(chuàng)建的別名讀取遠(yuǎn)程表中的所有行。然后,在 LOAD 命令中引用這個游標(biāo)。

清單 15. 使用別名執(zhí)行遠(yuǎn)程 LOAD FROM CURSOR 操作

C:\>db2 "DECLARE C1 CURSOR FOR SELECT * FROM FECHNER.SRCTAB"

DB20000I The SQL command completed successfully.

C:\
>db2 "LOAD FROM C1 OF CURSOR MESSAGES C:\load_sales.msg INSERT INTO FECHNER.SALES

NONRECOVERABLE"

Number of rows read = 41

Number of rows skipped = 0

Number of rows loaded = 41

Number of rows rejected = 0

Number of rows deleted = 0

Number of rows committed = 41

C:\
>db2 "TERMINATE"

DB20000I The TERMINATE command completed successfully.

正如前面提到的,與方法 2 相比,結(jié)合使用 LOAD FROM CURSOR 操作和聯(lián)邦訪問需要做的配置工作比較多。但是,聯(lián)邦訪問的主要優(yōu)點是可以從非 DB2 數(shù)據(jù)源裝載數(shù)據(jù)。通過使用聯(lián)邦方式,可以訪問 Oracle、SQL Server 等數(shù)據(jù)源以及其他許多關(guān)系和非關(guān)系數(shù)據(jù)源,通過創(chuàng)建別名并執(zhí)行引用別名的 LOAD FROM CURSOR 操作來復(fù)制內(nèi)容。WebSphere Federation Server 產(chǎn)品提供訪問非 DB2 數(shù)據(jù)源所需的包裝器。

#p#

方法2 使用 LOAD FROM CURSOR 命令的遠(yuǎn)程訪問特性

既然已經(jīng)了解了使用別名的遠(yuǎn)程 LOAD FROM CURSOR 操作方法,現(xiàn)在看看另一種比較簡便的方法。為此,首先刪除剛才在目標(biāo)數(shù)據(jù)庫 MYSAMPLE 中的 SALES 表中導(dǎo)入的所有行,見清單 16。

清單 16. 刪除目標(biāo)表中的所有行,以便再次執(zhí)行 LOAD FROM CURSOR 操作

C:\>db2 "CONNECT TO MYSAMPLE"

Database Connection Information

Database server = DB2/NT 9.5.2

SQL
authorization ID = FECHNER

Local
database alias = MYSAMPLE

C:\
>db2 "DELETE FROM FECHNER.SALES"

DB20000I The SQL command completed successfully.

對于第二種方法,不需要配置對遠(yuǎn)程數(shù)據(jù)庫的聯(lián)邦訪問。只需使用 DATABASE 選項在 DECLARE CURSOR 語句中指定遠(yuǎn)程數(shù)據(jù)庫。為此,要在本地 DB2 實例的系統(tǒng)數(shù)據(jù)庫目錄中對遠(yuǎn)程數(shù)據(jù)庫進(jìn)行編目。前面已經(jīng)給出了所需的 CATALOG 命令。另外,在定義游標(biāo)時要指定遠(yuǎn)程訪問所需的用戶名和密碼。LOAD 命令本身保持不變。

清單 17. 在不使用別名的情況下執(zhí)行遠(yuǎn)程 LOAD FROM CURSOR 操作

C:\>db2 "DECLARE C1 CURSOR DATABASE SRCDB USER fechner USING password FOR SELECT * FROM

FECHNER.SALES"

DB20000I The SQL command completed successfully.

C:\
>db2 "LOAD FROM C1 OF CURSOR MESSAGES C:\load_sales_2.msg INSERT INTO FECHNER.SALES

NONRECOVERABLE"

Number of rows read = 41

Number of rows skipped = 0

Number of rows loaded = 41

Number of rows rejected = 0

Number of rows deleted = 0

Number of rows committed = 41

C:\
>db2 "TERMINATE"

DB20000I The TERMINATE command completed successfully.

從 DB2 9.1 開始,可以以這種方式執(zhí)行遠(yuǎn)程 LOAD FROM CURSOR 操作,這種方式基于 DB2 8 中的聯(lián)邦訪問方法。這種新方法有兩個優(yōu)點 —— 容易使用且性能好。顯然,新方法非常容易使用。性能比聯(lián)邦方法好是因為涉及的數(shù)據(jù)傳輸層更少。但是,不應(yīng)該忘記聯(lián)邦方法的優(yōu)點,即可以訪問非 DB2 數(shù)據(jù)源。

CLP 和 ADMIN_CMD 在 LOAD FROM CURSOR 方面的差異

可以通過特殊的存儲過程 ADMIN_CMD 執(zhí)行許多管理命令,從而把管理命令嵌入在應(yīng)用程序代碼中。這也適用于 LOAD FROM CURSOR 操作。存儲過程 ADMIN_CMD 的使用與應(yīng)用程序代碼的位置無關(guān),也就是說,在客戶端代碼(例如 Java 應(yīng)用程序)和服務(wù)器端代碼(例如 SQL/PL 存儲過程)中都可以使用它。下面的示例在一個定制的 SQL/PL 存儲過程中使用 ADMIN_CMD 存儲過程。create_load_routine.sql 文件包含示例存儲過程 REMOTE_LOAD_FROM_CURSOR 的 SQL/PL 源代碼。

清單 18. 包含示例存儲過程的 create_load_routine.sql 文件

CREATE PROCEDURE FECHNER.REMOTE_LOAD_FROM_CURSOR ()

SPECIFIC REMOTE_LOAD_FROM_CURSOR

LANGUAGE SQL

BEGIN

DELETE FROM FECHNER.SALES;--

CALL SYSPROC.ADMIN_CMD (
'LOAD FROM (DATABASE SRCDB SELECT * FROM FECHNER.SALES) OF

CURSOR INSERT INTO FECHNER.SALES NONRECOVERABLE
');--

END;

存儲過程中的第一個語句是 DELETE,它刪除本地目標(biāo)表 SALES 中現(xiàn)有的行。接下來,用適當(dāng)?shù)?LOAD 命令調(diào)用 ADMIN_CMD,從而執(zhí)行遠(yuǎn)程 LOAD FROM CURSOR 操作。這種方式與從命令行執(zhí)行 LOAD FROM CURSOR 操作的差異如下:

不需要通過執(zhí)行 DECLARE CURSOR 單獨定義所需的游標(biāo)。在 LOAD 命令中提供相應(yīng)的 SELECT 語句,就會隱式地定義游標(biāo)。只有在 ADMIN_CMD 調(diào)用中嵌入 LOAD FROM CURSOR 操作的情況下,這種語法才是有效的,在命令行上是無效的。

在 LOAD 命令中通過 DATABASE 選項定義遠(yuǎn)程數(shù)據(jù)庫。不可能指定遠(yuǎn)程訪問所需的用戶名/密碼組合。請在測試存儲過程時觀察這一限制的影響。

但是,首先應(yīng)該在目標(biāo)數(shù)據(jù)庫 MYSAMPLE 中創(chuàng)建存儲過程。

清單 19. 創(chuàng)建示例存儲過程

C:\>db2 "CONNECT TO MYSAMPLE"

Database Connection Information

Database server = DB2/NT 9.5.2

SQL
authorization ID = FECHNER

Local
database alias = MYSAMPLE

C:\
>db2 -tf create_load_routine.sql

DB20000I The SQL command completed successfully.

第一個測試調(diào)用失敗,返回消息 SQL30082N Security processing failed with reason "3" ("PASSWORD MISSING"). SQLSTATE=08001。

清單 20. 對示例存儲過程的第一次測試失敗

C:\>db2 "CALL FECHNER.REMOTE_LOAD_FROM_CURSOR"

SQL30082N Security processing failed
with reason "3" ("PASSWORD MISSING").

SQLSTATE
=08001

C:\
>db2 "TERMINATE"

DB20000I The TERMINATE command completed successfully.

這個錯誤消息是由于建立數(shù)據(jù)庫連接的方式造成的:db2 "CONNECT TO MYSAMPLE"。在執(zhí)行 CONNECT 語句時,沒有提供用戶名和密碼,因此使用登錄操作系統(tǒng)所用的用戶名建立連接。在這種情況下,DB2 不知道此用戶的密碼。在存儲過程中執(zhí)行 LOAD FROM CURSOR 操作時,DB2 嘗試用本地用戶的授權(quán) ID 連接遠(yuǎn)程數(shù)據(jù)庫 SAMPLE。但是,由于使用隱式的 CONNECT,DB2 不知道相應(yīng)的密碼,所以遠(yuǎn)程訪問失敗。因此,這個錯誤的原因如下:

因為通過 ADMIN_CMD 執(zhí)行的 LOAD FROM CURSOR 操作不允許指定遠(yuǎn)程訪問所用的用戶,所以 LOAD 操作自動地用屬于本地數(shù)據(jù)庫連接的授權(quán) ID 連接遠(yuǎn)程數(shù)據(jù)庫。

如果本地連接的用戶執(zhí)行隱式的 CONNECT 而沒有指定密碼,DB2 就不知道他/她的密碼,因此在嘗試連接遠(yuǎn)程數(shù)據(jù)庫時沒有密碼可用。

通過 ADMIN_CMD 執(zhí)行的遠(yuǎn)程 LOAD FROM CURSOR 操作的這一特點(無法指定遠(yuǎn)程訪問所用的用戶)還有一個影響:當(dāng)前連接本地數(shù)據(jù)庫的用戶必須用相同的授權(quán) ID 訪問遠(yuǎn)程數(shù)據(jù)庫。在使用聯(lián)邦方法訪問遠(yuǎn)程數(shù)據(jù)庫時,沒有這一限制,因為必須以用戶映射的形式定義額外的抽象層。

既然找到了錯誤的原因,就可以重新連接本地數(shù)據(jù)庫,這一次顯式地指定用戶名和密碼。對存儲過程的第二次調(diào)用應(yīng)該會成功 (Return Status = 0),見清單 21。

清單 21. 對示例存儲過程的第二次測試成功

C:\>db2 "CONNECT TO MYSAMPLE USER fechner"

Enter
current password for fechner:

Database Connection Information

Database server = DB2/NT 9.5.2

SQL
authorization ID = FECHNER

Local
database alias = MYSAMPLE

C:\
>db2 "CALL FECHNER.REMOTE_LOAD_FROM_CURSOR"

Return Status = 0

C:\
>db2 "TERMINATE"

DB20000I The TERMINATE command completed successfully.

結(jié)束語

本文通過示例場景演示了如何使用 DB2 的 LOAD FROM CURSOR 特性在一個數(shù)據(jù)庫中以及不同的數(shù)據(jù)庫之間快速輕松地復(fù)制數(shù)據(jù)。還解釋了通過 ADMIN_CMD 存儲過程在應(yīng)用程序代碼中執(zhí)行 LOAD FROM CURSOR 操作時的特殊問題。另外,還講解了如何為另一個數(shù)據(jù)庫配置聯(lián)邦訪問,從而像訪問本地表或視圖一樣透明地讀寫遠(yuǎn)程數(shù)據(jù)庫中的表和視圖。

【編輯推薦】

  1. DB2數(shù)據(jù)庫性能優(yōu)化技巧詳解
  2. DB2數(shù)據(jù)庫移植常見問題全面解析
  3. DB2 9存儲過程的規(guī)劃和實施技巧
責(zé)任編輯:yangsai 來源: it168
相關(guān)推薦

2010-11-03 13:55:39

創(chuàng)建DB2實例

2010-08-16 14:16:28

DB2實例

2010-09-01 11:25:08

DB2加密

2010-11-02 14:53:38

DB2權(quán)限

2010-11-03 14:05:58

DB2離線備份

2011-05-16 14:42:12

DB2數(shù)據(jù)庫實用操作

2010-08-31 14:24:25

DB2聯(lián)合數(shù)據(jù)庫

2010-08-11 09:14:33

DB2數(shù)據(jù)類型

2010-08-16 17:07:43

DB2 trc

2010-08-03 11:05:07

DB2 Persona

2011-03-14 09:51:32

DB2 V8數(shù)據(jù)庫系統(tǒng)

2010-08-31 15:39:25

DB2存儲過程

2010-08-03 13:56:11

DB2表復(fù)制

2010-08-04 12:39:55

2010-08-02 14:34:53

DB2數(shù)據(jù)移動

2011-05-11 13:01:07

DB2數(shù)據(jù)恢復(fù)數(shù)據(jù)備份

2010-08-16 09:39:03

DB2基礎(chǔ)知識DB2c

2010-09-30 16:46:11

DB2操作語句

2010-08-18 08:53:23

DB2 SELECT語

2010-11-02 14:16:02

linux下安裝DB2
點贊
收藏

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

一区二区三区不卡在线| 日本一区二区三区四区视频| 亚洲最大视频网| 美女av在线免费看| 国产欧美精品一区| 99久久久精品免费观看国产| 免费日韩一级片| 久久99国产成人小视频| 欧美精品少妇一区二区三区| 成品人视频ww入口| 在线免费黄色| 在线成人免费| 热久久天天拍国产| 欧美日韩国产中文| 国产成人在线小视频| 欧美69xxxxx| 国内精品在线播放| 国产91丝袜在线播放0| 欧美日本国产在线| 最近中文字幕免费视频| 亚洲精品大全| 色婷婷av一区| 欧洲精品一区二区三区久久| 欧美成人性生活视频| 99视频在线精品| 51国偷自产一区二区三区的来源| 无码人妻av免费一区二区三区| 午夜精品网站| 久久精品男人天堂| 中文字幕 自拍| 欧美三级电影在线| 欧美成人激情免费网| jizz18女人| 日韩欧美精品电影| 欧美午夜激情视频| 久久久亚洲精品无码| 菠萝蜜视频国产在线播放| 国产色婷婷亚洲99精品小说| 精品婷婷色一区二区三区蜜桃| 国产强伦人妻毛片| 国产精品入口夜色视频大尺度 | 国产不卡在线视频| 国产欧美一区二区三区四区| 亚洲黄网在线观看| 国产美女一区| 久久久久久久久久久av| 波多野结衣在线网址| 成人羞羞动漫| 亚洲图片在区色| 亚洲专区区免费| 国产区精品视频在线观看豆花| 日韩小视频在线观看专区| 国产成年人视频网站| 精品视频在线一区二区在线| 色婷婷国产精品久久包臀| 免费av观看网址| 黄色污网站在线观看| 亚洲一区二区三区视频在线播放 | 日韩精品卡一| 亚洲精品久久嫩草网站秘色| 99热这里只有精品7| 黄色在线播放网站| 一区二区三区日韩| 亚洲 欧美 综合 另类 中字| 麻豆蜜桃在线| 精品人伦一区二区三区蜜桃网站| 国产女大学生av| 亚洲人体视频| 在线视频综合导航| 色婷婷.com| 精品午夜视频| 亚洲成人在线视频播放| av无码av天天av天天爽| 久久99高清| 日韩三级成人av网| 国产一级特黄a高潮片| 亚洲精品乱码| 国产精品免费视频久久久| 国产精品九九九九| jlzzjlzz亚洲日本少妇| 日韩电影大全在线观看| 国产精品久久久久久久龚玥菲 | 中文字幕日韩一区二区三区不卡 | 丰满少妇在线观看bd| 福利一区二区在线| 欧美成人免费在线| 精品美女在线观看视频在线观看| 一区二区三区蜜桃| 六月丁香婷婷在线| 大胆国模一区二区三区| 亚洲国产精品成人va在线观看| 亚洲一区二区三区蜜桃| 久久久久久久久99精品大| 国内精品中文字幕| 一区二区三区在线免费观看视频| 国产精品99久久久久久有的能看| 精品国产综合久久| 成人看片爽爽爽| 亚洲精品视频在线| 亚欧无线一线二线三线区别| 亚洲第一二三四区| 亚洲精品在线免费看| 中文字幕在线观看视频一区| 国产精品一区二区果冻传媒| 国产日韩一区二区| 国产高清av在线| 一区二区三区欧美日| 免费日韩视频在线观看| 亚洲男男av| 国产视频亚洲精品| 国产av无码专区亚洲av毛网站| 一本久久综合| 国产在线播放不卡| 欧洲成人av| 亚洲影院在线观看| 日本在线一二三区| 午夜a一级毛片亚洲欧洲| 欧美wwwxxxx| 中文字幕在线观看视频免费| 国产精品亚洲一区二区三区妖精 | 三级视频网站在线| 久久久国产一区二区三区四区小说| 欧美亚洲动漫另类| 无码人妻精品一区二区三区在线| 欧美电影在线观看网站| 亚洲激情在线观看| 四虎永久免费在线| 久久99精品久久久久婷婷| 欧美精品亚洲| 嗯啊主人调教在线播放视频 | 一区二区三区在线视频观看58| 六月激情综合网| 美女一区二区在线观看| 色综合久久88| 精品人妻午夜一区二区三区四区| 成人免费视频在线观看| 欧美三级午夜理伦三级富婆| 国产精品嫩草影院在线看| 55夜色66夜色国产精品视频| 日本免费一区视频| 亚洲午夜久久久久久久久电影网| a级大片免费看| 亚洲电影在线一区二区三区| 成人激情免费在线| 欧美jizzhd69巨大| 欧美精品18+| 国产中文字幕久久| 精品伊人久久久久7777人| 亚洲一区三区电影在线观看| 欧美日韩卡一| 久久久国产影院| 国产裸体永久免费无遮挡| 亚洲丝袜另类动漫二区| 在线观看岛国av| 综合激情在线| 成人欧美一区二区| 91麻豆精品国产91久久久更新时间 | 精品91自产拍在线观看一区| 亚洲三级久久久| 亚洲36d大奶网| 久久久影院免费| 91精品在线看| 婷婷色在线资源| 337p日本欧洲亚洲大胆精品| 中文字幕亚洲高清| 国产视频在线观看一区二区三区| 欧美三级理论片| 一区二区日韩欧美| 国产嫩草一区二区三区在线观看| 三妻四妾完整版在线观看电视剧| 亚洲人成亚洲人成在线观看| 欧美高清69hd| 亚洲精品自拍动漫在线| 日本在线不卡一区二区| 噜噜噜在线观看免费视频日韩| 视频在线精品一区| 国产精品美女久久久久| 午夜精品一区二区三区av| 蜜桃视频在线观看网站| 欧美少妇xxx| 黄色在线观看免费| 92精品国产成人观看免费| 性欧美极品xxxx欧美一区二区| 91不卡在线观看| 国产精品果冻传媒潘| 亚洲一级少妇| 久久精品视频99| 天堂成人在线| 欧美丰满嫩嫩电影| 日韩av男人天堂| 国产精品 日产精品 欧美精品| 1024av视频| 亚洲色图网站| 欧美激情论坛| 亚洲日本va| 国产精品久久久久久av福利软件| 人妖欧美1区| 国产亚洲视频在线观看| 欧美熟妇另类久久久久久不卡| 色琪琪一区二区三区亚洲区| 2021亚洲天堂| 久久精品男人天堂av| 欧美xxxxx少妇| 久久99精品久久久久婷婷| 99999精品视频| 很黄很黄激情成人| 在线综合视频网站| 久草成人资源| 精品日本一区二区三区在线观看 | 夜夜嗨av一区二区三区网站四季av| 相泽南亚洲一区二区在线播放| 大奶一区二区三区| 91视频免费在线| 亚洲第一会所| 91爱爱小视频k| 三级网站视频在在线播放| 中文字幕免费国产精品| 神马电影在线观看| 精品动漫一区二区三区在线观看| 一区二区精品视频在线观看| 色屁屁一区二区| 国产嫩bbwbbw高潮| 五月综合激情婷婷六月色窝| 艳妇荡乳欲伦69影片| 国产日本亚洲高清| 三级黄色片网站| 99视频一区二区| www国产视频| 成人丝袜高跟foot| 成人三级做爰av| 激情综合网天天干| 五月天婷婷亚洲| 久久电影网电视剧免费观看| 欧美日韩亚洲自拍| 蜜桃一区二区三区四区| 欧美性猛交久久久乱大交小说| 国产精品美女久久久| 水蜜桃色314在线观看| 亚洲性图久久| 久久久性生活视频| 日韩视频一区| 无罩大乳的熟妇正在播放| 亚洲经典视频在线观看| 成人性免费视频| 一本色道精品久久一区二区三区| 男人添女人下面高潮视频| 国产欧美在线| 成年人免费在线播放| 亚洲综合精品四区| 国产精品-区区久久久狼| 先锋亚洲精品| 能看的毛片网站| 七七婷婷婷婷精品国产| 欧美特级aaa| 久久精品国产**网站演员| 亚洲日本黄色片| 国产精品伊人色| 深田咏美中文字幕| 91原创在线视频| 亚洲黄色免费视频| 欧美人妖巨大在线| 少妇久久久久久久久久| 26uuu欧美| 欧美黄色激情视频| 国产精品蜜臀在线观看| 精品久久精品| 国产精品久久久av| 精品久久在线| 成人激情在线观看| 亚洲码欧美码一区二区三区| 国产精品一区二区三区免费| 日韩成人午夜| 亚洲第一综合| 中文字幕日韩一区二区不卡| 久久综合久久久久| 美女国产精品| 亚洲色图偷拍视频| av一区二区三区在线| 怡红院一区二区三区| 亚洲欧美精品午睡沙发| 精品国产免费观看| 欧美三级日韩在线| 亚洲成a人片77777精品| 亚洲色图美腿丝袜| 在线观看午夜av| 欧美在线观看网址综合| 日韩久久99| 久久一区二区三区av| 日韩欧美午夜| 尤物av无码色av无码| 另类欧美日韩国产在线| 国产xxxxxxxxx| 中文字幕中文字幕在线一区 | 亚洲女优在线| 久久久亚洲国产精品| 日日夜夜精品免费视频| 国产91九色视频| 国产黄色一区| 国产伦精品一区二区三区视频孕妇 | 亚洲精品视频在线| 天堂а√在线中文在线新版| 正在播放一区二区| 国产在线小视频| 久久久久久成人| 日韩三区四区| 奇米影视首页 狠狠色丁香婷婷久久综合| 1024精品久久久久久久久| 久久久久久久久久久久久国产精品| 国产中文字幕一区| 国产三级在线观看完整版| 婷婷久久综合九色国产成人 | 日韩h在线观看| 91国内在线| 国产一区二区丝袜高跟鞋图片| 先锋影音国产精品| 国产精品一线二线三线| 国产乱色国产精品免费视频| 在线看片中文字幕| 欧美性xxxx18| 亚洲 欧美 激情 另类| 欧美第一黄色网| 久久av网站| 男人的天堂成人| 久久国产麻豆精品| 中文字幕av久久爽一区| 色婷婷精品久久二区二区蜜臀av| 熟妇人妻一区二区三区四区| 欧美激情小视频| 亚洲午夜免费| 妺妺窝人体色www看人体| 国产精品一区二区无线| 免费成人深夜夜行网站| 欧美日韩一区二区电影| 成人在线观看网站| 国产精品久久久久久中文字| 久久91麻豆精品一区| 免费大片在线观看| 久久久久久亚洲综合影院红桃| 日本中文字幕免费| 亚洲国产精品一区二区三区| 免费在线中文字幕| 成人精品水蜜桃| 亚洲成人直播| 国产毛片毛片毛片毛片毛片毛片| 亚洲成av人影院| 污视频在线免费观看| 国内精品一区二区三区四区| 日韩mv欧美mv国产网站| 黄色片一级视频| 国产精品蜜臀在线观看| 国产乱色精品成人免费视频| 久久国产精彩视频| 2023国产精华国产精品| 久久成人福利视频| 91亚洲国产成人精品一区二区三| 国产又黄又猛又粗又爽| 亚洲午夜精品久久久久久久久久久久 | 日韩黄色大片网站| 中文字幕资源在线观看| 亚洲精品免费在线| 无套内谢的新婚少妇国语播放| 欧美一级淫片丝袜脚交| 欧美少妇性xxxx| 九九久久久久久| 亚洲高清在线精品| 欧美日韩激情视频一区二区三区| 国产精品极品尤物在线观看 | 久久躁狠狠躁夜夜爽| 一区二区三区四区视频免费观看| 99在线免费视频观看| 久久久久久麻豆| 国产精品九九九九| 91精品国产高清久久久久久91| 亚洲视频分类| 中文字幕亚洲影院| 亚洲一区二区综合| 精品无吗乱吗av国产爱色| 成人免费在线视频网站| 激情久久中文字幕| 99精品欧美一区二区| 欧美猛男gaygay网站| 国产美女一区视频| 日韩国产一区久久| 国产精品一区二区三区乱码 | av片在线观看免费| 欧美极品色图| 国产精品亚洲专一区二区三区| 欧美日韩乱国产| 久久成人在线视频| 国产一区二区三区四区大秀| 日韩欧美中文视频| 色呦呦网站一区| 亚洲七七久久综合桃花剧情介绍| 久久av免费一区| 国内精品写真在线观看| 91丝袜一区二区三区| 久久亚洲精品小早川怜子66| 中文字幕伦av一区二区邻居| 婷婷激情综合五月天| 一本大道久久a久久精二百|