asm迁移到asm

来源:互联网 发布:网络红女杨涛照片 编辑:程序博客网 时间:2024/04/28 13:52

asm到asm有个好处就是拷贝过去后数据库是启动着的,拷贝完成后只需要修改下参数文件中控制文件的路径和名字就可以了。

源库操作
1,修改源库参数
SQL>show parameter job_queue_processes  --记录$job_value
SQL>show parameter aq_tm_processes      --记录$aq_value
SQL>alter system set job_queue_processes = 0 scope = both;
SQL>alter system set aq_tm_processes = 0 scope = both;
2,修改源库为归档模式(经过测试可以不用归档模式,但需要启动到open read only)
sqlplus '/as sysdba'
startup mount
alter database archivelog;
并启动到read only模式
startup mount
alter database open read only
将源库的pfile文件传输到目标库
create pfile='/tmp/pfile$ORACLE_SID.ora' from spfile='+stg_data_dg/multirpt/parameterfile/spfile_current.ora';

目标库操作
3,修改pfile文件并启动到nomount状态
修改下列参数,并建立下列目录
*.audit_file_dest='/paic/stg/oracle/11g/app/oracle/admin/molapstg/adump'
*.diagnostic_dest='/paic/stg/oracle/11g/app/oracle'
*.control_files='+DATA_MOLAPSTG_DG/MOLAPSTG/CONTROLFILE/current_controlfile','+FRA_MOLAPSTG_DG/MOLAPSTG/CONTROLFILE/current_controlfile'
*.db_create_file_dest='+DATA_MOLAPSTG_DG'
*.db_recovery_file_dest='+FRA_MOLAPSTG_DG'
在目标库创建pwd文件
orapwd file=$ORACLE_HOME/dbs/orapworcl password=admin

sql>startup nomount pfile ='/tmp/pfile$ORACLE_SID.ora';

源库与目标库
4,在源库和目标库都配置监听和tnsnames.ora
修改目标库库的$ORACLE_HOME/network/listener.ora文件
polapstg =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST=10.31.10.83)(PORT=1540))
      )
    )
  )

SID_LIST_polapstg =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /paic/stg/oracle/11g/app/oracle/product/11.2.0.2.5)
      (SID_NAME = polapstg)
    )
  )
在源库和目标库都配置tnsnames.ora
polapstg_dup= (description = (address = (protocol = tcp)(host = 10.31.10.83)(port = 1540))(connect_data =(sid = polapstg)))
polapstg=(description = (address = (protocol = tcp)(host = 10.31.9.85)(port = 1540))(connect_data =(sid = polapstg)))

源库
5,在源库编译脚本
log_file=/paic/stg/oracle/11g/otzj11g/xltmp/full_backup_${ORACLE_SID}_`date '+%Y%m%d_%H%M%S'`.log
export log_file
rman << EOF > ${log_file} 2>&1
connect TARGET sys/paic1234@stginvdw2--源库
connect AUXILIARY sys/paic1234@stginvdw3--目标库
DUPLICATE TARGET DATABASE 
      TO 'HDINVDW3' --目标库的DB_NAME
      FROM ACTIVE DATABASE
      DB_FILE_NAME_CONVERT=('+DATA2_DG/invest/datafile/'--源库datafile文件路径,'+DATA3_DG/HDINVDW3/datafile/',--目标库datafile文件路径
 '+DATA2_DG/invest/tempfile/','+DATA3_DG/HDINVDW3/tempfile/')
    LOGFILE
      GROUP 1 ('+DATA3_DG',
               '+FRA3_DG') SIZE 50M,
      GROUP 2 ('+DATA3_DG',
               '+FRA3_DG') SIZE 50M,
      GROUP 3 ('+DATA3_DG',
               '+FRA3_DG') SIZE 50M REUSE;
EOF
echo "Backup finished at `date '+%Y%m%d_%H%M%S'`" >> ${log_file}

注意:
如果源库datafile文件路径文件写错了,这oracle会认为你是要覆盖源库的文件会报
RMAN-05001: auxiliary file name /oracle/oradata/skatedb/tbs_statspack01.dbf conflicts with a file used by the target database

另外如果目标库和源库的路径是一致的,也会报
RMAN-05001: auxiliary file name /oracle/oradata/skatedb/tbs_statspack01.dbf conflicts with a file used by the target database
这是必须加上nofilenamecheck参数。
log_file=/paic/stg/oracle/11g/otzj11g/xltmp/full_backup_${ORACLE_SID}_`date '+%Y%m%d_%H%M%S'`.log
export log_file
rman << EOF > ${log_file} 2>&1
connect TARGET sys/paic1234@stginvdw2--源库
connect AUXILIARY sys/paic1234@stginvdw3--目标库
DUPLICATE TARGET DATABASE 
      TO 'HDINVDW3' --目标库的DB_NAME
      FROM ACTIVE DATABASE
      nofilenamecheck ('+DATA2_DG/invest/datafile/'--源库datafile文件路径,'+DATA2_DG/invest/datafile/',--目标库datafile文件路径
 '+DATA2_DG/invest/tempfile/','+DATA2_DG/invest/tempfile/')
    LOGFILE
      GROUP 1 ('+DATA3_DG',
               '+FRA3_DG') SIZE 50M,
      GROUP 2 ('+DATA3_DG',
               '+FRA3_DG') SIZE 50M,
      GROUP 3 ('+DATA3_DG',
               '+FRA3_DG') SIZE 50M REUSE;
EOF
echo "Backup finished at `date '+%Y%m%d_%H%M%S'`" >> ${log_file}

如果出现如下错误,这表示原库没有归档日志。需要切换一下logfile,alter system switch logfile
RMAN>
connected to target database: T0INVDW (DBID=3901563815)

RMAN>
connected to auxiliary database: STGINVDW (not mounted)

RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11>
Starting Duplicate Db at 2013-08-08 21:26:48
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=257 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 08/08/2013 21:26:49
RMAN-05501: aborting duplication of target database
RMAN-05541: no archived logs found in target database


第二种方法
export log_file=./restore_${ORACLE_SID}_`date '+%Y%m%d_%H%M%S'`.log
rman target sys/sys auxiliary sys/sys@t1cces<< EOF > ${log_file} 2>&1
backup as copy current controlfile auxiliary format  '+DATA_MIDG';
backup as copy reuse datafile 1 auxiliary format '+DATA_MIDG';
backup as copy reuse datafile 2 auxiliary format '+DATA_MIDG';
backup as copy reuse datafile 3 auxiliary format '+DATA_MIDG';
backup as copy reuse datafile 4 auxiliary format '+DATA_MIDG';
EOF
echo "Restore finished at `date '+%Y%m%d_%H%M%S'`" >> ${log_file}

0 0