暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

怎样对生产环境10T RAC新增Adg 不对现有主库产生任何负载,不占用网络带宽?

原创 John2020 2021-07-02
596

导读

作者:杨漆
16年关系型数据库管理,从oracle 9i 、10g、11g、12c到Mysql5.5、5.6、5.7、8.0 到TiDB获得3个OCP、2个OCM;运维路上不平坦,跌过不少坑、熬过许多夜。把工作笔记整理出来分享给大伙儿,希望帮到大家少走弯路、少熬夜。

提问:

如果您的生产环境为3节点的Rac+ASM,10T以上数据,业务对主库有极高性能要求,不能占用主库资源、通道、带宽,且主库归档日志每4小时会定时删除一次(归档存储空间有限,且无法扩容),现有备库上的归档每小时不定期自动删除(第三方软件,且要求不能停),在这种极端情况下怎样才能再新部署一套Adg ?

答:

1.Duplicate Target 方式是彻底无望了!
2.传统的Rman备份出全量数据传输到备库后启动Adg从主库自动拉归档方式也不可能(10T数据备份时间 + 传输时间 + 恢复时间 > 4小时)
3.Rman备份出全量数据传到备库恢复,备份同时主库定时转储归档传到备库register (主库当前环境为三节点Rac,归档存放在ASM上,你能知道归档的正确顺序,并按顺序正确register到新的dg端?)
4.Rman备份出全量数据传到备库恢复,备份同时从现有一备库端定时转储归档传到备库register(第三方软件每小时内不定期删除归档日志,你怎么确保高频产生的归档全部转储成功,一个不丢失不损坏?)

以上的四种方案全无法通过!

可上级的要求无法违背。怎样在这样极端恶劣的环境下新部署一套Adg库?

解决方案如下:

1.在主库端制作standby控制文件
2.在现有备库端备份全量数据
3.搭建第二新备库并用备库端传来的全量数据恢复
4.read only方式开打新备库读出Gap点的scn
5.根据Gap点scn在旧有备库上做好增量备份
6.用增备恢复第二新备库
7.启用dg让新备库自动抓取主库端4小时内的归档,恢复追平主库
8.启动Adg验证有效性

步骤:

1.保持与主库操作系统一致,在Adg Server上部署Redhat7.2的OS,本机存储空间分配足够(20T),保证主备库间带宽畅通;
2.在standby部署好Oracle12C的software、空库并启动到nomount状态 ;
3.将旧有备库上的密码文件、静态参数文件传输到新的Adg端(参数文件根据主/备环境做对应修改配置);
4.选择非业务高峰时段对主库spfile用命令动态修改;
5.在主库上创建备库控制文件并传输到备库对应目录;
6.旧备库外挂NAS存储(移动式),rman备份完全量数据后将此NAS快速搬迁到异地机房并挂载到新备库端;
7.用主库制作的standby controlfile启动新备库到mount状态;
8.用外挂NAS存储上的全量备份集恢复新备库;
9.只读方式开打新备库读出Gap点的scn(找最小点的scn);
10.根据Gap点scn在旧有备库上做好增量备份,用增备恢复第二新备库;
11.启用dg让新备库自动抓取主库端4小时内的归档,恢复追平主库;
12.启动Adg 验证主、备库数据一致性;

################## 以下为具体执行手顺
主库执行:

TNS:

orcldg2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcldg2)
(UR=A)
)
)

#!/bin/bash
sqlplus sys/ as sysdba>result.log<<EOF
##alter database create standby controlfile as ‘/home/oracle/control01_sty.ctl’;
alter system set log_archive_config=‘DG_CONFIG=(orcl,orcldg1,orcldg2)’;
alter system set log_archive_dest_4=‘SERVICE=orcldg2 LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg2’ scope=both sid=’*’;
alter system set log_archive_dest_state_4=enable;
alter system set standby_file_management=‘AUTO’;
exit
EOF

##在主库上创建备库控制文件并传输到备库对应目录
sqlplus sys/ as sysdba>result.log<<EOF
alter database create standby controlfile as ‘/mnt/backup/control01_sty.ctl’
exit
EOF

scp -r /mnt/backup/control01_sty.ctl 10.10.10.18:/home/oracle/

全备Standby库+归档、并行

旧备库端执行:

su - oracle

vi rman_database_backup.sh

#!/bin/sh

echo “start full database backup !”

rman target / log /mnt/backup/datbase_backup.log <<EOF

run {
configure channel device type disk format ‘/mnt/backup/full_%U_%d’;
configure device type disk parallelism 10; ## 自动分配10路并行备份通道,无需再手动指定
delete backupset all completed before ‘sysdate-7’;
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup database plus archivelog;
}
exit;
EOF

echo “finished full database backup !!!”

##备份集的实际路径、备份集名需按实际情况调整
scp -r /mnt/backup/full_database 10.10.10.18:/u01/backup/full_database

全量恢复

新备库执行:

rman target / log /home/oracle/rman_recover.log<<END
run{
startup nomount;
restore controlfile from ‘/home/oracle/control01_sty.ctl’;
sql ‘alter database mount standby database’;
catalog start with ‘/mnt/backup/’; ##备份集的实际路径、备份集名需按实际情况调整
configure device type disk parallelism 10;
restore database;
recover database;
}
exit;
END

###基于gap点拉增量备份

select * from v$archive_gap;

##查看standby端最小 scn
col min(checkpoint_change#) for 999999999999
col current_scn for 999999999999
set numwidth 20

select min(checkpoint_change#) from v$datafile_header; ## 两条sql 二选一就好,用下面这条更省力

select min(fhscn) from x$kcvfh;

MIN(FHSCN)

20172508017

select current_scn from v$database;

CURRENT_SCN

20203151960
选择较小SCN号(20172508017)去主库拉增备

查出主库在standby端current_scn后产生的新数据文件,根据文件号(file#)在主库端做Rman数据文件备份

select file#,name from vdatafile where creation_change#>=(select current_scn from vdatabase); ## 极端情况下使用,大多数时候不用这样做

################################## 拉增备的scn号用下面查出来最小的号
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN

2164433

SQL> select min(checkpoint_change#) from vdatafile_header where file# not in (select file# from vdatafile where enabled = ‘READ ONLY’);
MIN(F.FHSCN)

2162298

comment:上面一个为控制文件中记录的SCN号,另一个为数据文件头记录的SCN号, 我们需要选择较小SCN号(2162298)的来备份。
###################################

主库上再次制作standby控制文件

主库执行:

sqlplus sys/ as sysdba>result.log<<EOF
alter database create standby controlfile as ‘/mnt/backup/control02_sty.ctl’
exit
EOF

##将主库上新创建的备库控制文件传输到新备库对应目录下(10.10.10.18使用)

scp -r /mnt/backup/control02_sty.ctl 10.10.10.18:/home/oracle/

在旧备库拉增量+归档、并行

旧备库执行:

su - oracle

vi rman_increment_DB_backup.sh

#!/bin/sh

echo “start increment DB backup !”

rman target / log /mnt/backup/increment_backup.log <<EOF

run {
configure channel device type disk format ‘/mnt/backup/incre_dir/incre_DB_%U_%d’;
configure device type disk parallelism 10;
crosscheck archivelog all;
delete noprompt expired archivelog all;

backup as compressed backupset datafile 5; ## 极端情况下才拉单独的datafile备份

backup current controlfile for standby format ‘/mnt/backup/incre_dir/control02_sty.ctl’;

backup as compressed backupset INCREMENTAL from scn 20172508017 database include current controlfile for standby; ## ASM的RAC端拉会报错,仅适用非ASM

backup as compressed backupset INCREMENTAL from scn 20172508017 database plus archivelog; ## standby端 MIN(FHSCN)
}
exit
EOF

echo “finished increment DB backup !!!”

##传输增量备份到standby端(备份集的路径、名字需按实际情况调整)
scp -r /mnt/backup/incre_dir/incre_DB_xxx 10.10.10.18:/home/oracle/

新备库端执行:

rman target / log /home/oracle/rman_recover.log<<END
run{
shutdown;
startup nomount;
restore controlfile from ‘/mnt/backup/incre_dir/control02_sty.ctl’;
sql ‘alter database mount standby database’;

alter database mount;

catalog start with ‘/mnt/backup/incre_dir/’; ## 备份集的路径、名字需按实际情况调整
configure device type disk parallelism 10;
##restore datafile 5; ## 恢复数据文件名按实际情况调整
restore database;
recover database noredo parallel 10;
}
exit
END

清理所有standby log

sqlplus sys/ as sysdba>>clear_standbylog.log<<EOF
ALTER DATABASE clear LOGFILE group 40;
ALTER DATABASE clear LOGFILE group 41;
ALTER DATABASE clear LOGFILE group 42;
ALTER DATABASE clear LOGFILE group 43;
ALTER DATABASE clear LOGFILE group 44;
ALTER DATABASE clear LOGFILE group 45;
ALTER DATABASE clear LOGFILE group 46;
ALTER DATABASE clear LOGFILE group 47;
ALTER DATABASE clear LOGFILE group 48;
ALTER DATABASE clear LOGFILE group 49;
ALTER DATABASE clear LOGFILE group 50;
ALTER DATABASE clear LOGFILE group 51;
ALTER DATABASE clear LOGFILE group 52;
ALTER DATABASE clear LOGFILE group 53;
ALTER DATABASE clear LOGFILE group 54;
ALTER DATABASE clear LOGFILE group 55;
ALTER DATABASE clear LOGFILE group 56;
ALTER DATABASE clear LOGFILE group 57;
ALTER DATABASE clear LOGFILE group 58;
EOF

如果standby log错误直接删除重建

alter database drop standby logfile group 40;
alter database drop standby logfile group 41;
alter database drop standby logfile group 42;

增加 standby logfile:

sqlplus sys/ as sysdba>>result.log<<EOF
ALTER DATABASE ADD standby LOGFILE group 40 ‘/u01/app/oracle/standby/stdy40.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 41 ‘/u01/app/oracle/standby/stdy41.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 42 ‘/u01/app/oracle/standby/stdy42.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 43 ‘/u01/app/oracle/standby/stdy43.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 44 ‘/u01/app/oracle/standby/stdy44.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 45 ‘/u01/app/oracle/standby/stdy45.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 46 ‘/u01/app/oracle/standby/stdy46.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 47 ‘/u01/app/oracle/standby/stdy47.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 48 ‘/u01/app/oracle/standby/stdy48.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 49 ‘/u01/app/oracle/standby/stdy49.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 50 ‘/u01/app/oracle/standby/stdy50.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 51 ‘/u01/app/oracle/standby/stdy51.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 52 ‘/u01/app/oracle/standby/stdy52.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 53 ‘/u01/app/oracle/standby/stdy53.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 54 ‘/u01/app/oracle/standby/stdy54.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 55 ‘/u01/app/oracle/standby/stdy55.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 56 ‘/u01/app/oracle/standby/stdy56.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 57 ‘/u01/app/oracle/standby/stdy57.dbf’ size 2G;
ALTER DATABASE ADD standby LOGFILE group 58 ‘/u01/app/oracle/standby/stdy58.dbf’ size 2G;
EOF

10.10.10.18 新standby端的listener 和 tns

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /u01/app/oracle/product/12.2.0/db_1)
(SID_NAME = orcldg2)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.18)(PORT = 1521))
)
)

ADR_BASE_LISTENER=/u01/app/oracle

cat tnsnames.ora

tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.2.0/db_1/network/admin/tnsnames.ora

Generated by Oracle configuration tools.

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.5)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

在新备库自动拉取主库归档并追平数据

sqlplus sys/ as sysdba>>result.log<<EOF
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
EOF

在新备库启动Adg

sqlplus sys/ as sysdba>>result.log<<EOF
alter database recover managed standby database cancel;
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
EOF

查看归档日志gap问题是否解决,及归档日志的应用情况。

新备库端执行:
set pages 300;
set linesize 300;
col name for a80;
col FIRST_CHANGE# for 9999999999999 ;
col NEXT_CHANGE# for 9999999999999;

select * from v$archive_gap;

验证Adg 有效性(新备库上执行)

select recid,name, sequence#, STANDBY_DEST, ARCHIVED, APPLIED from v$archived_log ;

select process,status from v$managed_standby;

select sequence#,applied from v$archived_log order by sequence# asc;

select * from v$dataguard_stats;

备注:追平后APPLIED 全为Yes,只有最后一个在备库端显示为 In Memory

成功运行!

环境为 Oracle12cR2 RAC+ ASM + 2个Adg(一个同城、一个异地)

自动清除已应用的归档,释放磁盘空间,避免爆盘

cat delete_archivelog.sh

#!/bin/sh

find /u01/app/oracle/arhivelog -name “*.arc” -mtime +1 |xargs rm -rf

cd
. ./.bash_profile
export ORACLE_SID=orcl
echo “”>/home/oracle/delete_archivelog.log

/u01/app/oracle/product/bin/rman target / msglog=/home/oracle/delete_archivelog.log <<EOF
run{
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT FORCE ARCHIVELOG ALL COMPLETED BEFORE ‘sysdate - 1’;
}
exit;
EOF

rman删除三天前的备份(备库若每天做了备份,可选择性添加)

delete archivelog all completed before ‘sysdate-3’;

delete backupset completed before ‘sysdate-3’;

添加到计划与任务中

crontab -l
1 3,17 * * * sh /home/oracle/delete_archivelog.sh

常发生的故障情况总结:

1.由于归档在主库保留时间太短,可能会导致多次查询Gap点scn并到旧备库拉增备传输到新备库进行恢复

此时常会导致二次增量恢复后数据文件头的scn不向前,停留在第一次增备状态。

解决方案:一次拉增备,尽量避免二次增备

  1. incarnation号识别错误导致,备库无法找到备份集中正确的位置

主、备库上执行:

list incarnation;

重置备库incarnation号

reset database to incarnation 2;

原因:因为resetlogs以后重置了scn,数据库实体发生了变化,使用的实体编号是以前的,使用该备份集无法完成恢复,需将实体编号改回跟主库一致的情况就OK

3.拉取增备后传输新备库Rman 恢复报datafile1,3,4,7缺失

现象:
restore database;

Starting restore at 30-JUN-21
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1326 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=2082 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=2460 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=2836 device type=DISK
allocated channel: ORA_DISK_5
channel ORA_DISK_5: SID=3 device type=DISK
allocated channel: ORA_DISK_6
channel ORA_DISK_6: SID=193 device type=DISK
allocated channel: ORA_DISK_7
channel ORA_DISK_7: SID=381 device type=DISK
allocated channel: ORA_DISK_8
channel ORA_DISK_8: SID=570 device type=DISK
allocated channel: ORA_DISK_9
channel ORA_DISK_9: SID=760 device type=DISK
allocated channel: ORA_DISK_10
channel ORA_DISK_10: SID=949 device type=DISK

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 06/30/2021 15:50:06
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 7 found to restore
RMAN-06023: no backup or copy of datafile 4 found to restore
RMAN-06023: no backup or copy of datafile 3 found to restore
RMAN-06023: no backup or copy of datafile 1 found to restore

datafile 7,4,3,1 在备份集中经如下命令逐个查询,全有,但restore 报无法识别

RMAN> list backup of datafile 7 ;

List of Backup Sets

BS Key Type LV Size Device Type Elapsed Time Completion Time


24759 Incr 1.62G DISK 01:13:16 30-JUN-21
BP Key: 25095 Status: AVAILABLE Compressed: YES Tag: TAG20210630T115
Piece Name: /mnt/backup/incre_dir2/incre_hk02mqgg_1_1_ORCL
List of Datafiles in backup set 24759
File LV Type Ckp SCN Ckp Time Abs Fuz SCN Sparse Name


7 Incr 50551234614 30-JUN-21 50552785159 NO /u01/oradata/datafile/us

RMAN> list incarnation;

using target database control file instead of recovery catalog

List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time


1 1 ORCL 1513741333 PARENT 1 26-JAN-17
2 2 ORCL 1513741333 CURRENT 1408558 04-SEP-18
3 3 ORCL 1513741333 ORPHAN 21989683576 15-NOV-19
4 4 ORCL 1513741333 ORPHAN 21990161547 15-NOV-19
5 5 ORCL 1513741333 ORPHAN 21990380526 15-NOV-19
6 6 ORCL 1513741333 ORPHAN 21990478997 15-NOV-19
7 7 ORCL 1513741333 ORPHAN 21991031747 16-NOV-19

incarnation 也与主库一致

解决方案:将全备和增备文件合并(catalog start with ‘/mnt/backup/’)后再执行restore

合并增量备份不用担心会导致重复全量恢复,Rman会自动跳过已restore的文件

allocated channel: ORA_DISK_8
channel ORA_DISK_8: SID=3 device type=DISK
allocated channel: ORA_DISK_9
channel ORA_DISK_9: SID=193 device type=DISK
allocated channel: ORA_DISK_10
channel ORA_DISK_10: SID=381 device type=DISK

skipping datafile 1; already restored to file /u01/oradata/datafile/system.293.985960459
skipping datafile 7; already restored to file /u01/oradata/datafile/users.296.985960529
skipping datafile 15; already restored to file /u01/oradata/datafile/efs_dat.346.985966197
skipping datafile 25; already restored to file /u01/oradata/datafile/loan_dat.357.985966745
skipping datafile 35; already restored to file /u01/oradata/datafile/etl_dat.547.987163079
skipping datafile 40; already restored to file /u01/oradata/datafile/cust_dat.555.986811747
skipping datafile 47; already restored to file /u01/oradata/datafile/newaas_dat.490.986813125
skipping datafile 58; already restored to file /u01/oradata/datafile/loan_dat.921.989062301
skipping datafile 72; already restored to file /u01/oradata/datafile/efs_dat.356.994861109
skipping datafile 76; already restored to file /u01/oradata/datafile/etl_dat.505.1000197047
skipping datafile 118; already restored to file /u01/oradata/datafile/efsw_dat.639.1054555063
skipping datafile 121; already restored to file /u01/oradata/datafile/efs_dat.1024.1059123051
skipping datafile 134; already restored to file /u01/oradata/datafile/efs_dat.1002.1060360853
skipping datafile 149; already restored to file /u01/oradata/datafile/efs_dat.987.1069265261
skipping datafile 159; already restored to file /u01/oradata/datafile/loan_index.977.10721793

这里可以明显看到 datafile 1,3,4,7已在新备库中存在无需恢复。

channel ORA_DISK_4: restoring datafile 00099 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_efsw_dat_gwxdgv5c_.dbf
channel ORA_DISK_4: reading from backup piece /mnt/backupnew/2/full_0e0244jv_1_1_ORCL
channel ORA_DISK_5: starting datafile backup set restore
channel ORA_DISK_5: specifying datafile(s) to restore from backup set
channel ORA_DISK_5: restoring datafile 00080 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_efsw_dat_gwxc5m8x_.dbf
channel ORA_DISK_5: restoring datafile 00085 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_loan_ind_gktms1pq_.dbf
channel ORA_DISK_5: restoring datafile 00091 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_etl_dat2_gwq99n41_.dbf
channel ORA_DISK_5: reading from backup piece /mnt/backupnew/2/full_0d0244jv_1_1_ORCL
channel ORA_DISK_6: starting datafile backup set restore
channel ORA_DISK_6: specifying datafile(s) to restore from backup set
channel ORA_DISK_6: restoring datafile 00079 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_etl_dat_g7gd31rz_.dbf
channel ORA_DISK_6: restoring datafile 00098 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_efsw_dat_gwxddxdj_.dbf
channel ORA_DISK_6: restoring datafile 00104 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_efsw_dat_h3pzmksk_.dbf
channel ORA_DISK_6: restoring datafile 00105 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_ftp_dat_h4n8obgr_.dbf
channel ORA_DISK_6: restoring datafile 00106 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_etlw_dat_h8wvyfvz_.dbf
channel ORA_DISK_6: reading from backup piece /mnt/backupnew/2/full_0g0244jv_1_1_ORCL
channel ORA_DISK_7: starting datafile backup set restore
channel ORA_DISK_7: specifying datafile(s) to restore from backup set
channel ORA_DISK_7: restoring datafile 00081 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_efsw_dat_gwxclp2d_.dbf
channel ORA_DISK_7: restoring datafile 00086 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_efs_dat_grv97ohb_.dbf
channel ORA_DISK_7: restoring datafile 00092 to /u01/oradata/datafile/ORCLSTB2/datafile/o1_mf_etl_dat2_gwq9plfy_.dbf

这里可以看到 Rman仅恢复基于Scn拉取的增量数据

4.控制文件中有太多旧的过期备份集记录,导致恢复时间太长

解决方案:做交叉校验,删除过期备份集

5.rman中删除过期备份集命令报错

delete obsolete失效时,执行

report obsolete;

crosscheck archivelog all;

crosscheck backup;

allocate channel for maintenance type disk;

DELETE FORCE NOPROMPT OBSOLETE DEVICE TYPE DISK;

6.若nohup方式错误调用Rman,杀掉前端进程,后端仍旧在执行

查看运行的rman 进程

SELECT sid, spid, client_info
FROM vprocessp,vprocess p, vsession s
WHERE p.addr = s.paddr
AND client_info LIKE ‘%rman%’;

kill掉 spid号就好

############################ 仅做知识参考,本案例中未采用

注册归档日志脚本(当主备间归档未应用太多时)

#!/bin/bash
echo “” > /u01/arch/apply.sql
for i in {75…94}
do
echo “alter database register logfile ‘/u01/arch/old/1_${i}_996353475.arc’;” >> /u01/arch/apply.sql
done

sqlplus / as sysdba<<EOF
@/u01/arch/apply.sql
exit
EOF

backup format=’/home/oracle/standby.ctl’ as copy current controlfile for standby; ## rman中制作standby控制文件的第三中命令方式

alter database set standby database to maximize availability;

######### 怎样将ASM存储中的归档日志转化成平面文件,以便于拷出

怎样将ASM上的文件转换为平面拷贝出

create or replace directory source_dir as ‘+DATA/ORCL/ARCHIVELOG/’;
create or replace directory dest_dir as ‘/mnt/backup/archivelog’;

begin
dbms_file_transfer.copy_file(
source_directory_object => ‘source_dir’,
source_file_name => ‘thread_1_seq_287478.1010.1006490273’,
destination_directory_object => ‘dest_dir’,
destination_file_name => ‘thread_1_seq_287478’
);
end;
/

######### DUPLICATE TARGET 是最快、最省力的,不适用于本案例的极端场景。仅在环境允许时使用参考

主库执行 :

添加TNS:

orcldg2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.18)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcldg2)
(UR=A)
) )

#!/bin/bash
sqlplus sys/ as sysdba>result.log<<EOF
alter system set log_archive_config=‘DG_CONFIG=(orcl,orcldg,orcldg2)’;
alter system set log_archive_dest_3=‘SERVICE=orcldg2 LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcldg2’ scope=both sid=’*’;
alter system set log_archive_dest_state_3=enable;
alter system set standby_file_management=‘AUTO’;
exit
EOF

alter system set log_archive_max_processes=30 scope=both sid=’*’; 填加提高并行度,加速,可根据情况选择性加

RMAN>configure channel device type disk rate 1k ; rman通道限速开关,不一定加

rman target sys/oracle@orcl auxiliary sys/oracle@orcldg2<<EOF
run{
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;
}
EOF

备库上执行:
sqlplus sys/ as sysdba>>result.log<<EOF
alter database recover managed standby database cancel;
alter database open read only;
alter database recover managed standby database using current logfile disconnect from session;
exit
EOF

######################## 万般皆下品,唯有duplicate target 方式最Easy! 哈哈哈!
123凡科快图.gif

最后修改时间:2021-07-02 21:16:24
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论