本文介绍如何将PPAS的数据迁移到本地Oracle上。
限制说明
当前只支持文件及普通数据类型进行导出,不支持BLOB等二进制类型。
前提条件
- 已安装好Oracle数据库的服务器。
- 在RDS PPAS数据库实例的白名单中添加Oracle服务器的IP地址,具体操作请参见设置白名单。
- 用户需要按RDS PPAS数据库中的表结构在Oracle中建立对应的表结构。
- 已获取PostgreSQL客户端并上传到Oracle数据库服务器上。
操作步骤
说明 本例以将RDS PPAS数据迁移到安装在云服务器ECS上的Oracle为例。本例中的云服务器ECS操作系统为CentOS 6.5。
- 在Oracle数据库服务器上安装PostgreSQL客户端。
[root@oraclexe ~]# yum install postgresql.x86_64 [root@oraclexe ~]# /usr/bin/psql --version psql (PostgreSQL) 8.4.20
- 在ECS中配置对RDS PPAS实例的无密码登录。
[root@oraclexe ~]# vim ~/.pgpass [root@oraclexe ~]# cat ~/.pgpass rm-2ze466l5u1k657yyn.ppas.rds.aliyuncs.com:3433:ora:myadmin:xxxxxxx //参数格式为 HOSTNAME:PORT:DATABASE:USERNAME:PASSWORD [root@oraclexe ~]# chmod 0600 ~/.pgpass
说明 配置文件.pgpass位于HOME目录下。 - 测试ECS和RDS PPAS连接。
[root@oraclexe ~]# psql -h rm-2ze466l5u1k657yyn.ppas.rds.aliyuncs.com -p 3433 -U myadmin ora psql.bin (9.3.1.3, 服务器 9.3.13.37) 输入 "help" 来获取帮助信息. ora=>
如果能以ora用户登录RDS PPAS,则连接成功。测试成功后,返回到root用户。
ora=> \q [root@oraclexe ~]#
- 在ECS中建立数据导出脚本。
- 建立文件ppas_exp_all_tables_to_csv.sh。
vi ppas_exp_all_tables_to_csv.sh
- 将如下文本插入到ppas_exp_all_tables_to_csv.sh脚本。
# ppas_exp_all_tables_to_csv.sh <hostname> <port> <username> <database> # Author: Xiao Shaocong (Scott Siu) # E-Mail: shaocong.xsc@alibaba-inc.com TMP_PATH="/tmp/ppas_tables_$1_$2_$3_$4" mkdir $TMP_PATH if [ $? -ne 0 ] then exit 1; fi echo "select '$1 $2 $3 $4 ' || tablename || ' $TMP_PATH ' || tablename from pg_tables where tableowner='$3' and (schemaname='$3' or schemaname='public');" > /tmp/ppas_tables_$1_$2_$3_$4.sql psql -h $1 -p $2 -U $3 $4 -f /tmp/ppas_tables_$1_$2_$3_$4.sql | head -n -2 | tail -n +3 | awk -F " " '{printf ("psql -h %s -p %s -U %s %s -c \"\\copy %s TO '\''%s/%s'\'' CSV HEADER\"\n",$1,$2,$3,$4,$5,$6,$7)}' | sh
- 建立文件ppas_exp_all_tables_to_csv.sh。
- 给ppas_exp_all_tables_to_csv.sh脚本添加执行权限。
[root@oraclexe ~]# chmod 0755 ppas_exp_all_tables_to_csv.sh
- 在ECS中执行数据导出脚本。
[root@oraclexe ~]# ./ppas_exp_all_tables_to_csv.sh rm-2ze466l5u1k657yyn.ppas.rds.aliyuncs.com 3433 myadmin ora
- 验证导出CSV文件的数据。
[root@oraclexe ~]# cat /tmp/ppas_tables_rm-2ze466l5u1k657yyn.ppas.rds.aliyuncs.com_3433_myadmin_ora/* deptno,dname,loc 10,ACCOUNTING,NEW YORK 20,RESEARCH,DALLAS 30,SALES,CHICAGO 40,OPERATIONS,BOSTON empno,ename,job,mgr,hiredate,sal,comm,deptno 7369,SMITH,CLERK,7902,17-DEC-80 00:00:00,800.00,,20 7499,ALLEN,SALESMAN,7698,20-FEB-81 00:00:00,1600.00,300.00,30 7521,WARD,SALESMAN,7698,22-FEB-81 00:00:00,1250.00,500.00,30 7566,JONES,MANAGER,7839,02-APR-81 00:00:00,2975.00,,20 7654,MARTIN,SALESMAN,7698,28-SEP-81 00:00:00,1250.00,1400.00,30 7698,BLAKE,MANAGER,7839,01-MAY-81 00:00:00,2850.00,,30 7782,CLARK,MANAGER,7839,09-JUN-81 00:00:00,2450.00,,10 7788,SCOTT,ANALYST,7566,19-APR-87 00:00:00,3000.00,,20 7839,KING,PRESIDENT,,17-NOV-81 00:00:00,5000.00,,10 7844,TURNER,SALESMAN,7698,08-SEP-81 00:00:00,1500.00,0.00,30 7876,ADAMS,CLERK,7788,23-MAY-87 00:00:00,1100.00,,20 7900,JAMES,CLERK,7698,03-DEC-81 00:00:00,950.00,,30 7902,FORD,ANALYST,7566,03-DEC-81 00:00:00,3000.00,,20 7934,MILLER,CLERK,7782,23-JAN-82 00:00:00,1300.00,,10 empno,startdate,enddate,job,sal,comm,deptno,chgdesc 7369,17-DEC-80 00:00:00,,CLERK,800.00,,20,New Hire 7499,20-FEB-81 00:00:00,,SALESMAN,1600.00,300.00,30,New Hire 7521,22-FEB-81 00:00:00,,SALESMAN,1250.00,500.00,30,New Hire 7566,02-APR-81 00:00:00,,MANAGER,2975.00,,20,New Hire 7654,28-SEP-81 00:00:00,,SALESMAN,1250.00,1400.00,30,New Hire 7698,01-MAY-81 00:00:00,,MANAGER,2850.00,,30,New Hire 7782,09-JUN-81 00:00:00,,MANAGER,2450.00,,10,New Hire 7788,19-APR-87 00:00:00,12-APR-88 00:00:00,CLERK,1000.00,,20,New Hire 7788,13-APR-88 00:00:00,04-MAY-89 00:00:00,CLERK,1040.00,,20,Raise 7788,05-MAY-90 00:00:00,,ANALYST,3000.00,,20,Promoted to Analyst 7839,17-NOV-81 00:00:00,,PRESIDENT,5000.00,,10,New Hire 7844,08-SEP-81 00:00:00,,SALESMAN,1500.00,0.00,30,New Hire 7876,23-MAY-87 00:00:00,,CLERK,1100.00,,20,New Hire 7900,03-DEC-81 00:00:00,14-JAN-83 00:00:00,CLERK,950.00,,10,New Hire 7900,15-JAN-83 00:00:00,,CLERK,950.00,,30,Changed to Dept 30 7902,03-DEC-81 00:00:00,,ANALYST,3000.00,,20,New Hire 7934,23-JAN-82 00:00:00,,CLERK,1300.00,,10,New Hire
- 将CSV导入到Oracle。
- 方案 1:通过Oracle 的 SQL*Loader进行数据导入,详情请参见Oracle SQL Loader Overview。
- 方案 2:通过Oracle SQL Developer进行数据导入,详情请参见SQL Developer Concepts and Usage。
问题处理
问题
执行数据导出脚本时,提示无法创建目录,如下所示。
[root@oraclexe ~]# ./ppas_exp_all_tables_to_csv.sh rm-2ze466l5u1k657yyn.ppas.rds.aliyuncs.com 3433 myadmin ora mkdir: 无法创建目录"/tmp/ppas_tables_rm-2ze466l5u1k657yyn.ppas.rds.aliyuncs.com_3433_myadmin_ora": 文件已存在
解决方案
删除已存在的目录。
[root@oraclexe ~]# rm -rf /tmp/ppas_tables_rm-2ze466l5u1k657yyn.ppas.rds.aliyuncs.com_3433_myadmin_ora