关于块跟踪:
块跟踪会记录数据文件里每个块的更新信息,这些跟新信息保存在跟踪文件里,当启动块跟踪后,RMAN使用跟踪文件里的信息,只读取改变的块的信息,而不用对整个数据库进行扫描,从而提高了RMAN备份的性能。
块跟踪默认是禁用的,如果启用了增量备份,建议开启块跟踪,启用块跟踪后,不需要其他的维护的操作。第一个0级的增量备份扫描整个数据库。随后的增量备份使用块跟踪文件的信息,只扫描自上次备份以来被标记为change
的块。
在备份期间,跟踪文件会维护已经标记为change 的块的bitmap 信息。Oracle
会自动管理块跟踪文件的大小,只保留最近最近8次块的变化信息。超过8次,那么最前面的块的bitmap
信息会被覆盖。
注释:
要考虑块跟踪文件的8次限制与备份策略的关系。如果在0级备份之后又进行了7次不同的增量备份,那么这时的块跟踪文件就包含了8个bitmaps信息。如果再进行1级的增量备份,那么此时的增量就不是最优的,还是会扫描整个数据库。因为之前0级的bitmap信息被当前的bitmap
信息覆盖掉了,这样就没有了参考的依据。所以RMAN的备份策略要考虑到这个8次bitmap 的影响。
块跟踪文件:
块跟踪文件是针对整个数据库的,默认情况下,块跟踪文件会作为Oracle 管理文件在 DB_CREATE_FILE_DEST
指定的目录下创建。也可以放到其他的目录。Oracle 不建议使用裸设备来存放块跟踪文件。如果是RAC
环境,块跟踪文件必须放在共享设备上。
RMAN
不支持对块跟踪文件的备份与恢复。当数据库检测到块跟踪文件无效时,就会重设块跟踪文件。如果还原了数据库,那么数据库也会重设块跟踪文件,并从新进行跟踪。
块跟踪文件大小:
块跟踪文件的大小和数据库的大小以及重做日志启用的线程数量有关,跟踪文件的大小会根据数据库大小的变化而变化,和跟新频率没有关系。
以下因素会导致跟踪文件超过估计值:
为了避免跟踪文件占用太多的空间,初始值是10M,然后每次增加10M,如果数据库接近300G,那么跟踪文件不能小于10M,如果接近600G,不能小于20M。
每个数据文件在跟踪文件里最少需要分配320k的空间,所以如果有大量的小数据文件,块跟踪文件也会相对较大。
开启和关闭块跟踪:
--数据库在open 或者mount
状态都可以启用块跟踪。
参数:db_create_file_dest
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
---------------------- ----------- ---------
db_create_file_dest string +DATA
如果该参数没有设置,数据库在open状态,可以直接设置或者修改。
SQL> alter system set
db_create_file_dest='/u01/app/oracle';
System altered.
SQL> show parameter
db_create_file_dest
NAME TYPE VALUE
---------------------- ----------- -----------------
db_create_file_dest string /u01/app/oracle
视图:v$block_change_tracking
查看块跟踪的状态,跟踪文件的大小及位置
查看当前块跟踪的状态
SQL> select status from v$block_change_tracking;
STATUS
----------
DISABLED --->关闭状态
也可通过后台进程CTWR(修改跟踪进程)判断,CTWR进程负责维护新的修改跟踪文件
ps -elf | grep ctwr | grep -v grep
开启块跟踪
SQL> alter database enable block change tracking;
Database altered.
SQL> select * from
v$block_change_tracking;
STATUS FILENAME BYTES
---------- ------------------------------ ----------
ENABLED /u01/app/oracle/ORCL/changetra 11599872
cking/o1_mf_8zqj5157_.chg
跟踪文件是自动在db_create_file_dest设置的目录下生成的,大小约11M
通过后台进程CTWR判断
ps -elf | grep ctwr | grep -v grep
0 S oracle 10379 1 0 75 0 - 186111
? 22:30
? 00:00:00
ora_ctwr_orcl
关闭块跟踪
SQL> alter database disable block change tracking;
Database altered.
关闭块跟踪会删除跟踪文件
SQL> select status from
v$block_change_tracking;
STATUS
----------
DISABLED
如果db_create_file_dest目录没有设置,也可以在开启块跟踪时直接指定路径
SQL> alter database enable block change tracking using file
'/u01/app/oracle/track.log';
Database altered.
SQL> select * from
v$block_change_tracking;
STATUS FILENAME BYTES
---------- -------------------------- ---------
ENABLED /u01/app/oracle/track.log 11599872
更改跟踪文件的位置:
--可以使用alter database rename 语句来修改跟踪文件的位置,该命令会更新控制文件里的信息,命令必须在mount
状态下执行,如果数据库不能shutdown,那么可以先disable块跟踪,然后再指定新的位置,但是这样会丢失以前跟踪文件里的数据。
关闭数据库
SQL> shutdown immediate
移动文件
mv /u01/app/oracle/track.log /u01/app/track.log
启动到mount
sqlplus / as sysdba
SQL> startup mount
修改文件位置
SQL> alter database rename file '/u01/app/oracle/track.log' to
'/u01/app/track.chg';
OPEN数据库
SQL> alter database open;
查看
SQL> select * from v$block_change_tracking;
STATUS FILENAME BYTES
---------- -------------------------- ---------
ENABLED /u01/app/track.chg 11599872
注释:
在使用RMAN 增量备份的情况下,启动块跟踪,在做增量备份时会缩短RMAN
备份的时间,因为不用扫描整个数据库。但是块跟踪也会带来其他的一些开销。所以要根据实际情况决定是否启用块跟踪。