Oracle 复制表空间 (imp/exp)

 A。同数据库拷贝表空间:异名同数据

前言:ORACLE 11G EM控制台提供的传输表空间,是指在到另一个数据库上拷贝一份源数据库表空间,而非在同个数据库中复制表空间。现在大致步骤记录下并简单说明:

  准备工作:

                 设置此次会话字符集: export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK .

                 将源数据库的表空间设置为只读模式: alter tablespace sandbox2 read only;

1.exp "'/ as sysdba'" file=/tmp/exp/exp_sandbox.dmp log=/tmp/exp/exp.log owner=sandbox2
2.create tablespace sandbox3  datafile '... / sandbox3_01.dbf'  size 100m;
3.create user   sandbox3    identified by  sandbox3   default tablespace sandbox3  temporary tablespace temp;
4.grant connect,resource to sandbox3;  //resource限额为unlimited
5.revoke unlimited tablespace from sandbox3;  //回收user sandbox3的unlimited tablespace限额(对所有表空间)
6.alter user sandbox3 quota 0 on sandbox2;   //对sandbox2的限额为0 (没有权限)
7.alter user sandbox3 quota unlimited on sandbox3;  //对sandbox3的限额为无限制

    -------------这几部操作的关键是通过用户的关系,把用户的默认表空间设置修改,重新配置。这样 sandbox3用户 只有对sandbox3表空间的权限,而对sandbox2为0.预防了冲突
8.imp "'/ as sysdba'" file=/tmp/exp/exp_sandbox.dmp fromuser=sandbox2 touser=sandbox3

   --------通过fromuser 和touser 将sandbox2用户下的表空间 赋给sandbox3

B。不同数据库拷贝表空间:同名同数据

 前言:若使用ORACLE 11G EM控制台自带的传输表空间,需满足其操作系统的要求。我要做从linux 32位传输到win 64上就通过不了了。所以不能使用图形界面(内核是数据泵)的前提下,使用较原始的方法:imp /exp

   准备工作:

            检查两个数据库的字符集是否一致:select * from nls_database_parameters;  //不一致的话最好设置成一致的否则麻烦很多

            设置此次会话字符集: export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK  //只要和源数据库的一致即可

             将源数据库的表空间设置为只读模式: alter tablespace sandbox2 read only;

 

 1. exp "'/ as sysdba'" file=/tmp/myswserp.dmp log=/tmp/myswserp.log owner=swserp;

  2.create tablespace swserp  datafile 'D:\app\swsportadmin\oradata\orcl\swserp_01.dbf'  size 200m;

  3.create user   swserp    identified by  swserp   default tablespace swserp  temporary tablespace temp;

  4.grant connect,resource to swserp;  //如果需要查报表可再加上 select any dictionary  需要创建视图加上create view

  原来第5,6步:revoke unlimited tablespace from sandbox3;  

                           alter user sandbox3 quota 0 on sandbox2       导到另外一个数据库时不用加

   5.alter user swserp quota unlimited on swserp; 

   6.imp "'/ as sysdba'" file=d:\myswserp.dmp full=y   

   大功告成

 

你可能感兴趣的:(oracle,sandbox,数据库,user,dictionary,parameters,Oracle相关)