注:两台服务器上的oracle版本均为:10.2.0.1.0本人用下列方法没成功,现求成功方法。
(1) 在server01的db1中由sys创建一个表test1,然后执行如下导出命令:
1)C:>SQLPLUS sys/密码 as sysdba
2)SQL>CREATE DIRECTORY ldl_dump AS 'c:\ldl_backup';
3)SQL>GRANT READ,WRITE ON DIRECTORY ldl_dump to system;
4)SQL>host expdp system/密码 directory=ldl_dump dumpfile=ldlfull.dmp full=y
运行结果:成功。(2)先把导出的文件夹'c:\ldl_backup'从服务器1拷到服务器2上并保持文件夹同名,用dca建一个空数据库db1,再执行如下导入指令:
1)C:>SQLPLUS sys/密码 as sysdba
2)SQL>CREATE DIRECTORY ldl_dump AS 'c:\ldl_backup';
3)SQL>GRANT READ,WRITE ON DIRECTORY ldl_dump to system;
4)SQL>host impdp system/密码 directory=dump_dir dumpfile=ldlfull.dmp full=y。
运行结果:成功但提示有很多错。检查发现:在server02的db1中不论在sys用户下,还是在system用户下都找不到表test1,说明没有正确迁移。求高手指教!
(1) 在server01的db1中由sys创建一个表test1,然后执行如下导出命令:
1)C:>SQLPLUS sys/密码 as sysdba
2)SQL>CREATE DIRECTORY ldl_dump AS 'c:\ldl_backup';
3)SQL>GRANT READ,WRITE ON DIRECTORY ldl_dump to system;
4)SQL>host expdp system/密码 directory=ldl_dump dumpfile=ldlfull.dmp full=y
运行结果:成功。(2)先把导出的文件夹'c:\ldl_backup'从服务器1拷到服务器2上并保持文件夹同名,用dca建一个空数据库db1,再执行如下导入指令:
1)C:>SQLPLUS sys/密码 as sysdba
2)SQL>CREATE DIRECTORY ldl_dump AS 'c:\ldl_backup';
3)SQL>GRANT READ,WRITE ON DIRECTORY ldl_dump to system;
4)SQL>host impdp system/密码 directory=dump_dir dumpfile=ldlfull.dmp full=y。
运行结果:成功但提示有很多错。检查发现:在server02的db1中不论在sys用户下,还是在system用户下都找不到表test1,说明没有正确迁移。求高手指教!
在server2上创建init文件,更改init文件和server1的类似,其实也copy过来改一下就行
然后在server2上打开数据库到nomount模式,重建控制文件,然后mount,然后open,
就O了
用RMAN
1.先用RMAN备份一下server1的库
rman target sys/密码@tns nocatalog
RMAN>backup database include current controlfile plus archivelog format='你的路径';
2.在server2上建立相应的OS目录.并将rman的备份片copy到server2的相应目录下,必须和server1的路径一样.
3.建立复制数据库的服务,你是windows,所以可以用
oradim -new -sid db1 -intpwd 密码
4.建立复制数据库的参数文件,你可以在server1上用create pfile from spfile生成一个copy过来改改就行
5.在server2上启动实例
set ORACLE_SID=db1
sqlplus / as sysdba
SQL>startup nomunt
6.在server2上启动listener并在server1上配置tns
7.用RMAN复制
在server1上运行:
rman target sys/密码 auxiliary sys/密码@tns
RMAN>run {
set newname for datafile 1 to '新路径';(如果server1和server2路径完全一样,可以去掉这步)
......
set newname for tempfile 1 to '新路径';
duplicate target database to 'server1的实例名' logfile
'server2的新路径\redo01.log' size 10m,
... redo02.log ...
;
}
然后一切都自动进行了,O了吧,别说我这么讲你也不会!
imp_full_database或dba
emp_full_database或dbaSQL> select * from user_role_privs;USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
SYSTEM AQ_ADMINISTRATOR_ROLE YES YES NO
SYSTEM DBA YES YES NO
SYSTEM MGMT_USER NO YES NO因为system已经有dba的角色,所以可以进行全库导入或导出,但是即使full=y这个参数已经指定了,sys用户的很多对象也不会被导出,主要是很多数据字典之类的和数据库相关的对象.
所以我建议你别用sys用户做测试也是这个原因,用sys用户做测试根本就没意义.
直接拷贝所有datafiles,tempfiles,redo files,parameter file,controlfiles,password files,and listener files
然后oradim新建实例,启动数据库
parameter file 需要改一下
oradim运行后,必须重建controlfiles,然后才能open