bcp文件導入mysql和oracle

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章