標籤:
前言:
不同類型的資料庫互導資料,由於資料庫機制不同,不能通過簡單的複製粘貼實現,還有由於檔案格式的不同,也不能簡單的匯出檔案,匯入資料庫。
關於informix匯出資料,匯入到oracle的方法,經過實驗可以用如下方式:(雖然有點笨,但對於小批量需求,能行得通^_^)
(曾經用過perl指令碼實現,但由於調試perl環境及pl的依賴包有點麻煩,未能順利調通,暫且將笨方法記錄如下)
1 informix中將資料匯出成unl檔案格式
unload to "/informix/system_setup20150617.unl" select * from system_setup ;
dbschema -d nmosdb -t tfa_alarm_relation –ss
2 製作ctl控制檔案circuit.ctl
load data
infile ‘circuit20150610.unl‘ --匯出的unl檔案
into table circuit --匯入的表名
fields terminated by ‘|‘ --分隔字元
TRAILING NULLCOLS --列出表中所有欄位
( object_class char(10000),
resourcesid char(10000),
int_id char(10000),
circuitno char(10000),
......
bnodeport_rdn char(10000),
localnode_rdn char(10000),
romotenode_rdn char(10000) )
3 配置sqlldr命令可以使用的環境變數
使用者環境變數:
ORACLE_UNQNAME=oracle
ORACLE_HOME=/opt/oracle/product/11g
ORA_NLS10=/opt/oracle/product/11g/nls/data
ORACLE_SID=orcl
ORACLE_BASE=/opt/oracle
PATH=/opt/oracle/product/11g/bin:/usr/sbin
LD_LIBRARY_PATH=/opt/oracle/product/11g/lib:/lib:/usr/lib
oracle用戶端配置:
tnsnames.ora
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.0.9)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /opt/app/oracle/product/11.2.0/db_1) (SID_NAME = orcl) ) )
listener.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.0.9)(PORT = 1521)) ) )
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /opt/oracle/product/11g)
(PROGRAM = extproc)
(ENVS="EXTPROC_DLLS=ANY")
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /opt/oracle/product/11g)
(SID_NAME = orcl)
)
)
sqlldr 資料庫使用者名稱/密碼@執行個體名 測試是否通
4 執行命令,匯入檔案
sqlldr userid=nrmdb/[email protected] control= /opt/informix/data/circuit.ctl
data= /opt/informix/data/circuit20150610.unl
附加:
informix的日期欄位匯入到oracle中,由於不是相同的類型,不能直接匯入
通過一個欄位 做了個中轉。
例如informix日期欄位為time_stamp;
在oracle中 建立一個time_stamp1 varchar(255)用於接收 informix的日期欄位;
同時在oracle中建立一個time_stamp date 用於oracle中將日期欄位從 varchar轉換為date
update circuit set time_stamp=to_date(time_stamp1,‘yyyy-mm-dd hh24:mi:ss‘)
將過度欄位time_stamp1刪除。
類型轉換完成。
結語:
DBA匱乏的年代,能把實踐落地的人更加的匱乏... 多做些動手實踐,再去討論什麼方案可行,更有說服力
因為,只有在實踐的過程中,才能遇到形形色色的問題,需要去一個個攻克它~~~
加油吧~~~trouble shooter^_^
Informix資料匯入到oracle資料庫的方法