0、說明
利用mysql load和oracle 的sqlldr將sybase中導出的bcp文件分別進行導入。
bcp文件分隔符:!!@@!!
bcp文件結束符號:,
文件內容:
1!!@@!!1!!@@!!1!!@@!!,,,,,
2!!@@!!2!!@@!!2!!@@!!,,,,,
3!!@@!!3!!@@!!3!!@@!!,,,,,
1、導入mysql
利用mysqlload進行導入。
語法:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[PARTITION (partition_name,...)]
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number {LINES | ROWS}]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
常用到的大致語句爲:
load data infile 'file_name' into table table_name fields terminated by '分隔符'
例子:
mysql> load data local infile '/root/mysql.bcp' into table t3 fields terminated by '!!@@!!';
Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 3
mysql> select * from t3;
+------+------+------+
| c1 | c2 | c3 |
+------+------+------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 3 | 3 |
+------+------+------+
3 rows in set (0.00 sec)
注:
一般情況下爲了安全原因,當讀取位於服務器上的文本文件時,文件必須處於數據庫目錄或可被所有人讀取。你可以通過執行show variables like '%secure%'來查看。
所以我們需要將secure_file_priv的值設爲空,表示不對mysqld 的導入|導出做限制。
vi /etc.my.cnf
#添加以下內容
secure_file_priv=’’
2、導入oracle
使用sql loader將文本類型的文件導入oracle的表中。使用步驟如下:
創建控制文件:
vi input.ctl
load data
infile "/home/oracle/oracle.bcp"
append into table t3
fields terminated by "!!@@!!"
(c1,c2,c3)
導入:
[oracle@oracle ~]$ sqlldr userid=test/test@itsmpdb1 control=input.ctl
SQL*Loader: Release 12.2.0.1.0 - Production on Thu Jun 18 14:26:01 2020
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Path used: Conventional
Commit point reached - logical record count 3
Table T3:
3 Rows successfully loaded.
Check the log file:
input.log
for more information about the load.
查看:
SQL> select * from t3;
C1 C2 C3
---------- ---------- ----------
1 1 1
2 2 2
3 3 3
常見問題:
其中遇到比較常見的問題就是sybase中datetime類型數據導入oracle該如何處理?
在oracle中我們可以使用date類型去兼容sybase的datetime類型。
–例1:
bcp文件中數據格式如下:
Dec 11 2020 12:00AM
那麼我們控制文件可以寫成這樣:
load data
infile "/home/oracle/oracle.bcp"
append into table t2
(c1 timestamp "MON DD YYYY HH:MIAM")
–例2:
bcp文件中數據格式爲:
Dec 11 2012 5:56:00:000AM
那麼我們控制文件可以寫成:
load data
infile "/home/oracle/oracle.bcp"
append into table t2
(c1 timestamp "MON DD YYYY HH:MI:SS:FF3AM")
參考鏈接:
https://xz.aliyun.com/t/3973
http://f.dataguru.cn/thread-133061-1-1.html