迁移数据库——rman Duplicate 同机复制数据库

数据库版本是:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
参考:使用RMAN高级应用之Duplicate复制数据库!
http://blog.csdn.net/zq9017197/article/details/6851888

ORACLE_BASE=/u01/app
ORACLE_HOME=/u01/app/oracle
主数据库SID:orcl
复制数据库SID:db

1、创建初始化参数文件,可以根据源数据库的参数文件来修改。
(参数文件非常重要,直接决定了复杂能否成功,注意最后两行。)
[oracle@linux dbs]$ cat initdb.ora 
*.audit_file_dest='/u01/app/admin/db/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'那
*.control_files='/u01/app/oradata/db/controlfile.ora'
*.db_block_size=8192
*.db_create_file_dest=''
*.db_domain=''
*.db_file_multiblock_read_count=128
*.db_name='db'
*.db_recovery_file_dest_size=8589934592
*.db_recovery_file_dest='/u01/app/oradata/db/flash_area'
*.diagnostic_dest='/u01/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbXDB)'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_max_target=536870912
*.memory_target=536870912
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_max_size=419430400
*.undo_tablespace='UNDOTBS1'
*.db_file_name_convert=('/u01/app/oradata','/u01/app/oradata/db')
*.log_file_name_convert=('/u01/app/oradata','/u01/app/oradata/db')

2、创建必要的目录和密码文件:
$ mkdir -p /u01/app/admin/db/adump
$ mkdir -p /u01/app/oradata/db/flash_area
$ orapwd file= '/u01/app/oracle/dbs/ orapwdb'  password=oracle entries=10

3、创建spfile,nomount db实例:
$ export ORACLE_SID=db
SQL> startup nomount
SQL> create spfile from pfile='/u01/app/oracle/dbs/initdb.ora';
SQL> startup force nomount
SQL> show parameter spfile;

4、配置listener.ora和tnsnames.ora
[oracle@linux admin]$ cat listener.ora
SID_LIST_LISTENER =  
  (SID_LIST =  
    (SID_DESC =  
      (GLOBAL_DBNAME = orcl)  
      (SID_NAME = orcl)  
      (ORACLE_HOME = /u01/app/oracle)  
    )  
    (SID_DESC =  
      (GLOBAL_DBNAME = db)  
      (SID_NAME = db)  
      (ORACLE_HOME = /u01/app/oracle)  
    )  
  )  
  
LISTENER =  
  (DESCRIPTION_LIST =  
    (DESCRIPTION =  
      (ADDRESS = (PROTOCOL = TCP)(HOST = linux)(PORT = 1521))  
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))  
    )  
  )  

[oracle@linux admin]$ cat tnsnames.ora 
orcl =  
  (DESCRIPTION =  
    (ADDRESS_LIST =  
      (ADDRESS = (PROTOCOL = TCP)(HOST = linux)(PORT = 1521))  
    )  
    (CONNECT_DATA =  
      (SID = orcl)  
      (SERVER = DEDICATED)  
    )  
  )  
  
db =  
  (DESCRIPTION =  
    (ADDRESS_LIST =  
      (ADDRESS = (PROTOCOL = TCP)(HOST = linux)(PORT = 1521))  
    )  
    (CONNECT_DATA =  
      (SID = db)  
      (SERVER = DEDICATED)  
    )  
  )  
  
EXTPROC_CONNECTION_DATA =  
  (DESCRIPTION =  
    (ADDRESS_LIST =  
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))  
    )  
    (CONNECT_DATA =  
      (SID = PLSExtProc)  
      (PRESENTATION = RO)  
    )  
  )  

$ lsnrctl start

5、open orcl数据库之后,备份数据库:
$ rman target /
RMAN> run {
backup  database;
backup archivelog  all;
backup  current controlfile;
}

6、用rman连接orcl和db数据库实例
$ export ORACLE_SID=orcl
$ rman target sys/oracle@orcl auxiliary sys/oracle@db
RMAN> duplicate target  database  to db;

7、附录
要跳过只读表空间,在执行duplicate命令时指定SKIP READONLY 子句即可。而对于离线表空间,在执行 duplicate命令之前将其置OFFLINE NORMAL 状态即可,RMAN 复制时会跳过只读或离线表空间的数据文件。如果某个表空间即不是readonly 也并非offline,但你就是不想复制,表急,duplicate 还有杀手锏。在执行 duplicate命令时通过SKIP TABLESPACE XXX 子句指定你要跳过的表空间,想跳多少就跳多少,多个表空间的话,中间以,(逗号)分隔即是。

你可能感兴趣的:(迁移数据库——rman Duplicate 同机复制数据库)