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

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