## page was renamed from désert/work/QH-tzdb-Restore = TZDB RAC数据库迁移至新的NEWRAC TZDB = <> = 环境信息 = * NBU Server : nbu-wg.qhlhfund.com * 源主机: 10.0.10.111-112 / TZDB RAC (RHEL6.5, Oracle database 11.2.0.4) * 目标主机: 10.0.10.151-152 / NEWTZDB RAC (RHEL7.5, Oracle database 11.2.0.4) * DBID='''4092109955''' '''注:DBID提前记录并修改为对应值''' = 环境准备 = == requirements == I. Successful Netbackup backup of set. I. Same version of database. I. Record Source DBID/DATAFILE/TABLESPACE. I. Install database software only on Destination client. I. Install Netbackup client software on Destination client. '''请确保数据库主机和应用服务器的网络配置是正确的''' == 清除现有tzdb相关数据库配置 == 确认新的RAC环境演练测试数据库tzdb是否还需要, 如果不需要则drop之. SSH 使用oracle用户登录目标主机10.0.10.151 === Drop tzdb数据库 === 1. 停止所有实例 {{{ $ srvctl stop database -d tzdb }}} 2. 在目标数据库中关闭cluster模式. {{{ $ export ORACLE_SID=tzdb1 $ sqlplus as sysdba SQL> startup nomount SQL> alter system set CLUSTER_DATABASE=FALSE scope=spfile; SQL> shutdown immediate }}} 3. 启动至restrict模式. {{{ $ sqlplus as sysdba SQL> startup mount restrict }}} 4. 确认状态 {{{ SQL> SELECT logins,parallel FROM v$instance; LOGINS PARALLEL ---------------- ------------------- RESTRICTED NO }}} 5. Drop the database {{{ $ rman target / RMAN> drop database including backups; }}} === 在crs中清除tzdb配置 === {{{ $ /u01/grid/app/11.2.0/bin/srvctl remove database -d tzdb }}} == 准备pfile文件以适用单实例环境 == SSH使用oracle用户登录源数据库主机10.0.10.111 {{{ $ sqlplus / as sysdba SQL> create pfile='/tmp/tzdb.pfile' from spfile; }}} === 修改相关参数 === SSH 使用oracle用户登录目标主机10.0.10.151 {{{ export ORACLE_SID=tzdb1 cat > $ORACLE_HOME/dbs/init$ORACLE_SID.ora <<"EOF" *.__db_cache_size=30786325577 *.__java_pool_size=469762048 *.__large_pool_size=67108864 *.__oracle_base='/u01/oracle/app'#ORACLE_BASE set from environment *.__pga_aggregate_target=32963873996 *.__sga_target=76879914598 *.__shared_io_pool_size=0 *.__shared_pool_size=4764729344 *.__streams_pool_size=134217728 *.audit_file_dest='/u01/oracle/app/admin/tzdb1/adump' *.audit_sys_operations=TRUE *.audit_trail='DB','EXTENDED' *.cluster_database=false *.compatible='11.2.0.4.0' *.control_files='+DATA/tzdb/controlfile/current1','+TZ_RECO/tzdb/controlfile/current2' *.db_block_size=8192 *.db_create_file_dest='+DATA' *.db_domain='' *.db_name='tzdb' *.db_unique_name='tzdb' *.db_recovery_file_dest='+TZ_RECO' *.db_recovery_file_dest_size=192742891520 *.db_securefile='PERMITTED' *.deferred_segment_creation=FALSE *.diagnostic_dest='/u01/oracle/app' *.dispatchers='' *.fal_client='TZDB' *.fal_server='TZDBSTB' *.log_archive_config='dg_config=(tzdb, tzdbstb)' *.log_archive_dest_2='service=tzdbstb async valid_for=(online_logfiles,primary_role) db_unique_name=tzdbstb' *.log_archive_dest_state_2='ENABLE' *.log_archive_max_processes=30 *.nls_language='SIMPLIFIED CHINESE' *.nls_territory='CHINA' *.open_cursors=3000 *.pga_aggregate_target=32963873996 *.processes=3000 *.remote_listener='tzrac-scan:1521' *.remote_login_passwordfile='exclusive' *.resource_limit=TRUE *.session_cached_cursors=500 *.sessions=3305 *.sga_max_size=76879914598 *.sga_target=76879914598 *.standby_file_management='AUTO' *.thread=1 *.undo_retention=14400 *.undo_tablespace='UNDOTBS1' EOF }}} == 创建相关目录 == SSH 使用oracle用户登录目标主机10.0.10.151 如果权限不足, 则需要切換为root用戶執行 {{{ $ mkdir -pv /u01/oracle/app/admin/tzdb1/adump }}} == 创建orapwd文件 == SSH 使用oracle用户登录目标主机10.0.10.151-152 在两个节点中执行. {{{ $ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID entries=10 }}} = 迁移实施 = 如无特别说明, 以下迁移实施的操作都是在目标主机完成的. 即: 通过SSH客户端并使用oracle用户登录目标主机10.0.10.151 == 列出备份集 == 登录'''NBU Server'''或'''目标主机''', 列出备份集, 找到对应的控制文件 {{{ $ /usr/openv/netbackup/bin/bplist -C TZDB_4092109955 -t 4 -R -l / | head -30 }}} 比如最新的控制文件为: /ctrl_dTZDB_uht1s91i7_s20029_p1_t1136952903 == 恢复 controlfile == 将controlfile替换为上一步中所列出的目标控制文件. {{{ rman target / nocatalog <<"EOF" spool log to Restore-Controlfile.log SET DBID=4092109955 startup nomount; RUN { ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; send 'NB_ORA_CLIENT=TZDB_4092109955'; send 'NB_ORA_SERV=nbu-wg.qhlhfund.com'; restore controlfile from '/ctrl_dTZDB_uht1s91i7_s20029_p1_t1136952903'; ## 修改为实际的控制文件 ALTER DATABASE MOUNT; RELEASE CHANNEL ch00; } spool log off EOF }}} == 查看备份的归档 == # Do a SET UNTIL to prevent recovery of the online logs {{{ RMAN> list backup of archivelog all; }}} 获取 until sequence + 1 set until sequence 33913 thread 2; == 目标主机-还原&恢复验证(仅验证,可选) == * 注: 真正执行恢复的时候可以不用运行该步骤, 因为在正式迁移之前已经验证过了. 本数据库测试时的restore&recover时间为2小时左右. 主要作用为验证恢复是否可用,恢复时间预估等,执行以下脚本 {{{ rman target / nocatalog log=/home/oracle/Restore_preview-validate_$ORACLE_SID_$(date +%F_%H:%M).log<<"EOF" RUN { ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; send 'NB_ORA_CLIENT=TZDB_4092109955'; send 'NB_ORA_SERV=nbu-wg.qhlhfund.com'; set until sequence 33913 thread 2; restore database preview; restore database validate; RELEASE CHANNEL ch00; } EOF }}} == restore database == {{{ rman target / nocatalog log=/home/oracle/Restore_$ORACLE_SID_$(date +%F_%H:%M).log<<"EOF" RUN { ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; send 'NB_ORA_CLIENT=TZDB_4092109955'; send 'NB_ORA_SERV=nbu-wg.qhlhfund.com'; set until sequence 33913 thread 2; restore database; RELEASE CHANNEL ch00; } EOF }}} === 手动copy asm磁盘中的归档日志至目标主机(可选) === * 如果是直接停机备份/迁移则不需要此步骤. SSH 使用grid用户登录源主机10.0.10.111, ASM copy archivelog FROM ASM to LOCAL 1. 创建用于存放归档的目录 {{{ $ mkdir ~/$(date +%Y_%m_%d) $ chown grid:oinstall ~/$(date +%Y_%m_%d) }}} 2. 从ASM磁盘组中复制归档至以上目录 {{{ for i in $(asmcmd ls RECO/TZDB/ARCHIVELOG/$(date +%Y_%m_%d)); do asmcmd cp +TZ_RECO/TZDB/ARCHIVELOG/$(date +%Y_%m_%d)/$i ~/$(date +%Y_%m_%d) done }}} 3. 复制归档日志到目标主机 {{{ scp -r /dbbak_exp_run/$(date +%Y_%m_%d) oracle@10.0.10.151:/dbbak_exp_run/$(date +%Y_%m_%d) }}} == recover database == {{{ rman target / nocatalog log=/home/oracle/Recover_$ORACLE_SID_$(date +%F_%H:%M).log<<"EOF" RUN { ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; ALLOCATE CHANNEL ch02 TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/usr/openv/netbackup/bin/libobk.so64'; send 'NB_ORA_CLIENT=TZDB_4092109955'; send 'NB_ORA_SERV=nbu-wg.qhlhfund.com'; recover database until sequence 33913 thread 2; RELEASE CHANNEL ch00; RELEASE CHANNEL ch01; RELEASE CHANNEL ch02; } EOF }}} === 恢复新的归档(可选) === * 如果是直接停机备份/迁移则不需要此步骤. $ rman target / {{{ catalog start with '/dbbak_exp_run/$(date +%Y_%m_%d)'; crosscheck backupset; recover database; }}} 查看并修复遇到的问题. 直到没有报错, 则执行下一步. == 打开数据库 == 目标主机-打开数据库 {{{ SQL> alter database open resetlogs; }}} 如无报错则关闭数据库 {{{ SQL> shutdown immediate }}} == 在pfile中增加cluster相关参数 == {{{ $ cp -v $ORACLE_HOME/dbs/init$ORACLE_SID.ora{,.bak} $ vim $ORACLE_HOME/dbs/init$ORACLE_SID.ora }}} 编辑文件修改为如下内容: {{{ *.__db_cache_size=30786325577 *.__java_pool_size=469762048 *.__large_pool_size=67108864 *.__oracle_base='/u01/oracle/app'#ORACLE_BASE set from environment *.__pga_aggregate_target=32963873996 *.__sga_target=76879914598 *.__shared_io_pool_size=0 *.__shared_pool_size=4764729344 *.__streams_pool_size=134217728 *.audit_file_dest='/u01/oracle/app/admin/tzdb1/adump' *.audit_sys_operations=TRUE *.audit_trail='DB','EXTENDED' *.compatible='11.2.0.4.0' *.control_files='+DATA/tzdb/controlfile/current1','+TZ_RECO/tzdb/controlfile/current2' *.db_block_size=8192 *.db_create_file_dest='+DATA' *.db_domain='' *.db_name='tzdb' *.db_unique_name='tzdb' *.db_recovery_file_dest='+TZ_RECO' *.db_recovery_file_dest_size=192742891520 *.db_securefile='PERMITTED' *.deferred_segment_creation=FALSE *.diagnostic_dest='/u01/oracle/app' *.dispatchers='' *.fal_client='TZDB' *.fal_server='TZDBSTB' *.log_archive_config='dg_config=(tzdb, tzdbstb)' *.log_archive_dest_2='service=tzdbstb async valid_for=(online_logfiles,primary_role) db_unique_name=tzdbstb' *.log_archive_dest_state_2='ENABLE' *.log_archive_max_processes=30 *.nls_language='SIMPLIFIED CHINESE' *.nls_territory='CHINA' *.open_cursors=3000 *.pga_aggregate_target=32963873996 *.processes=3000 *.remote_listener='tzrac-scan:1521' *.remote_login_passwordfile='exclusive' *.resource_limit=TRUE *.session_cached_cursors=500 *.sessions=3305 *.sga_max_size=76879914598 *.sga_target=76879914598 *.standby_file_management='AUTO' *.undo_retention=14400 tzdb1.thread=1 tzdb2.thread=2 tzdb1.instance_number=1 tzdb2.instance_number=2 tzdb1.undo_tablespace='UNDOTBS1' tzdb2.undo_tablespace='UNDOTBS2' *.cluster_database=true }}} == 创建spfile, 并使用spfile重新启动数据库 == 使用修改后的pfile打开数据库. {{{ export ORACLE_SID=tzdb1 SQL> startup nomount pfile='$ORACLE_HOME/dbs/init$ORACLE_SID.ora'; SQL> create spfile='+DATA/TZDB/SPFILETZDB.ORA' from pfile='$ORACLE_HOME/dbs/init$ORACLE_SID.ora'; SQL> shutdown immediate }}} === 确认asm存储上的文件 === 使用grid用户登录, 确认文件是否生成. {{{ asmcmd ls +DATA/TZDB/SPFILETZDB.ORA }}} == 重新创建pfile == === newrac1 === {{{ $ cp -v $ORACLE_HOME/dbs/init$ORACLE_SID.ora{,.cluster_database} }}} 修改pfile内容如下: {{{ $ cat $ORACLE_HOME/dbs/init$ORACLE_SID.ora SPFILE='+DATA/TZDB/SPFILETZDB.ORA' }}} === newrac2 === * 首次登录RAC节点2执行操作. 创建或修改pfile内容如下: {{{ $ cat $ORACLE_HOME/dbs/init$ORACLE_SID.ora SPFILE='+DATA/TZDB/SPFILETZDB.ORA' }}} == 手动打开两个节点的数据库 == 确认数据库启动正常 === newrac1 === {{{ $ sqlplus / as sysdba SQL> startup SQL> show parameter pfile SQL> SELECT name, open_mode FROM gv$database; }}} === newrac2 === {{{ $ sqlplus / as sysdba SQL> startup SQL> show parameter pfile SQL> SELECT name, open_mode FROM gv$database; }}} == 在cluster中增加数据库 == {{{ $ /u01/grid/app/11.2.0/bin/srvctl add database -d tzdb -o /u01/oracle/app/11.2.0 $ /u01/grid/app/11.2.0/bin/srvctl config database -d tzdb -a Database unique name: tzdb Database name: Oracle home: /u01/oracle/app/11.2.0 Oracle user: oracle Spfile: Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: tzdb Database instances: Disk Groups: Mount point paths: Services: Type: RAC Database is enabled Database is administrator managed }}} == 在tzdb数据库增加实例 == {{{ $ srvctl add instance -d tzdb -i tzdb1 -n newrac1 $ srvctl add instance -d tzdb -i tzdb2 -n newrac2 $ srvctl config database -d tzdb -a Database unique name: tzdb Database name: Oracle home: /u01/oracle/app/11.2.0 Oracle user: oracle Spfile: Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: tzdb Database instances: tzdb1,tzdb2 Disk Groups: Mount point paths: Services: Type: RAC Database is enabled Database is administrator managed }}} 上面的命令输出中'''Disk Groups'''显示为空, 这是预期的. 因为我们还没有使用srvctl集群工具启动数据库 == srvctl启动数据库 == 当前数据库已经是处于启动状态, 之前已通过sqlplus打开 {{{ $ sqlplus / as sysdba SQL> SELECT name,open_mode FROM gv$database; }}} 现在需要使用srvctl注册一下 {{{ $ srvctl start database -d tzdb $ srvctl status database -d tzdb Instance tzdb1 is running on node newrac1 Instance tzdb2 is running on node newrac2 }}} {{{ $ crsctl stat res -t }}} == 静态监听配置(可选) == {{{ $ cat listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = tzdb) (ORACLE_HOME = /u01/oracle/app/11.2.0) (SID_NAME = tzdb1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.10.151)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ADR_BASE_LISTENER = /u01/oracle/app }}} == srvctl重新启动数据库 == as '''grid''' user {{{ $ srvctl stop database -d tzdb $ srvctl start database -d tzdb $ srvctl config database -d tzdb -a $ crsctl stat res -t }}} as '''oracle''' user $ sqlplus / as sysdba {{{ SET linesize 166 COLUMN HOST_NAME FORMAT a30 SELECT name DB_NAME,INSTANCE_NAME,HOST_NAME,OPEN_MODE,version DB_VERSION,DATABASE_STATUS,DATABASE_ROLE,LOGINS,to_char(STARTUP_TIME,'DD-MON-YYYY HH24:MI:SS') "DB UP TIME" FROM v$database,gv$instance; }}} 确认一切正常. == 重启服务器操作系统验证(建议) == 最后重启两台服务器, 确认正常. 至此, 迁移操作已完成. 下一流程是: 应用连接NEWRAC测试.