oracle根据生产库建立测试库,如何使用RMAN创建测试库(duplicate)

截图是个体力活,把图片弄到文章里又是一通折腾,俺是坚定地纯文字版!

场景: 2台虚拟机,一台有数据库ORCL,另一台只装了数据库软件

要求: 将ORCL 迁移到另一台上,不允许宕机

约定:采用最简单的相同路径设置

生产库: 192.168.0.1

oracle linux 5.8 64 bit

ORACLE_BASE: /u01/app/oracle

ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1

db_block_size: 8k

已归档

实例 orcl

辅助库: 192.168.0.2

oracle solaris 10 64 bit

ORACLE_BASE: /u01/app/oracle

ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1

实例 无

0 检查生产库是否归档

SQL> archive log list;

如未归档,执行命令

SQL> shutdown immediate ;

SQL> startup mount ;

SQL> ALTER DATABASE ARCHIVELOG;

SQL> ALTER DATABASE OPEN;

1 在辅助库机器上创建密钥文件

$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=3

2 配置初始化参数文件,直接COPY生产库的参数文件到辅助库机器上

辅助库机器上执行:

$ scp [email protected]:/u01/app/oracle/product/10.2.0/db_1/dbs/spfileorcl.ora /u01/app/oracle/product/10.2.0/db_1/dbs

$ vi /u01/app/oracle/product/10.2.0/db_1/dbs/spfileorcl.ora

orcl.__db_cache_size=176160768

orcl.__java_pool_size=4194304

orcl.__large_pool_size=4194304

orcl.__shared_pool_size=92274688

orcl.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'

*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'

*.compatible='10.2.0.1.0'

*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/oradata/orcl/control02.ctl','/u01/app/oracle/oradata/orcl/control03.ctl'

*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='orcl'

*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'

*.db_recovery_file_dest_size=2147483648

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.job_queue_processes=10

*.log_archive_dest_1='location=/u01/app/oracle/archive'

*.log_archive_format='arch_%t_%s_%r.arc'

*.open_cursors=300

*.pga_aggregate_target=92274688

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=278921216

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'

3 创建相关目录

出现在spfile中的目录都要存在

$ mkdir -p /u01/app/oracle/oradata/orcl

$ mkdir -p /u01/app/oracle/admin/orcl/adump

$ mkdir -p /u01/app/oracle/admin/orcl/bdump

$ mkdir -p /u01/app/oracle/admin/orcl/cdump

$ mkdir -p /u01/app/oracle/admin/orcl/udump

$ mkdir -p /u01/app/oracle/flash_recovery_area

$ mkdir -p /u01/app/oracle/archive

4 启动辅助库到NOMOUNT状态

$ sqlplus sys/oracle as sysdba

SQL> startup nomount;

5 配置监听和网络服务名,并启动监听

在辅助库机器上生成listener.ora,内容来自本机listener.ora中的相关内容

$ vi $ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PL***tProc)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = orcl)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(SID_NAME = orcl)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = caral2)(PORT = 1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

生成辅助库机器上的tnsnames.ora文件,内容如下

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

AUX =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PL***tProc)

(PRESENTATION = RO)

)

)

启动辅助库机器上的监听

$ lsnrctl start

测试辅助库远程登录

$ sqlplus sys/oracle@aux as sysdba

修改生产机的tnsnames.ora文件,添加内容

$ vi $ORACLE_HOME/network/admin/tnsnames.ora

AUX =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

生产机上测试远程登录辅助库

$ lsnrctl stop

$ lsnrctl start

$ sqlplus sys/oracle@aux as sysdba

6 在生产机数据库OPEN状态下,备份数据库

为了后期验证,建一个测试表

SQL> CREATE TABLE scott.test AS SELECT * FROM scott.emp;

SQL> UPDATE scott.test

SET SAL =1;

SQL> commit;

$ mkdir -p /u01/data/aux

$ rman target /

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/data/aux/ctl_%F';

RMAN> run {

allocate channel c1 type disk;

backup database format '/u01/data/aux/db_%U';

backup archivelog all delete all input format '/u01/data/aux/arch_%U';

release channel c1;

}

7 将生产库的备份文件拷贝到辅助库

$ mkdir -p /u01/data/aux

$ scp [email protected]:/u01/data/aux/* /u01/data/aux

8 开始duplicate

注意: 执行本步骤前,如果有其他与辅助库的连接,切记断开!否则duplicate的命令会跟我之前一样一直挂在

contents of Memory Script:

{

shutdown clone;

startup clone nomount ;

}

executing Memory Script

那儿摆POSE!害俺傻乎乎地为此折腾了好几遍操作!

在生产机执行下列命令

$ rman target sys/oracle@orcl auxiliary sys/oracle@aux

RMAN> duplicate target database to orcl nofilenamecheck;

9 验证一下

辅助库上执行:

$ sqlplus sys/oracle as sysdba

SQL> SELECT sal FROM scott.test GROUP BY sal;

至此OK!

阅读(645) | 评论(0) | 转发(0) |

你可能感兴趣的:(oracle根据生产库建立测试库,如何使用RMAN创建测试库(duplicate))