数据库版本是: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;
}
$ 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 子句指定你要跳过的表空间,想跳多少就跳多少,多个表空间的话,中间以,(逗号)分隔即是。