/*
1) connect DB2 using Generic Connectivity
- odbc configuration
- change parameter HS_FDS_CONNECT_INFO and make .ora file
- SQLNet.ora,tnsname.ora,listener.ora
- create database link
2) query DB2 (big5) testing table
*/
/* 1) connect DB2 using Generic Connectivity */
/*
-- 設定 odbc
資料庫來源名稱: CDIDB
資料庫別名: CDIDB88
*/

/*
從 C:\oracle\product\10.2.0\db_1\hs\admin下
複製 inithsodbc.ora 命名格式 init + DSN Name + .ora
=> initCDIDB88.ora
*/

/*開啟 initCDIDB88.ora 設定參數 HS_FDS_CONNECT_INFO */
HS_FDS_CONNECT_INFO = CDIDB88
/* 開啟 SQLNet.ora 做以下變更 */
SQLNET.AUTHENTICATION_SERVICES= (NTS)
/* 開啟 tnsname.ora 增加以下設定 */
CDIDB88 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ODDYSEY)(PORT = 1521))
)
(CONNECT_DATA =
(SID = CDIDB88)
)
(HS = OK)
)
/* 開啟 listener.ora 增加以下設定 */
(SID_DESC =
(PROGRAM = hsodbc)
(ORACLE_HOME = c:\oracle\product\10.2.0\db_1)
(SID_NAME = CDIDB88)
)
/* Listener stop & start */
lsnrctl stop
lsnrctl start
/* connect / as sysdba */
/* create database link */
create database link db2svr
connect to “db2admin”
identified by “db2admin”
using 'CDIDB88';
/* Oracle DB 字元集 */
SQL> select value from nls_database_parameters
2 where parameter = 'NLS_CHARACTERSET';
VALUE
---------------
AL32UTF8
/* Back to CDIDB88 */
C:\>db2 get db config for cdidb88
資料庫 cdidb88 的資料庫配置
資料庫配置版次 = 0x0a00
資料庫版次 = 0x0a00
資料庫專屬區 = TW
資料庫字碼頁 = 950
資料庫字碼集 = big5
資料庫國碼/地區碼 = 88
資料庫對照順序 = UNIQUE
替代對照順序 (ALT_COLLATE) =
‧
‧
‧
/* 建立測試 Table & 新增測試資料 */
C:\>db2 create table db2_big5_tab ( col1 varchar(6)) in userspace1
DB20000I SQL 指令已順利完成。
C:\>db2 insert into db2_big5_tab values ('一二三')
DB20000I SQL 指令已順利完成。
/* Back to ORACLE */
/* 透過 Database Link 看 db2 測試table layout */
SQL> desc db2_big5_tab@db2svr
名稱 空值? 類型
-------------------- --------------- ----------------
COL1 VARCHAR2(6)
/* Oracle 在 select 時不受自己 characterset 的影響,資料可完整顯示 */
SQL> select * from db2_big5_tab@db2svr;
COL1
---------
一二三
/* 新增時也可完整新增至 db2 table */
SQL> insert into db2_big5_tab@db2svr values ('四五六');
已建立 1 個資料列.
SQL> commit;
確認完成.
/* Back to DB2 */
/* 從 db2 看測試 table */
C:\>db2 select * from db2_big5_tab
COL1
------
一二三
四五六
已選取 2 個記錄。
/* 重建測試 Table */
C:\>db2 drop table db2_big5_tab
DB20000I SQL 指令已順利完成。
C:\>db2 create table db2_big5_tab (col1 char(2)) in userspace1
DB20000I SQL 指令已順利完成。
C:\>db2 insert into db2_big5_tab values ('一')
DB20000I SQL 指令已順利完成。
/* 重新登錄 Oracle */
SQL> desc db2_big5_tab@db2svr
名稱 空值? 類型
------------------ ------- ----------------
COL1 CHAR(2)
/* 看一下內容與長度 */
SQL> select * from db2_big5_tab@db2svr;
COL1
------------
一
SQL> select lengthb(col1) from db2_big5_tab@db2svr;
LENGTHB(COL1)
-------------
3