ORACLE IMP和EXP的使用实验

Exp工具可进行导出,imp工具进行导入。

实验:

pod库上创建一个用户a1,创建一个表空间dd,把这个表空间设置成a1的默认表空间。

然后把表空间dd导出。在另一个库emrep中,创建相同的用户a1,将表空间dd再导入。

SQL>conn sys/oracle@pod as sysdba

SQL>create tablespace dd datafile ‘/u01/app/oracle/oradata/pod/dd.sbf’ size 10M;

SQL>create user a1 identified by a1 default tablespace dd;   dd变成a1的默认表空间

SQL>grant connect,resource to a1;

SQL>create table a1.e as select * from scott.emp;   在表空间下存个表

在导出表空间的时候,我们导出的不是数据,而是一些存于system表空间的元数据,我们要先把表空间置于只读状态:

SQL>alter tablespace dd read only;

下面我们开始导出:

$exp –help   在开始之前我们可以先看一看命令菜单:

我们开始:

$ exp \”sys/oracle@pod as sysdba\” file=/u01/app/dd.emp transport_tablespace  tablespaces=dd

注意:这里我写错了,transport_tablespace我没写值,应该是transport_tablespace=y,也为以后导入的时候报错埋下了伏笔,但这里也执行成功了,成功生成了导出文件。bb

导出之后表空间就可以置于读写状态了。

SQL>alter tablespace dd read write;

在原库中表空间的schema 在目标库中一定要存在,就是要找到,哪些用户把dd表空间作为你的默认表空间,要找出来:

SQL>select username from dba_users where default_tablespace=’DD’

还要找哪些用户建的表在dd表空间上。

SQL>select owner from dba_tables where tablespace_name=’DD’;

还有哪些用户建的索引建在dd表空间上:

SQL>select owner from dba_indexes where tablespace_name=’DD’;

查找对象:先找出表空间ddfile_id

SQL>select file#,name from v$datafile;找到之后记下;

SQL>select owner from dba_objects where data_object_id=10;

就找到有没有其他用户。

总结:dba_users,dba_tables,dba_indexes 找这三个。

所以我们在目标数据库只需要建立a1用户,密码可以不同:

SQL>conn sys/oracle@emrep as sysdba

SQL>create user a1 identified by a1;

SQL>grant connect,resource to a1;

我们要把DD的数据文件,和导出的元数据文件dd.emp文件都挪到目标库的机器上。

这里我们可以用scp:
我们开始导入:

$imp \”sys/oracle@emrep as sysdba\” file=/u01/app/oracle/oradata/emrep/dd.emp transport_tablespace=y tablespaces=dd  datafiles=/u01/app/oracle/oradata/emre
p/dd.sbf’
bb

这里就开始报错了。这个说导入模式和导出文件不一样,我一开始是以为两个库的字符集不同,通过nls_database_parameters查看后发现字符集相同,没有问题;后来发现原来是导出的时候transport_tablespace那个参数我空着来着。

马上,我就在原库又把表空间置于只读模式,又重新生成了一份元数据文件,这次我加了Y。再次执行:

$imp \”sys/oracle@emrep as sysdba\” file=/u01/app/oracle/oradata/emrep/dd.emp transport_tablespace=y  tablespaces=dd  datafiles=/u01/app/oracle/oradata/emrep/dd.sbf’ 
注意:这里的路径一定要用绝对路径,千万不要用相对路径,要不然会报错。
bb

再一次报错,我分析是重新导入的元数据比较新,而用的数据文件 还是老的数据文件,两个不同步,所以我又把datafile文件重新scp了一下。注意:这时我的表空间还是只读模式,我又把这个最新的表空间文件SCP到了EMREP库,然后才把它置于读写模式:

这次我们再执行:

$imp \”sys/oracle@emrep as sysdba\” file=/u01/app/oracle/oradata/emrep/dd.emp transport_tablespace=y  tablespaces=dd  datafiles=/u01/app/oracle/oradata/emrep/dd.sbf’

bb

下面介绍exp/imp的关于用户的对象的导入和导出:

1.       只导出用户的一张表。

2.       把一个用户下的所有对象导出。

3.       把一个用户下的所有对象导入到另外一个用户里。

我们建立两个用户u1,u2, u1上面建立两个表t1,t2,在u2上建立两个表p1p2.

SQL>conn / as sysdba

SQL>create user u1 identified by u1;

SQL>grant resource,connect to u1;

SQL>conn u1/u1

SQL>create table t1(id number,name varchar2(20);

SQL>insert into t1 values(1,’wang’)

SQL>commit;

SQL>create table t2(id number,name varchar2(20);

SQL>insert into t2 values(2,’you’)

SQL>commit;

SQL>create user u2 identified by u2;

SQL>grant resource,connect to u2;

SQL>conn u2/u2

SQL>create table p1(id number,name varchar2(20);

SQL>insert into p1values(1,’oo’)

SQL>commit;

1.下面我们来做把u1下的表t1导出,文件是u1.dmp.

$exp u1/u1 file=u1.dmp tables=t1


bb

2.我们来做把u1用户下的所有的对象都导出,导出之后文件是u1.alldmp

$exp u1/u1 file=u1.alldmp owner=u1

bb


bb


bb



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25116248/viewspace-2122538/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25116248/viewspace-2122538/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值