我同学 Frank 尝试通过修改数据字典表来达到修改 Schema Name 的目的,但是引出了一大堆问题,详看这两博客:
Change Schema Name & ORA-01031: insufficient privileges (on SYS.DMBS_SESSION), ORA-28100, etc...
Change Schema Name (II)
以往我会通过 exp/imp 或者 expdp/impdp 完成类似的数据迁移,但是如果数量比较大,导出的可能性比较低,如果仅为修改一个Schema Name 而去导入导出2~3T的数据,那简直就是又一出“一个馒头引发的血案”。
考虑到以上问题,我尝试使用可传输表空间来完成这项任务。
创建测试环境
为 frank 建立用户和相应的表空间:
create tablespace frank
datafile
'/u02/oradata/ora10g/ORA10G/ora10g/frank01.dbf' size 20M autoextend on
logging
segment space management auto
extent management local;
create user frank
identified by frank
default tablespace frank;
grant connect to frank;
grant resource to frank;
revoke unlimited tablespace from frank;
alter user frank quota unlimited on frank;
使用用户 frank 进行登录,然后创建一些对象,例如表 objects :
create table objects as select * from all_objects
insert into objects select * from objects ;
insert into objects select * from objects ;
insert into objects select * from objects ;
insert into objects select * from objects ;
commit;
现在 objects 这个表有“很多很多”数据,移动起来“非常非常”困难,但我又必须修改 frank 这个 Schema Name 为 killkill
导出成可传输表空间
我选用数据泵配合可传输表空间,所以需要创建一个 directory 出来:
create or replace directory DATAPUMP as '/home/ora10g/datapump';
grant read,write on directory DATAPUMP to public ;
将表空间 frank 设为只读:
alter tablespace frank read only;
在命令行将表空间 frank “导出”,其实是导出数据字典,这个文件很小。