动态日志文件分配功能可防止由于数据库服务器未用完日志空间而由长事务回滚导致的挂起问题。DYNAMIC_LOGS 配置参数指定动态日志文件分配功能是关闭还是开启,或者使服务器暂停以允许手动添加逻辑日志文件。
动态日志分配使您能够执行以下操作:
- 在系统活动时,甚至是在快速恢复期间添加逻辑日志文件。
- 在当前日志文件之后紧跟着插入逻辑日志文件,而不是将其附加到最后。
- 立即访问逻辑日志文件(即使根数据库空间没有备份)。
DYNAMIC_LOGS 配置参数的缺省值为
2,这表示当数据库服务器检测到包含打开的事务的下一个日志文件时,它自动在当前日志文件之后分配新的逻辑日志文件。数据库服务器自动检查在以下时刻位于当前日志之后的日志是否仍然包含打开的事务:
当使用 DYNAMIC_LOGS 的缺省值
2 时,数据库服务器为您确定新逻辑日志的位置和大小:
- 数据库服务器使用以下条件确定要分配新日志文件的磁盘:
- 镜像的数据库空间优先
- 避免使用根数据库空间,除非没有其他关键根数据库空间可用
- 最后考虑的空间是未镜像和非关键数据库空间
- 数据库服务器为新逻辑日志文件的大小使用最大日志文件和最小日志文件的平均大小。如果对于此平均大小没有足够的连续磁盘空间可用,那么数据库服务器会搜索下一个最小平均大小的空间。数据库服务器为新日志文件最少分配
200 KB 的空间。
如果要控制附加日志文件的位置和大小,那么将 DYNAMIC_LOGS 设置为
1。当数据库服务器切换日志文件时,它仍会检查下一个活动的日志是否包含打开的事务。如果在下一个活动的日志中的确发现了打开的事务,那么数据库服务器执行以下操作:
- 发出警报事件 27(需要日志)
- 将警告消息写入到联机日志
- 暂停并等待管理员用 onparams -a -i 命令行选项手工添加日志
可以编写将在警报事件 27 发生时执行的脚本,执行带有要用于新日志的位置的 onparams -a -i。您的脚本还可以执行 onstat -d 命令,以检查是否有足够的空间,并执行带有足够空间的位置的 onparams -a -i 命令。必须使用 -i 选项在当前日志文件之后添加新的日志。
如果将 DYNAMIC_LOGS 设置为 0,那么数据库服务器仍检查在切换日志文件时下一个活动的日志是否包含打开的事务。如果在下一个活动的日志中的确找到了打开的事务,那么数据库服务器发出以下警告:
警告:最旧逻辑日志文件 (%d) 包含来自打开的事务 (0x%p) 的记录,但是动态日志文件
功能已关闭。