ITPub博客

首页 > 数据库 > Oracle > ORACLE IMP和EXP的使用实验

ORACLE IMP和EXP的使用实验

原创 Oracle 作者:wangyiou1988 时间:2016-07-25 23:40:38 0 删除 编辑

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,也为以后导入的时候报错埋下了伏笔,但这里也执行成功了,成功生成了导出文件。

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

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’

这里就开始报错了。这个说导入模式和导出文件不一样,我一开始是以为两个库的字符集不同,通过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’ 
注意:这里的路径一定要用绝对路径,千万不要用相对路径,要不然会报错。

再一次报错,我分析是重新导入的元数据比较新,而用的数据文件 还是老的数据文件,两个不同步,所以我又把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’


下面介绍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


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

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








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

请登录后发表评论 登录
全部评论

注册时间:2010-12-21

  • 博文量
    91
  • 访问量
    1203765