备注说明:所有情况以实际遇到的为主,以下仅作参考。
查询归档状态
在SQLPLUS下使用该命令查看当前数据库的归档状态
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination ?#/dbs/arch
Oldest online log sequence 4
Current log sequence 6
因为Database log mode 值为 No Archive Mode,所以现在是非归档状态
非归档模式下使用RMAN进行全库备份
前期准备工作:
1 切换到root用户在“/”根目录下建立full目录。
mkdir /full
2 把/full目录所属权赋予给oracle用户和oinstall组
chown -R oracle:oinstall /full
3 切换回oracle用户 并在/full目录下建立arch目录(注 arch目录留着备用)
su - oracle
mkdir -p /full/arch
使用rman target / 进入到rman中
1 查看当前数据库状态
RMAN> select status from v$instance;
using target database control file instead of recovery catalog(这句话不用管他下次再执行一次查询就不出了)
STATUS
------------
OPEN
我们再执行一次这个查询
RMAN> select status from v$instance;
STATUS
------------
OPEN
看到了吧!那句话不出了吧!!!
根据查询我们可以看到我们的数据库现在是OPEN状态。OPEN状态是数据库正常的打开状态,就是STARTUP或ALTER DATABASE OPEN;后可供我们正常使用的数据库。
2 执行backup database;
RMAN> backup database;
Starting backup at 2020-10-18 02:54:32
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=52 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 10/18/2020 02:54:32
RMAN-06149: cannot BACKUP DATABASE in NOARCHIVELOG mode
这里报错,我们从最后一个报错信息可以看到(RMAN-06149: cannot BACKUP DATABASE in NOARCHIVELOG mode),我们不能在非归档模式下的OPEN状态的数据库进行全库备份。
3 关闭数据库
RMAN> shutdown immediate
database closed
database dismounted
Oracle instance shut down
4 将数据库启动到mount状态
RMAN> startup mount
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 838860800 bytes
Fixed Size 8626240 bytes
Variable Size 322965440 bytes
Database Buffers 503316480 bytes
Redo Buffers 3952640 bytes
5 检查数据库现在的状态
RMAN> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
MOUNTED
可以看到是MOUNT状态的。
6 执行backup database; 全库备份
RMAN> backup format '/full/full_%d_%s_%T_%p.bak' database;
Starting backup at 2020-10-18 03:02:22
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=34 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
input datafile file number=00007 name=/u01/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: starting piece 1 at 2020-10-18 03:02:25
channel ORA_DISK_1: finished piece 1 at 2020-10-18 03:03:17
piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1 tag=TAG20201018T030224 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:52
Finished backup at 2020-10-18 03:03:17
Starting Control File and SPFILE Autobackup at 2020-10-18 03:03:17
piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00 comment=NONE
Finished Control File and SPFILE Autobackup at 2020-10-18 03:03:21
全库备份完成,而且我们能从最后一段提示可以看出控制文件与SPFILE文件(Starting Control File and SPFILE Autobackup at)也进行了自动备份,并成功完成了这两个文件的备份。存储到了“/u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00”这个文件中。
backup format '/full/full_%d_%s_%T_%p.bak' database;
7 使用list backup;命令查看一下该备份结果
RMAN> list backup;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
1 Full 1.08G DISK 00:00:23 2020-10-18 03:02:47
BP Key: 1 Status: AVAILABLE Compressed: NO Tag: TAG20201018T030224
Piece Name: /u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1
List of Datafiles in backup set 1
File LV Type Ckp SCN Ckp Time Abs Fuz SCN Sparse Name
---- -- ---- ---------- ------------------- ----------- ------ ----
1 Full 1911910 2020-10-18 02:57:41 NO /u01/app/oracle/oradata/orcl/system01.dbf
3 Full 1911910 2020-10-18 02:57:41 NO /u01/app/oracle/oradata/orcl/sysaux01.dbf
4 Full 1911910 2020-10-18 02:57:41 NO /u01/app/oracle/oradata/orcl/undotbs01.dbf
7 Full 1911910 2020-10-18 02:57:41 NO /u01/app/oracle/oradata/orcl/users01.dbf
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
2 Full 10.19M DISK 00:00:01 2020-10-18 03:03:19
BP Key: 2 Status: AVAILABLE Compressed: NO Tag: TAG20201018T030318
Piece Name: /u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00
SPFILE Included: Modification time: 2020-10-18 03:00:30
SPFILE db_unique_name: ORCL
Control File Included: Ckp SCN: 1911910 Ckp time: 2020-10-18 02:57:41
备份成功!
8 使用alter database open;打开数据库
RMAN> alter database open;
Statement processed
RMAN> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
OPEN
打开数据库成功!备份完成。
使用备份恢复数据库!
注:参数文件 数据文件 控制文件 REDO文件无损状态下恢复到备份中的数据库状态的笔记没有被纪录在此,大家请看视频。
1 找到数据文件的位置!
RMAN> SELECT NAME FROM V$DATAFILE; (具体情况视你当前系统为准)
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbfs
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
我们可以看到所有的数据文件都在 “/u01/app/oracle/oradata/orcl/”目录中。
2 关闭数据库并删除所有的数据文件
RMAN> shutdown immediate
database closed
database dismounted
Oracle instance shut down
退出rman 并使用linux命令删除所有的数据文件
RMAN> exit
Recovery Manager complete.
在linux命令行下删除下面的数据文件。(此处以我的操作系统目录为主。大家请按自己的自身真实目录情况删除对应的文件)
rm -rf /u01/app/oracle/oradata/ORCL/system01.dbf
rm -rf /u01/app/oracle/oradata/ORCL/sysaux01.dbf
rm -rf /u01/app/oracle/oradata/ORCL/undotbs01.dbf
rm -rf /u01/app/oracle/oradata/ORCL/users01.dbf
第二种方法 切换近存储数据文件的目录后,进行对文件的删除,千万不要删除其他文件。(此处以我的操作系统目录为主。大家请按自己的自身真实目录情况删除对应的文件)
cd /u01/app/oracle/oradata/orcl/
rm -rf system01.dbf
rm -rf sysaux01.dbf
rm -rf undotbs01.dbf
rm -rf users01.dbf
3 使用RMAN启动数据库,这里也可以使用sqlplus / as sysdba启动数据库,我主要是为了方便所以用了RMAN.
rman target /
Recovery Manager: Release 12.2.0.1.0 - Production on Sun Oct 18 03:29:57 2020
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN> startup
Oracle instance started
database mounted
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of startup command at 10/18/2020 03:30:10
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
可以看到数据库无法启动,主要是因为我们刚才输出了所有的数据文件造成的。
4 使用备份恢复所有的数据文件,但是要先确定你的操作系统现在是mount状态。
RMAN> select status from v$instance;
STATUS
------------
MOUNTED
已经确定了是MOUNT状态,恢复数据库。
RMAN> restore database; --<还原数据文件>
数据文件恢复完成!
5 对数据库进行介质恢复
RMAN> recover database;
Starting recover at 2020-10-18 03:34:39
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 6 is already on disk as file /u01/app/oracle/oradata/orcl/redo03.log
archived log file name=/u01/app/oracle/oradata/orcl/redo03.log thread=1 sequence=6
media recovery complete, elapsed time: 00:00:01
Finished recover at 2020-10-18 03:34:43
6 恢复完成以resetlogs;打开数据库
RMAN> alter database open resetlogs;
Statement processed
RMAN> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
OPEN
恢复步骤完成。
使用RMAN单独恢复某一个丢失的数据文件。
1 在数据库open状态下,我们删除user01.dbf
rm -rf /u01/app/oracle/oradata/ORCL/users01.dbf
sqlplus / as sysdba
SQL> shutdown immediate
ORA-01116: error in opening database file 7
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl/users01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
SQL> shutdown abort
ORACLE instance shut down.
2 进入到rman 启动数据库
rman target /
RMAN> startup
Oracle instance started
database mounted
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of startup command at 10/18/2020 03:48:59
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl/users01.dbf'
3 发现故障,这里教大家一个小妙招,使用“list failure;”命令查看数据库当前故障
RMAN> list failure;
Database Role: PRIMARY
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
---------- -------- --------- ------------------- -------
145 HIGH OPEN 2020-10-18 03:34:05 One or more non-system datafiles need media recovery
65 HIGH OPEN 2020-10-18 03:30:11 One or more non-system datafiles are missing
可以看到这里ORACLE已经告诉我们了,是因为一个或多个数据文件丢失,和我们刚才看到的上面的报错符合。
4 使用“advise failure;” 这个命令查看一下解决方案
RMAN> advise failure;
Database Role: PRIMARY
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
---------- -------- --------- ------------------- -------
145 HIGH OPEN 2020-10-18 03:34:05 One or more non-system datafiles need media recovery
65 HIGH OPEN 2020-10-18 03:30:11 One or more non-system datafiles are missing
analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
analyzing automatic repair options complete
Mandatory Manual Actions
========================
no manual actions available
Optional Manual Actions
=======================
1. If you restored the wrong version of data file /u01/app/oracle/oradata/orcl/users01.dbf, then replace it with the correct one
2. If file /u01/app/oracle/oradata/orcl/users01.dbf was unintentionally renamed or moved, restore it
3. If you have an export of tablespace USERS, offline its data files, open the database read/write, then drop and re-create the tablespace and import the data.
Automated Repair Options
========================
Option Repair Description
------ ------------------
1 Restore database and recover with UNTIL CANCEL option
Strategy: The repair includes recovery in NOARCHIVELOG mode with some data loss
Repair script: /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_1759053517.hm
这里的最后一行“Repair script: /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_1759053517.hm” 给出了我们一个恢复方案脚本。
我们查看一下这个方案
cat /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_1759053517.hm
# database restore and recover until cancel
restore database;
recover database;
alter database open resetlogs;
那么我们按照他的办法来。
RMAN> restore database;
Starting restore at 2020-10-18 04:12:25
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=1 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/orcl/system01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/orcl/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/orcl/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/orcl/users01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1 tag=TAG20201018T030224
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:28
Finished restore at 2020-10-18 04:12:56
RMAN> recover database;
Starting recover at 2020-10-18 04:13:02
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 1 is already on disk as file /u01/app/oracle/oradata/orcl/redo01.log
archived log file name=/u01/app/oracle/oradata/orcl/redo01.log thread=1 sequence=1
media recovery complete, elapsed time: 00:00:01
Finished recover at 2020-10-18 04:13:05
RMAN> alter database open resetlogs;
Statement processed
RMAN>
恢复成功!
第二种我们在数据库关闭的情况下删除我们的某个数据文件。
RMAN> shutdown immediate
database closed
database dismounted
Oracle instance shut down
RMAN> exit
Recovery Manager complete.
可以看到报错了
rman target /
Recovery Manager: Release 12.2.0.1.0 - Production on Sun Oct 18 04:37:50 2020
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN> startup
Oracle instance started
database mounted
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of startup command at 10/18/2020 04:38:05
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl/users01.dbf'
列出故障并且分析相关故障得到脚本
RMAN> list failure;
RMAN> advise failure;
具体步骤就不再贴出来了。大家请按照实际情况进行数据库恢复。
关于SQLPLUS与RMAN中的报错信息的查看方式:
大家记住:
SQLPLUS中的报错信息查看方式是从上至下阅读的。
RMAN中的报错信息查看方式是从下至上阅读的。
0 先检查备份文件状态。
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
1 Full 1.08G DISK 00:00:23 2020-10-18 03:02:47
BP Key: 1 Status: AVAILABLE Compressed: NO Tag: TAG20201018T030224
Piece Name: /u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1
List of Datafiles in backup set 1
File LV Type Ckp SCN Ckp Time Abs Fuz SCN Sparse Name
---- -- ---- ---------- ------------------- ----------- ------ ----
1 Full 1911910 2020-10-18 02:57:41 NO /u01/app/oracle/oradata/orcl/system01.dbf
3 Full 1911910 2020-10-18 02:57:41 NO /u01/app/oracle/oradata/orcl/sysaux01.dbf
4 Full 1911910 2020-10-18 02:57:41 NO /u01/app/oracle/oradata/orcl/undotbs01.dbf
7 Full 1911910 2020-10-18 02:57:41 NO /u01/app/oracle/oradata/orcl/users01.dbf
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
2 Full 10.19M DISK 00:00:01 2020-10-18 03:03:19
BP Key: 2 Status: AVAILABLE Compressed: NO Tag: TAG20201018T030318
Piece Name: /u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00
SPFILE Included: Modification time: 2020-10-18 03:00:30
SPFILE db_unique_name: ORCL
Control File Included: Ckp SCN: 1911910 Ckp time: 2020-10-18 02:57:41
现在备份未见状态是AVAILABLE 正常状态。
RMAN> crosscheck backup;
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=49 device type=DISK
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1 RECID=3 STAMP=1054098616
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00 RECID=4 STAMP=1054098658
Crosschecked 2 objects
现在备份未见状态是AVAILABLE 正常状态。
1 删除所有备份 切换到full目录下,删除所有的备份文件,可以用直接路径删除,也可以进入到“/u01/app/oracle/product/12.2.0/db_1/”目录下 将两个备份片删除。
rm -rf /u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1
rm -rf /u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00
2 通过备份文件我们可以看到
RMAN> crosscheck backup;
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=47 device type=DISK
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1 RECID=1 STAMP=1054090945
crosschecked backup piece: found to be 'EXPIRED'
backup piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00 RECID=2 STAMP=1054090999
Crosschecked 2 objects
两个备份文件现在的状态都是 EXPIRED;
3 删除过期的备份文件
RMAN> DELETE EXPIRED BACKUP;
using channel ORA_DISK_1
List of Backup Pieces
BP Key BS Key Pc# Cp# Status Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
1 1 1 1 EXPIRED DISK /u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1
2 2 1 1 EXPIRED DISK /u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00
Do you really want to delete the above objects (enter YES or NO)? yes
deleted backup piece
backup piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/01vd89m0_1_1 RECID=1 STAMP=1054090945
deleted backup piece
backup piece handle=/u01/app/oracle/product/12.2.0/db_1/dbs/c-1580544767-20201018-00 RECID=2 STAMP=1054090999
Deleted 2 EXPIRED objects
他这里列出了过期的文件 还询问你是否真正的删除。我们填 YES 或 yes 确认删除
4 使用list backup;
RMAN> list backup;
specification does not match any backup in the repository
5 crosscheck backup;
RMAN> crosscheck backup;
using channel ORA_DISK_1
specification does not match any backup in the repository
确认失效的备份已经删除掉了。
控制文件的备份
RMAN中使用以下命令去备份控制文件:
backup current controlfile format '/full/contorl_%d_%T_%s_%p';
使用以下语句将控制文件备份到二进制文件(现有控制文件的副本):
ALTER DATABASE BACKUP CONTROLFILE TO '/home/oracle/control.bkp';
生成可用于重新创建控制文件的SQL语句:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/home/oracle/con.sql';
RMAN备份参数
在当前课程使用的ORACLE 19c版本的数据库,在RMAN下执行SHOW ALL命令后可以输出相关参数:默认的
RMAN> show all;
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19c/db_1/dbs/snapcf_orcl.f'; # default
参数解释:
控制rman备份冗余策略的
CONFIGURE RETENTION POLICY TO REDUNDANCY 1;份数
configure retention policy to recovery window of 7 days;天数
并且我们要知道,这两个参数是互斥的。
开启RMAN备份优化器
CONFIGURE BACKUP OPTIMIZATION OFF;
rman备份是支持增量备份的 而Oracle数据库又可以为增量备份提供一个追踪文件
这个参数的作用就是每次备份时 是否使用追踪文件
RMAN备份的介质类型
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
介质:产生的备份文件能够存放在哪种类型的存储上
磁盘类型 disk 优点 写入速度快 缺点 数据不易长久保留10年以上
磁带类型 sbt 优点 数据能够长久保留 缺点 写入数度较慢(看情况)
RMAN备份是否生成控制文件自动备份 以及生成的控制文件自动备份存放在哪
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’;
自动备份打开时,会在人为备份完成后,再自动备份一遍当前的控制文件。因为你在上面的备份完成后,控制文件里面记载的信息就发生了变化的,自动备份就会把它再备一遍。
自动备份关闭时,就不会最后再备一遍了。需要你手工执行最后一次备份,因为我们在使用RMAN进行备份的时候,要想能实现准确的数据库完全恢复的话,就一定要在备份的最后再做一次控制文件的备份。
%F=$ORACLE_HOME/dbs/c-dbid-日期-第几份
RMAN备份时开启多少个并发
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
如果想改成并发为2的话,请使用下面的语句:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
并发数越多越能提升数据库备份速度
RMAN的并发功能
channel
当对RMAN进行并发操作时 会影响到产生的备份集和备份片数量
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database format ‘/full/full_%d_%T_%s_%p’;
release channel c1;
release channel c2;
release channel c3;
}
如果开启RMAN并发备份 那么备份的文件数一定大于通道数 (尽量让每个文件都可以在专属的通道工作)
因为通道已文件为单位工作
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup database format ‘/full/orcl_%d_%T_%s_%p’;
release channel c1;
release channel c2;
}
如果你分配的通道数量大于你的PARALLELISM 数量,则按照你分配的通道数量进行备份 !!!
注:对xxxx_%d_%T_%s_%p’进行解释
%d:数据库名
%T:备份的日期
%s:备份集
%p:备份片
backup database;=备份所有数据文件(不包含临时文件) + 控制文件和参数文件(自动备份备份的)
控制文件一定要最后备份 可以通过自动备份控制文件解决这个问题,上文已经提到过了。因为之前所有的备份信息 都会记录到控制文件中
备份集与备份片
backup set 备份集:RMAN备份数据的基本逻辑单位 根据通道数 会产生对应数量的备份集
backup piece 备份片:RMAN备份中备份文件的基本物理单位 备份片属于备份集
section size指定备份集中 备份片的最大值
backup database section size=100m format ‘/full/orcl_%d_%T_%s_%p’;
指定备份片大小 在生产上非常常用
因为RMAN备份出来的备份文件 通常不跟数据库或数据文件所在的服务器放在一起
RMAN复制操作时 默认的复制份数
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
RMAN产生的备份集最大值 一般都是不限制
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
RMAN设置备份与恢复时需要输入的密码
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM ‘AES128’; # default
压缩参数
CONFIGURE COMPRESSION ALGORITHM ‘BASIC’ AS OF RELEASE ‘DEFAULT’ OPTIMIZE FOR LOAD TRUE ;
RMAN> backup as compressed backupset tablespace example format ‘/backup/%d_%U.BAK’;–压缩加分片
压缩比在5:1左右
归档删除策略
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;
归档删除:删除上一次全备之前产生的归档
delete noprompt expired archivelog all;
或者在备份完成后手工删除也可以。
控制文件的快照备份
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/u01/app/oracle/product/19c/db_1/dbs/snapcf_orcl.f’; # default
快照控制文件是由RMAN恢复管理器在系统指定位置生成的当前控制文件的一个副本。我们知道控制文件在整个数据库生命周期中在不断的时时刻刻发生变化,RMAN备份需要依赖于控制文件或恢复目录,也就是说需要知道备份开始时的检查点SCN以及所有文件结构信息并且在整个备份期间这些信息需要保持一致,但又不能锁定控制文件(锁定操作无法执行检查点,切换日志等)。因此既要保持一致性,又不影响数据库的正常操作。快照控制文件就应运而生了。RMAN只在备份或同步操作期间对实际控制文件进行一个短暂的锁定,并根据其内容来生成或刷新快照控制文件。一旦该动作完成之后,RMAN将切换到使用快照控制文件进行备份及同步操作。从而保证备份期间控制文件,数据文件等等的一致性。
综上所述,其主要作用是使用RMAN同步恢复目录或备份时能得到一个一致性的控制文件
他保存在$ORACLE_HOME/dbs目录下
设置快速恢复区
查看快速恢复区参数
show parameter recover
创建快速恢复路径
mkdir -p /u01/app/oracle/fra
先设置快速恢复区大小
alter system set db_recovery_file_dest_size = 5G scope=both;
System altered.
alter system set db_recovery_file_dest='/u01/app/oracle/fra' scope=both;
System altered.
RMAN JOB
RMAN FORMAT格式参数的意义:
%d:数据库名
%T:备份的日期
%s:备份集
%p:备份片
完整的RMAN JOB:
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database format '/full/full_%d_%T_%s_%p';
release channel c1;
release channel c2;
release channel c3;
}
这里我们修改相关的并发度
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
独立备份控制文件和参数文件命令:
backup current controlfile format '/full/ctl_%d_%T_%s_%p';
backup spfile format '/full/bak/%d_%U.spfile';
并发度的这个设置值遇到手工分配通道的话,以手工分配通道为准,如果没有手工通道的话,以设置的值为准。
RMAN CATALOG
一、创建恢复目录CATALOG
在存储恢复目录的数据库创建表空间用于存储恢复目录schema及恢复目录数据(本文使用已经创建好的数据库catadb来存储恢复目录)
一 创建rman恢复目录表空间
如果你的catalog库使用的是一般文件系统并且为非OMF的话可以使用以下命令创建表空间:
create tablespace tbs_rman datafile '/u01/app/oracle/oradata/orcl/tbs_rman01.dbf' size 200m autoextend on;
如果你的catalog库使用的是ASM并且为OMF模式的话可以直接使用下面的命令(我们在将ASM的时候,默认是OMF的)
CREATE TABLESPACE tbs_rman DATAFILE SIZE 200M autoextend on;
如果你的catalog库使用的是ASM并且不是OMF模式的话可以直接使用下面的命令:根据自己的真实情况去进行目录修改,学会举一反三
create tablespace tbs_rman datafile '+DATADG/ORCL/datafile/tbs_rman01.dbf' size 200m autoextend on;
二 创建catalog要用的用户:
create user rman identified by rman temporary tablespace temp default tablespace tbs_rman quota unlimited on tbs_rman;
三 给用户赋权
grant recovery_catalog_owner to rman;
四 检查权限
conn rman/rman
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
ALTER SESSION
CREATE TABLE
CREATE CLUSTER
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
SQL> select * from session_roles;
ROLE
------------------------------
RECOVERY_CATALOG_OWNER
编辑TNSNAMES文件(在备份的目标库上):
CATALOG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle19c-asm)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
五 连接到恢复目录
rman catalog rman/rman@CATALOG
connected to recovery catalog database
六 创建恢复目录
create catalog tablespace tbs_rman;
recovery catalog created
七 连接到目标数据库及恢复目录
rman target sys/oracle@orcl catalog rman/rman@CATALOG
connected to target database: ORCL (DBID=1589905916)
connected to recovery catalog database
RMAN> register database; --将目标数据库注册到恢复目录
database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
最终查询一下 切换到rman用户
select * from rc_database;
select db_key, db_name, ts#, name, creation_time from rc_tablespace;
478

被折叠的 条评论
为什么被折叠?



