增量备份的块更改跟踪特性通过记录每个数据文件的更改块来改善备份性能。
1.关于块更改跟踪
如果在主或备数据库上启用块更改跟踪,那么RMAN使用块更改跟踪文件来为增量备份识别更改过的块。通过读取这个小位图文件来确定哪些块更改过,RMAN避免必须扫描它备份的数据文件中的每个块。
块更改跟踪缺省情况下是禁用的。然而,避免全数据文件扫描的好处是相当大的,特别是在只有一小部分数据块在备份之间更改过的情况中**。如果备份策略涉及增量备份,那么建议启用块更改跟踪**。块更改跟踪不会更改用来执行增量备份的命令。块更改跟踪文件在初始化配置之后不需要维护。
如果启用了Oracle Active Data Guard选项,只能在物理备数据库上启用块更改跟踪。
1.1.关于块更改跟踪文件中的空间管理
Oracle数据库自动管理更改跟踪文件中的空间来保留涵盖最近的8个备份的块更改数据。当达到最大的8个位图时,最旧的位图会被跟踪当前更改的位图覆盖。
块更改跟踪文件维护位图,位图标记在备份之间数据文件中的更改。数据库在每次备份之前执行位图切换。
第一个级别0的增量备份扫描整个数据文件。接下来的增量备份使用块更改跟踪文件只扫描从上一次备份以后被标记为更改过的块。只有当基于在块更改跟踪文件中最旧的位图启用之后做的母备份时,增量备份才能用来优化。
当部署增量备份策略时要考虑8个位图的限制。例如,如果做一个级别0的数据库备份,随后做7个差异增量备份,那么块更改跟踪文件现在包含8个位图。如果这时做一个级别1的累积增量备份,那么RMAN不能优化备份,因为与级别0的母备份相对应的位图已经被跟踪当前更改的位图覆盖。
1.2.关于块更改跟踪文件的位置
缺省情况下,块更改跟踪文件作为OMF创建在DB_CREATE_FILE_DEST初始化参数指定的目的地。可以在启用块更改跟踪时将块更改跟踪文件通过指定名称来放置在你选择的任何位置。
一个块更改跟踪文件为整个数据库而创建。Oracle建议不要使用raw设备(即没有文件系统的磁盘)作为块跟踪文件。
RMAN不支持备份和恢复块更改跟踪文件。当确认块更改跟踪文件无效时,数据库重置文件。如果还原和恢复整个数据库或它的子集,那么数据库重置块更改跟踪文件,重新开始跟踪块更改。在做完级别0的增量备份之后,下一个增量备份可以使用块更改跟踪数据。
1.3.关于块更改跟踪文件的大小
块更改跟踪文件的大小与数据库的大小和启用的redo线程的数量成正比。
块更改跟踪文件的大小随着数据库的更改而增大和减小,与数据库更新的频率无关。通常来说,一个单一的实例的块更改跟踪需要的空间是跟踪的数据块大小的1/30,000。对于Oracle RAC环境,它是数据库大小的1/30,000乘以启用线程的数量。
以下因素可能会导致文件大于这个估计的提议值:
1) 为了避免数据库增长时分配空间的消耗,块更改跟踪文件以10MB开始。新的空间以10MB增长来分配。因此,对于任何大到大约300GB的数据库,文件的大小不小于10MB,对于大到大约600GB的数据库,文件的大小不小于20MB,等等。
2) 对于每个数据文件,最小320KB的空间会分配在块更改跟踪文件中,不管数据文件的大小。因此,数据库如果有大量相对较小的数据文件,块更改跟踪文件的大小会大于有少量大数据文件的包含相同数据的数据库。
2.启用块更改跟踪
当数据库打开或挂载时,可以启用块更改跟踪。
以下部分假设作为OMF在数据库区域(数据库维护活动的数据文件比如数据文件,控制文件,在线redo日志文件等的地方)创建块更改跟踪文件。
启用块更改跟踪:
1)启动SQL*Plus,使用管理员权限连接到目标数据库。
2)确保初始化参数DB_CREATE_FILE_DEST已经设置。
SHOW PARAMETER DB_CREATE_FILE_DEST
如果参数没有设置和数据库处于打开状态,那么使用以下语句设置参数:
ALTER SYSTEM SET
DB_CREATE_FILE_DEST = ‘/disk1/bct/’
SCOPE=BOTH SID=‘*’;
3)启用块更改跟踪。
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;
也可以使用以下语句在一个你选择的位置中创建块更改跟踪文件:
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE ‘/mydir/rman_change_track.f’ REUSE;
REUSE选项告诉Oracle数据库使用指定的名称覆盖任何已存在的块更改跟踪文件。
3.禁用块更改跟踪
当禁用块更改跟踪时,数据库从操作系统中移除块更改跟踪文件。
以下部分假设块更改跟踪特性当前已启用。
禁用块更改跟踪:
1)启动SQL*Plus,使用管理员权限连接到目标数据库。
2)确保数据库处于挂载或打开状态。
3)禁用块更改跟踪。
ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
4.检查是否已启用块更改跟踪
可以查询视图V$BLOCK_CHANGE_TRACKING来确认是否启用了块更改跟踪,如果是的话,可以查看块更改跟踪文件的文件名称。
COL STATUS FORMAT A8
COL FILENAME FORMAT A60
SELECT STATUS, FILENAME FROM V$BLOCK_CHANGE_TRACKING;
STATUS FILENAME
-------- ------------------------------------------------------------
ENABLED /disk1/bct/RDBMS/changetracking/o1_mf_2f71np5j_.chg
5.更改块更改跟踪文件的位置
为了移动块更改跟踪文件,可以使用ALTER DATABASE RENAME FILE语句。
数据库必须处于挂载状态。语句更新控制文件来指向新的位置和保留块更改跟踪文件的内容。如果不能关闭数据库,那么可以禁用和启用块更改跟踪,在这种情况中,会丢失存在的块更改跟踪文件的内容。
更改块更改跟踪文件的位置:
1) 启动SQL*Plus,使用管理员权限连接到目标数据库。
2) 确认块更改跟踪文件当前的名称。
SQL> SELECT FILENAME FROM V$BLOCK_CHANGE_TRACKING;
3)如果可能,关闭数据库。
SQL> SHUTDOWN IMMEDIATE
如果关闭了数据库,那么跳到下一步。如果选择不关闭数据库,那么执行以下SQL语句和跳过剩余的所有步骤。
SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE ‘new_location’;
在这种情况中,会丢失块更改跟踪文件的内容。
4)使用主机的操作系统命令,将块更改跟踪文件移到新位置。
5)挂载数据库,移动块跟踪文件到有更多空间的位置。
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RENAME FILE
‘/disk1/bct/RDBMS/changetracking/o1_mf_2f71np5j_.chg’ TO
‘/disk2/bct/RDBMS/changetracking/o1_mf_2f71np5j_.chg’;
命令更改块更改跟踪文件的位置,同时保留它的内容。
6)打开数据库:
SQL> ALTER DATABASE OPEN;
来源:《Oracle Database Backup and Recovery User’s Guide,19c》