Oracle11g数据库导入Oracle10g数据库操作笔记

来源:互联网 发布:java io异常 编辑:程序博客网 时间:2024/05/21 23:31

Oracle11g数据库导入Oracle10g数据库操作笔记

 

 

          用exp、imp命令z时进行11g备份,导入10g的时候会抛错:不是有效的导出文件,头部验证失败;未成功终止导入。

 

       我今天就遇到了这种情况,搭建测试环境时,有一个项目使用的是11g数据库,而测试机是10g的数据库,按正常的思路走下来,报错:未成功终止导入,赶紧上网搜了一下,原来是版本不同的问题;

 

 

下面我把导入操作的全过程记录下来,自己做了一个知识的记录,同时也希望可以方便有需要的朋友!

 

一、在11g服务器上,使用expdp命令备份数据

1、创建DIRECTORY
createdirectory expdp_dir as'D:\oracle\dir_dp';
2、授权
grantread,write on directory expdp_dirto wzprp_dbuser;--注:wzprp_dbuser为库的owner用户
--查看目录及权限
SELECTprivilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directoriesd
 WHERE t.table_name(+) = d.directory_name ORDERBY 2, 1;


3、执行导出


EXPDPUSERID='sys/sys@wzprp as sysdba' schemas=wzprp_dbuser directory=expdp_dirdumpfile=wzprp_10g.dmp logfile=wzprp_10g.log version=10.2.0.3.0

 

 

其 中,红色文字部分是根据需要改写的地方。例如我的sys密码是sys,数据库sid是daggis,要导出的用户名是oa,要导入到10.2.0.1.0 版本的Oracle数据库中去。aa.dmp和aa.log将会在11g的expdp_dir目录中(D:\oracle\dir_dp)生成,于是wzprp_10g.dmp和wzprp_10g.log将 会在D:\oracle\dir_dp目录下被生成。(如果不执行第一步和第二步,在第三步脚本中directory=DATA_PUMP_DIR,则wzprp_10g.dmp和wzprp_10g.log将 会在D:\oracle/admin/wzprp/dpdump/目录下被生成。见第二步截图中的兰色下划线标注)

 

 

二、在10g服务器上,使用impdp命令恢复数据

 

步骤:1.建库2.建表空间3.建用户并授权4.将wzprp_10g.dmp和wzprp_10g.log拷贝到10g的directory=(指定的目录)目录下5.impdp导入数据库

1、建库:是在database configuration assistant 中直接新建一个数据库(实例)。

2、建表空间:create tablespace wzprptest datafile'D:\oracle\product\10.2.0\oradata\orcl\wzprptest.dbf' size 400m autoextend on next 20m online;

3、建用户:

create user wzprptest identified bywzprptest;

授权:

Alter user wzprptest default tablespace wzprptest quota unlimited on wzprptest;
grant create session to wzprptest;
grant connect to wzprptest;
grant connect, resource, dba to wzprptest;
grant create table to wzprptest;
grant create view to wzprptest;
grant create trigger to wzprptest;
grant select any table to wzprptest;
grant create sequence to wzprptest;
grant create procedure to wzprptest;
grant create role to wzprptest;
grant create type to wzprptest;
grant GRANT ANY PRIVILEGE to wzprptest;

 

4、导入:首先测试机中10g查询目录与权限:

--查看目录及权限
SELECTprivilege, directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directoriesd
 WHERE t.table_name(+) = d.directory_name ORDERBY 2, 1;

如果在导入时directory=DATA_PUMP_DIR,则检查上述截图中DATA_PUMP_DIR对应的路径指向的目录是否存在,如果该目录不存在,在导入时会报错:

ORA-39001: 参数值无效
ORA-39000:转储文件说明错误
ORA-31640:无法打开要读取的转储文件 "D:\p\dag.dmp"
ORA-27041:无法打开文件
OSD-04002:无法打开文件
O/S-Error:(OS 2) 系统找不到指定的文件。

如果directory=新建的目录名(expdp_dir),则执行创建DIRECTORY、授权:

1、创建DIRECTORY
createdirectory expdp_dir as 'D:\oracle\dir_dp';
2、授权
grantread,write on directory expdp_dirtowzprp_dbuser; --注:wzprp_dbuser为要导入的库的owner用户

将wzprp_10g.dmp和wzprp_10g.log拷贝到10g的directory=(指定的目录)目录下,导入时directory=DATA_PUMP_DIR,则拷贝到D:\oracle/admin/wzprp/dpdump如果导入时directory=expdp_dir则拷贝到D:\oracle\dir_dp目录

3、执行导入

 

 

IMPDP USERID='sys/sys@wzprptest as sysdba' schemas=wzprp_dbuser  directory=expdp_dir dumpfile=wzprp_10g.dmp logfile=wzprp_10g.log version=10.2.0.3.0

 

如果导出时的库的owner用户名为wzprp_dbuser,导入时的库的owner用户名wzprptest,上述导入命令则应修正schemas

IMPDP USERID='sys/sys@wzprptest as sysdba'remap_schemas=wzprp_dbuser:wzprptest directory=expdp_dir dumpfile=wzprp_10g.dmp logfile=wzprp_10g.log version=10.2.0.3.0

到这里为止,所有的操作都完成了,终于看到了久违的消息:操作完成!

上面的命令行中,红色与蓝色部分是根据需要大家根据实际情况改写的地方。例如我的sys密码是sys,数据库sid是daggis,要导入用户名为oa,要导入到10.2.0.1.0版本的Oracle数据库中去。dag.log将会在10g的dpdump目录中生成。

      最后有一个命令查看原对象用户总数,大家可以根据需要进行验证,在导出数据库的机器运行一次,在导入数据库后的机器运行一次,看看结果是否一样:

 sql>select count(*) from dba_objects where owner in('wangou','sup','qishun');

呵呵,上面就是我操作的全部过程,如果大家有更好的办法完成,请记得共享哦!大家互相学习,一起进步!

 

0 0