最近使用SQL Anywhere 10 意外的发现掉数据的问题.
情况:
就是如果直接把数据库服务意外关闭了! 结束之前的数据操作就会丢失!
每次有一个检查点! 如果你进程结束没有新增执行检查点的话! 这样就会丢失数据
说明:
执行 COMMIT 语句使对数据库进行的更改成为永久更改。
执行 ROLLBACK 语句撤消由事务执行的所有更改。
执行具有自动提交副作用的语句:数据定义命令(如 ALTER、CREATE、COMMENT 和 DROP)都具有自动提交副作用。
与数据库断开连接将执行隐式回退。
总结:也就是说在SQL Anywhere 10 没有提交事务的话,出现意外的中断,就会导致日志回滚,导致数据丢失.
作用在使用过程中一定要注意事务的提交
在SQL Anywhere 10 的COMMIT执行中要注意的问题
1就是Interactive SQL执行,10 默认是退出 才提交 COMMIT,如果执行过程没有退出,就回很容易掉掉数据
控制是否在各条语句后执行 COMMIT。
On、Off
Off
如果 auto_commit 为 ON,则会在每条语句成功完成后执行数据库 COMMIT。
缺省情况下,只有在用户发出 COMMIT 或 ROLLBACK 语句或导致自动提交的 SQL 语句(例如 CREATE TABLE 语句)时才执行 COMMIT 或 ROLLBACK 语句。
处理方式:
在Interactive SQL要执行提交
要在
工具-选项-提交
各命令之后 打勾
在Interactive SQL酒会各个命令后就提交
2就是ODBC执行不一样
根据您使用的接口以及控制自动提交行为的方式,自动提交模式的行为会稍有不同。
实现自动提交模式可以采用以下两种方式之一:
客户端自动提交 当应用程序使用自动提交时,客户端库在每一个 SQL 语句执行之后发送 COMMIT 语句。
ADO.NET、ADO/OLE DB、ODBC 和 PHP 应用程序从客户端控制提交行为。
服务器端自动提交 应用程序关闭链接模式时,数据库服务器提交每个 SQL 语句的结果。此行为在使用 JDBC 的情况下由 chained 数据库选项隐式控制。
嵌入式 SQL、JDBC 和 Open Client 应用程序操纵服务器端提交行为(例如,这些应用程序设置 chained 选项)。
对于复合语句(如存储过程或触发器),在客户端和服务器端自动提交之间有一些区别。从客户端看,存储过程是单一语句,因此自动提交将在整个过程执行之后发送单一提交语句。从数据库服务器的角度来看,存储过程可以由许多 SQL 语句构成,因此服务器端自动提交将提交该过程内的每个 SQL 语句的结果。