-N No Logging 没有日志
-U Unbuffered Logging   非缓冲日志
-B Buffered Logging   缓冲日志
-A Unbuffered Logging, Mode ANSI   ANSI模式
No Logging 没有日志
----“没有日志”模式只向逻辑日志写很少的信息,它只记录执行的DDL语句,这些语句影响到的行并不被写入日志中,只记录命令本身以及返回的代码。一个不带日志的数据库环境可以具有很高的吞吐率,但在发生严重的实例失败时没有能力重建对数据库的修改。写到磁盘上的修改才是可以得到的全部信息。对实例中不带日志数据库的恢复只能到最后一次创建的实例备份中进行。

Unbuffered Logging   非缓冲日志
----使用“非缓冲日志”模式的数据库环境只要事务提交,就会将包含该事务信息的物理日志和逻辑日志缓冲区刷新到磁盘上。
----使用非缓冲日志,即使出现严重的实例错误,数据完整性和一致性也可以在事务级得到保证。但是因为每一次提交事务都会导致缓冲区被刷新到磁盘上,所以增加了磁盘I/O。另外,因为刷新是按照当前事务的进度将整个缓冲区内容都写到逻辑日志中,所以逻辑日志的页面中会有很多没有用的数据。日志填充得很快,但其中包含的“真正”数据却比缓冲日志数据库环境少得多。

Buffered Logging   缓冲日志
----使用“缓冲日志”模式的数据库环境将在逻辑日志和物理日志缓冲区中保留这些事务信息,直到该缓冲区填满,或者发生检查点操作,或者是当事务还没有被写往日志之前关闭了产生该事务的用户连接。
----有这样一种情况可以强迫缓冲日志数据库写出它的事务信息:因为实例中只有一组逻辑日志缓冲区,当实例中的一个非缓冲日志数据库提交一个事务时,缓冲日志信息会随着非缓冲日志信息一起被写出到磁盘上。
----在“缓冲日志”数据库环境中,每个事务所造成的磁盘I/O大大降低,因此实例会运行得较快,但是因为事务信息存储在共享内存中,严重的实例错误就会很危险,当实例的共享内存被释放时,那些还没有写到磁盘上的事务信息就都丢失了。

*非缓冲日志模式和缓冲日志模式的操作方式完全相同,其不同点在于何时将日志记录写到磁盘上,

Unbuffered Logging, Mode ANSI   ANSI模式
---- ANSI模式的操作与非缓冲日志一样,但它还强制与ANSI事务处理方式一致。ANSI一致性包括这样一些特点和规则,如对引用表的唯一属主命名,表级权限的不同缺省值,游标读和更新能力的不同,以及character和decimal数据类型对数据类型越界或定义语句如何反应的不同。
*OnLine Dymanic Server在ANSI数据库环境中并不严格强制遵从所有的ANSI标准,如果你执行一条非ANSI的SQL语句,实例会产生一条警告信息,但仍然往下处理。除非操作环境要求使用ANSI标准,否则使用ANSI模式不会得到任何好处。


用ontpae改变日志模式:
ontape –N sales将数据库”sales”从-U,-B,-A其中一种模式改变到-N模式,

ontape  –U sales将数据库”sales”从-N改变到-U模式,

ontape  –B sales将数据库”sales”从-N改变到-B模式,
ontape  –A sales将数据库”sales”从-N改变到-A模式,

ontape工具在-U,-B,-A三种模式中任何一种改变到另一种不需创建系统备份;
要完全从不带日志模式改成带日志模式,或者反过来,需要创建一个0级备份;


用ondblog改变日志模式:
ondblog工具只是设置一个标志,表示在下次0级备份之后将数据库日志模式改成什么。



ondblog工具的选项如下:
nolog 将数据库改为不带日志模式
unbuf 非缓冲日志
buf 缓冲日志
ansi ANSI日志模式
cancel 取消前面作出的改变日志模式的请求


附加选项:
1.用空格相隔的一些数据库名,这些数据库的日志模式将被改变。
2.–f选项跟一个文件名,该文件中包含要改变日志模式的数据库名,这些数据库名在文件中单独列出,一个占一行。
*如果没有–f加文件名,也没有列出用空格相隔的数据库名,ondblog工具在下一次0级备份之后将把实例中所有数据库都改成所要求的日志模式。
* 不管是使用ontape工具,还是使用ondblog 和ontape的组合改变数据库的日志模式,该实例都不必处于quiescent状态,但是在试图改变日志模式的时候,不能有任何活动用户线索连接在该实例上。否则的话,就会产生一个”-107”号错误。
* 如果ontape命令已经执行来改变数据库的日志模式,而中途又将其中断,则就用户连接来说,该数据库仍然是关闭的,直到创建一个完全的实例备份为止,不管是否要改变日志模式


通过下面语句查看数据库的日志模式


echo "select  * from sysdatabases"|dbaccess sysmaster