最近在搞把自己本地oracle数据库11g(11.2.0.1.0 )拷贝到Linux下的oracle数据库10g(10.2.0.1.0)
之前也有搞过这样的拷贝,当时可能是两个机器的数据库版本一致,所以没有遇到这次这么麻烦。所以今天记录下自己的解决办法,为以后还遇到这种问题就能迎刃而解了。
第一步:在本地使用EXPDP命令把数据导出成dmp文件,并指定导出的版本号为10.2.0.1.0
打开电脑本地cmd命令窗口,以sysdba进入到sqlplus.
1、创建目录:create directory cmpdir as 'd:\cmp\dump';
2、查看管理员目录:select * from dba_directories;看是否创建成功(注意:d:\cmp\dump目录不会自动在你的系统创建,需要自己手动去创建该目录)
3、给数据库cmp用户赋予在指定目录的操作权限
grant read,write on directory
cmpdir to cmp;
4、导出数据,指定version
EXPDP USERID='cmp/cmp@orcl as sysdba' schemas=cmp directory=cmpdir dumpfile=cmp.dmp logfile=test.log version=10.2.0.1.0
执行完成功之后就在你新建的d:\cmp\dump目录下看到cmp.dmp文件
第二步:到Linux下新建一个表空间、用户、给用户赋权限。
登录Linux系统,如果当前用户为root使用命令 su - oracle切换到oracle用户,使用命令sqlplus /nolog,进入sqlplus,再输入conn /as sysdba 以adb进行登录。
1、接下来新建一个表空间、用户、给用户赋权限。
sql如下:
创建表空间:CREATE TABLESPACE cmp DATAFILE '/bidata/oradata/cmp.dbf' SIZE 200M AUTOEXTEND ON EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
创建用户并指定默认表空间:
CREATE USER cmp IDENTIFIED BY cmp DEFAULT TABLESPACE cmp;
给用户赋权:
grant connect,resource to cmp ;
grant unlimited tablespace to cmp ;
grant create database link to cmp ;
grant select any sequence,create materialized view to cmp ;
grant unlimited tablespace to cmp ;//授予不限制的表空间
grant select any table to cmp ;//授予查询任何表
grant create session to cmp ;
2、退出sqlplus,把本地的cmp.dmp文件通过rz命令上传到服务器上的目录(我的是/u01/oracle/temp/marketdmp/temp)
然和上面的一样创建目录create or replace directory cmpdir as '/u01/oracle/temp/marketdmp/temp' ;
赋目录操作权限:grant read,write on directory cmpdir to cmp;
给cmp用户赋权:grant dba to cmp;
导入dmp:impdp cmp/cmp DIRECTORY=cmpdir DUMPFILE=cmp.dmp SCHEMAS=cmp version=10.2.0.1.0;
注意:创建目录是“/”不要写反了"\",和要给给cmp用户赋为dba权限,不然会报
ORA-39002:
invalid operation
ORA-39070: Unable to open the log file.
ORA-29283:invalid file operation
ORA-06512:at "SYS.UIL_FILE",line 536