Tablespace 迁移

1 目标库的准备
 1.1 安装目标库的OS及Oracle(要和原库一样版本,并上和原库一样的Patch)
 1.2 修改目标库的初始化参数DB_FILES=2048
 1.3 在目标库 nomount状态create control file(修改maxdatafiles为2048)
 1.4 Shutdown 目标库,再重新Startup
 1.5 给目标库的TEMP表空间增加数据文件
 1.6 在目标库上创建User,名称,权限要和原库相同(对于未迁移过来的tablespace的权限不要设)
 1.7 Copy原库的tnsnames.ora到目标库,覆盖目标库的tnsnames.ora
 1.8 在目标库创建和原库相同的DB_LINK
2 准备原库
 2.1 利用工具生成将要移动的user所拥有的object的 生成语句,比如某用户Create FUNCTION,VIEW,PROCEDURE,PACKAGE,package body,job的SQL object.sql
 2.2 用方法生成要迁移的table及列COMMENT生成语句COMMENT.sql,如COMMENT ON COLUMN its.ACTION_INPUT.SERIES_NO is'测试';
 2.3 以sys身份进入原库,检查要迁移的tablespace是否通过自包含检查,举例如下:
     例1:
     要迁移的tablespace 名称为tabs1,tabs2,tabs3
     SQL>exec dbms_tts.TRANSPORT_SET_CHECK('tabs1,tabs2,tabs3',true);
     SQL>select * from transport_set_violations;
     如果返回来的结果为空,则表示附和要求,如果找到不符合要求的物件,处理掉它。可以将这些物件移动到合适的tablespace.然后再次验证,直到全部解决。
3 执行tablespace迁移动作
 3.1 以 SysDBA权限连接原库,将要搬移的tablespace状态改为read only.
 3.2 在原库执行EXP,举例如下
     exp 'sys/oracle@orcl as sysdba' tablespaces=(tabs1,tabs2,tabs3) transport_tablespace=y file=mydump.dmp log=exp.log statistics=none constraints=y grants=y triggers=y
 3.3 将tabs1,tabs2,tabs3 tablespace所属的数据文件复制到目标库相应的位置
 3.4 将导出的DMP文件复制到目标库
 3.5 在目标库执行IMP,举例如下
     imp 'sys/oracle@orcl as sysdba' tablespaces=(tabs1,tabs2,tabs3) transport_tablespace=y file=mydump.dmp log=imp.log statistics=none constraints=y grants=y parfile=par.txt
     par.txt如下:
     datafiles=(d:\orcl\tabs1\tabs101.dbf,d:\orcl\tabs1\tabs102.dbf,d:\orcl\tabs2\tabs201.dbf,d:\orcl\tabs3\tabs301.dbf)
 3.6 查看日志是否有异常
 3.7 在目表库,将迁移过来的tablespace改为 read write.
 3.8 在目标库运行2.1生成的object.sql创建FUNCTION,VIEW,PROCEDURE,PACKAGE,package body,job等(一些object未导过来,只有trigger成功导过来了,或许我的方法有纰漏)
 3.9 在目标库运行2.2COMMENT.sql(主要是tablespace transport过来之后,COMMENT是乱码,所以要重建,也可能是我的方法有纰漏)
 3.10 对比两个库的对象是否相同,补充差异部分
 3.11请人员做一次全程测试
 3.12更改IP,正式上线
 

原文地址:https://www.cnblogs.com/kevinsun/p/1025525.html