一、测试环境

名称
cpuIntel® Core™ i5-1035G1 CPU @ 1.00GHz
操作系统CentOS Linux release 7.9.2009 (Core)
内存4G
逻辑核数3
Gbase-8a节点-IP192.168.142.12
Oracle节点-IP192.168.142.11
Gbase-8a数据库版本8.6.2.43-R33.132743
Oracle数据库版本Release 11.2.0.1.0 Production

二、介绍

1、简介

orato8a 是一个可以快速、高效地从 oracle 数据库系统中抽取数据,并将数据保存到指定文件中的专用工具。并且 orato8a 还提供查询语句导出和全表导出两种方式,其中全表导出的登录用户需要对 dba_extents、dba_objects和 dba_tables 这三张表有 select 权限。

2、语法

./orato8a parameter_1 parameter_2 …… parameter_n

parameter_1:orato8a 的参数,一个 orato8a 后可以使用多个参数,参数可以使用全称格式,也可以使用简称格式。

3、参数

参数描述
user指定连接 oracle 数据库的相关参数,包括:用户名、密码、oracle 数据库所在服务器的 IP、oracle 监听端口号和 oracle 实例名。
query指定导出数据所使用的查询 SQL 语句。由于查询语句常有空格,该参数在指定时,需要用双引号限定。该参数不能与 parallel 参数同时使用。另外,查询语句应该为一个符合 oracle 语法的 SQL,并且只返回一组结果集。示例:–query=“select * from lineorder”
table_name指定表名,该参数不能与 query 参数同时使用。
owner在全表导出时,指定被导出表的隶属的用户名,该参数不能与 query 参数同时使用。如果不指定该 参数,默认为登录用户。
file该参数可以指定为一个包含绝对路径的文件名,也可以指定为一个包含相对路径的文件名。当该参数指定为一个不包含路径的文件名时,该文件被保存在当前路径中。
format指定导出数据文件的数据格式。当设置为 3 时,导出数据为无转义的文本格式;
field功能:指定字段分隔符。参数值可使用字符本身、转义符或十六进制方式表示。当使用 format=3 导出时,必须设置该参数的值。
string_qualifier指定字段包围符,该参数只在 format=3 时有效。如果设定字段包围符,所有字段都会加上字段包围符。如果字段内容与字段包围符内容有重复的部分,则使用字段包围符对字段内容进行转义。
line_separator该参数用于设定行分隔符。只在 format=3 时,该参数有效。
null_value该参数用于设定 NULL 值。只在 format=3 时,该参数有效。
parallel指定并行度。此模式下,需要使用 table_name 参数指定表名,不能使用query 参数,也就是意味着,使用并行模式,只能全表导出。
help该参数用于查看 orato8a 命令参数的帮助信息。
version该参数用于查看 orato8a 工具的版本信息。

4、注意点

(1)最好安装在Oracle服务器。

(2)如果不安装在数据库服务器上,需要安装 oracle客户端,配置tnsnames.ora。

(3)需要用oracle用户运行迁移工具orato8a(orato8a和oracle部署在同一台时)。

三、oracle 11G客户端安装包

如果测试第五大步需要下载。

链接:https://pan.baidu.com/s/1rasI0FxPi5jZ6XhB-nPiCQ 
提取码:eysi

四、测试步骤(orato8a部署在Oracle服务器上)

1、Oracle服务器解压工具orato8a

[root@czg1 pkg]# tar -xvf orato8a-9.5.3.27.16-redhat7-x86_64.tar.bz2 
output/orato8a
output/orato8a.xml

2、赋予权限

[root@czg1 pkg]# chown -R oracle:oinstall output/

3、oracle端测试数据

SQL> desc L_PTY_CUS_POLICY_RENEWAL_0714;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 START_DATE                                         DATE
 PERSON_ID                                          NUMBER(38)

SQL> select * from L_PTY_CUS_POLICY_RENEWAL_0714;

START_DATE           PERSON_ID
------------------- ----------
2022-08-15 00:00:00          1
2022-08-14 00:00:00          1
2022-08-13 00:00:00          1
2022-08-12 00:00:00          1
2022-08-15 00:00:00          2
2022-08-14 00:00:00          2
2022-08-13 00:00:00          2
2022-08-12 00:00:00          2

8 rows selected.

4、orato8a抽数据写到文本

[oracle@czg1 output]$ ./orato8a --user='czg/qwer1234@orcl' --table_name=L_PTY_CUS_POLICY_RENEWAL_0714 --file=/home/oracle/L_PTY_CUS_POLICY_RENEWAL_0714.txt --field="|" --format=3 --parallel=2
export columns: 2
export rows: 8
export time: 0 sec
process ok!

[oracle@czg1 output]$ cat /home/oracle/L_PTY_CUS_POLICY_RENEWAL_0714.txt 
2022-08-15 00:00:00|1
2022-08-14 00:00:00|1
2022-08-13 00:00:00|1
2022-08-12 00:00:00|1
2022-08-15 00:00:00|2
2022-08-14 00:00:00|2
2022-08-13 00:00:00|2
2022-08-12 00:00:00|2

5、Gbase8a创建测试表

gbase> create table L_PTY_CUS_POLICY_RENEWAL_0714(START_DATE timestamp,PERSON_ID DOUBLE);
Query OK, 0 rows affected (Elapsed: 00:00:00.10)

6、文本数据导入Gbase8a

gbase>  LOAD DATA INFILE 'sftp://root:qwer1234@192.168.142.11//home/oracle/L_PTY_CUS_POLICY_RENEWAL_0714.txt' into table L_PTY_CUS_POLICY_RENEWAL_0714 DATA_FORMAT 3 FIELDS TERMINATED BY '|' MAX_BAD_RECORDS 0;
Query OK, 8 rows affected (Elapsed: 00:00:00.84)
Task 393226 finished, Loaded 8 records, Skipped 0 records

gbase> select * from L_PTY_CUS_POLICY_RENEWAL_0714;
+---------------------+-----------+
| START_DATE          | PERSON_ID |
+---------------------+-----------+
| 2022-08-15 00:00:00 |         1 |
| 2022-08-14 00:00:00 |         1 |
| 2022-08-13 00:00:00 |         1 |
| 2022-08-12 00:00:00 |         1 |
| 2022-08-15 00:00:00 |         2 |
| 2022-08-14 00:00:00 |         2 |
| 2022-08-13 00:00:00 |         2 |
| 2022-08-12 00:00:00 |         2 |
+---------------------+-----------+
8 rows in set (Elapsed: 00:00:00.00)

五、测试步骤(orato8a部署在其他服务器上)

1、创建用户

[root@czg1 pkg]# useradd czg

2、拷贝tnsnames.ora

拷贝tnsnames.ora到移工具orato8a部署节点

[root@czg1 ~]# scp /u01/app/oracle/product/11.2.0/network/admin/tnsnames.ora czg0:/opt/pkg/OracleClient

[czg@czg0 OracleClient]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.142.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

gbase8a =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.142.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = gbase8a)
    )
 (HS = OK)
  )

3、安装oracle 客户端安装包

[root@czg0 OracleClient]# unzip instantclient-basic-linux.x64-11.2.0.4.0.zip 

[root@czg0 OracleClient]# unzip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip

[root@czg0 OracleClient]# unzip sdk-11.1.0.7.0-linux-x86_64.zip 

[czg@czg0 OracleClient]$ ll
总用量 60700
drwxr-xr-x 3 czg czg       17 98 14:32 instantclient_11_1
drwxr-xr-x 2 czg czg      332 98 14:32 instantclient_11_2
-rw-r--r-- 1 czg czg 60704657 98 14:27 instantclient-basic-linux.x64-11.2.0.4.0.zip
-rw-r--r-- 1 czg czg   834491 98 14:28 instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
-rw-r--r-- 1 czg czg   607351 98 14:29 sdk-11.1.0.7.0-linux-x86_64.zip
-rw-r----- 1 czg czg      520 98 14:48 tnsnames.ora

4、配置环境变量

[czg@czg0 OracleClient]$ cat /home/czg/.bashrc 
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions


export SQLPATH=/opt/pkg/OracleClient
export TNS_ADMIN=/opt/pkg/OracleClient
export LD_LIBRARY_PATH=/opt/pkg/OracleClient/instantclient_11_2/:$LD_LIBRARY_PATH

5、oracle端测试数据

SQL> desc L_PTY_CUS_POLICY_RENEWAL_0714;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 START_DATE                                         DATE
 PERSON_ID                                          NUMBER(38)

SQL> select * from L_PTY_CUS_POLICY_RENEWAL_0714;

START_DATE           PERSON_ID
------------------- ----------
2022-08-15 00:00:00          1
2022-08-14 00:00:00          1
2022-08-13 00:00:00          1
2022-08-12 00:00:00          1
2022-08-15 00:00:00          2
2022-08-14 00:00:00          2
2022-08-13 00:00:00          2
2022-08-12 00:00:00          2

8 rows selected.

6、orato8a抽数据写到文本

[czg@czg0 output]$ ./orato8a --user='czg/qwer1234@orcl' --table_name=L_PTY_CUS_POLICY_RENEWAL_0714 --file=/home/czg/L_PTY_CUS_POLICY_RENEWAL_0714.txt --field="|" --format=3 --parallel=2
export columns: 2
export rows: 8
export time: 0 sec
process ok!

[czg@czg0 output]$ cat /home/czg/L_PTY_CUS_POLICY_RENEWAL_0714.txt 
2022-08-15 00:00:00|1
2022-08-14 00:00:00|1
2022-08-13 00:00:00|1
2022-08-12 00:00:00|1
2022-08-15 00:00:00|2
2022-08-14 00:00:00|2
2022-08-13 00:00:00|2
2022-08-12 00:00:00|2

7、Gbase8a创建测试表

gbase> create table L_PTY_CUS_POLICY_RENEWAL_0714(START_DATE timestamp,PERSON_ID DOUBLE);
Query OK, 0 rows affected (Elapsed: 00:00:00.10)

8、文本数据导入Gbase8a

gbase> LOAD DATA INFILE 'sftp://root:qwer1234@192.168.142.10//home/czg/L_PTY_CUS_POLICY_RENEWAL_0714.txt' into table L_PTY_CUS_POLICY_RENEWAL_0714 DATA_FORMAT 3 FIELDS TERMINATED BY '|' MAX_BAD_RECORDS 0;
Query OK, 8 rows affected (Elapsed: 00:00:01.01)
Task 4063237 finished, Loaded 8 records, Skipped 0 records

gbase> select * from L_PTY_CUS_POLICY_RENEWAL_0714;
+---------------------+-----------+
| START_DATE          | PERSON_ID |
+---------------------+-----------+
| 2022-08-14 00:00:00 |         1 |
| 2022-08-12 00:00:00 |         1 |
| 2022-08-14 00:00:00 |         2 |
| 2022-08-12 00:00:00 |         2 |
| 2022-08-15 00:00:00 |         1 |
| 2022-08-13 00:00:00 |         1 |
| 2022-08-15 00:00:00 |         2 |
| 2022-08-13 00:00:00 |         2 |
+---------------------+-----------+
8 rows in set (Elapsed: 00:00:00.01)

更多推荐