9i迁移到12C实施流程
这是一个很古老的数据库,还是9i的版本,业务需求迁移新中心的12C数据库上,当时给了2个小时的迁移时间,中间会停业务
同时业务方提出需要分担读的压于我们的集群全部是3节点,所以自然直接使用service从业务层面分担读写,写集中在
节点1,读在节点2和节点3
1>
我们首先从9i库导出数据,这里只有exp工具可使用,所以并行导出功能无法实现,这里会消耗比较多时间,下面是导出语句
exp bj/password owner=bj file=/gd/bj20210123.dmp log=exp20210123.log
2>
将数据传送到新库德服务器
传数据
scp /gd/bj20210123.dmp 10.1.1.1:/oradata1
3
在新库创建用户并授权
导入之前创建用户并授权
create user bj identified by bj1234;
grant connect ,resource to bj;
grant CREATE VIEW to bj;
grant CREATE SYNONYM to bj;
grant CREATE DATABASE LINK to bj;
grant UNLIMITED TABLESPACE to bj;
grant CREATE PUBLIC DATABASE LINK to bj;
4
在新库导入
imp bj/bj1234 file=/oradata1/bj20210123.dmp log=imp20210123.log
5>
查询对象
对象如下
SQL> select 'alter '||object_type||' '||object_name||' compile;' from user_objects where status='INVALID';
'ALTER'||OBJECT_TYPE||''||OBJECT_NAME||'COMPILE;'
--------------------------------------------------------------------------------
alter VIEW VIEW_GBJBXX_XL compile;
alter VIEW VIEW_USER compile;
alter PROCEDURE RS_TJQKHZ compile;
alter PROCEDURE RS_GBDXY_2 compile;
alter PROCEDURE RM_CHECK compile;
alter PROCEDURE RS_GBDXY compile;
alter PROCEDURE RS_LDBZTJ compile;
alter PROCEDURE RS_TJQKHZ_3_test compile;
alter FUNCTION SPLIT compile;
插曲:由于之前做过导入测试,所以依然有业务连接到数据库,所以当完全删除该用户会抱错,需要先kill这些连接
新库无法删除用户,先断开连接
select 'kill -9 '||spid from v$process where addr in (select paddr from v$session where username='BJ');
用root用户删除
kill -9 79887
6>
对于对象,需要跟业务沟通,如果不需要就直接删除,若需要则重新编译,此时需要分析代码逻辑,比如有的存储过程调用的对象可能没有导入等等
具体问题具体分析吧。
7>分配service
写实例
sqlplus bj/bj1234@10.1.1.1/bj101s
读实例
sqlplus bj/bj1234@10.1.1.1/bj102s
sqlplus bj/bj1234@10.1.1.1/bj103s
8>业务验证
给业务保留导入和导入日志记录,核对数据时可以参考,其他从业务角度验证。
相关文章