很多时候我们会涉及到数据库备份与迁移,本章节将介绍Oracle数据库如何迁移至PostgreSQL和AntDB数据库。为了分享给有同样需求的小伙伴,也为了自己之后方便查阅,下面将主要介绍以命令的方式迁移(原文中部分脚本来自一个同事前辈的笔记)。
一、登录oracle数据库
sqlplus 登录:
sqlplus username/'password'@10.19.82.196/testdb
二、Oracle侧对象统计:
select OBJECT_TYPE,count(*) from user_objects group by OBJECT_TYPE order by 2;
OBJECT_TYPE COUNT(*)
TYPE 3
TRIGGER 8
FUNCTION 14
PROCEDURE 24
LOB 152
VIEW 167
SEQUENCE 173
TABLE 335
INDEX 338
查看表大小:
select sum(b.bytes)/1024/1024/1024 as table_size
from user_tables a ,user_segments b
where 1=1
and a.table_name=b.segment_name;
TABLE_SIZE:
.11730957
三、导出表、分区、序列和视图对象
cat > /home/oracle/mvtemp/conf/test_ddl.conf << EOF
ORACLE_HOME /data/oracle/db
ORACLE_DSN dbi:Oracle:host=10.19.82.196;service_name=testdb
ORACLE_USER testdb
ORACLE_PWD testdb123
SCHEMA testdb
TYPE TABLE,PARTITION,SEQUENCE,VIEW
USER_GRANTS 1
DISABLE_SEQUENCE 1
INDEX_RENAMING 0
STOP_ON_ERROR 0
DATA_TYPE NUMBER,DATE:oracle.date
EOF
执行 ora2pg 可以通过 ora2pg --help
获取命令行帮助信息。
// 导出表、分区、序列和视图对象
nohup ora2pg -c /home/oracle/mvtemp/conf/test_ddl.conf -o test_ddl.sql -d > /home/oracle/mvtemp/test_ddl.log 2>&1 &
检查对象:
grep "CREATE TABLE" TABLE_test_ddl.sql|wc -l
grep "PARTITION OF" PARTITION_test_ddl.sql |wc -l
grep "CREATE SEQUENCE" SEQUENCE_test_ddl.sql |wc -l
grep "CREATE OR REPLACE VIEW " VIEW_test_ddl.sql |wc -l
四、导入对象到PostgreSQL或AntDB
在部署PostgreSQL或AntDB数据库的主机上执行如下命令。
psql -p 8432 -d testdb -U testdb -f /home/testdb /ora2pg/TABLE_test_ddl.sql
psql -p 8432 -d testdb -U testdb -f /home/testdb /ora2pg/PARTITION_test_ddl.sql
psql -p 8432 -d testdb -U testdb -f /home/testdb /ora2pg/SEQUENCE_test_ddl.sql
五、导出导入存储过程和函数
导出Oracle原始的存储过程和函数定义,在PostgreSQL或AntDB中直接创建。
#!/bin/bash
# https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_metada.htm#BGBJBFGE
# https://stackoverflow.com/questions/22018804/oracle-sql-developer-4-0-how-to-remove-double-quotes-in-scripts
# https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9534496000346133031
# https://blog.csdn.net/itmyhome1990/article/details/50380718
log_print()
{
echo "--"`date "