SQL Anywhere 10 关于 COMMIT 掉数据的问题

最近使用SQL Anywhere 10 意外的发现掉数据的问题.

情况:

就是如果直接把数据库服务意外关闭了! 结束之前的数据操作就会丢失!

每次有一个检查点! 如果你进程结束没有新增执行检查点的话! 这样就会丢失数据

说明:

 

  • 执行 COMMIT 语句使对数据库进行的更改成为永久更改。

  • 执行 ROLLBACK 语句撤消由事务执行的所有更改。

  • 执行具有自动提交副作用的语句:数据定义命令(如 ALTER、CREATE、COMMENT 和 DROP)都具有自动提交副作用。

  • 与数据库断开连接将执行隐式回退。

  • 总结:也就是说在SQL Anywhere 10 没有提交事务的话,出现意外的中断,就会导致日志回滚,导致数据丢失.

    作用在使用过程中一定要注意事务的提交

    在SQL Anywhere 10 的COMMIT执行中要注意的问题

    1就是Interactive SQL执行,10 默认是退出 才提交 COMMIT,如果执行过程没有退出,就回很容易掉掉数据

     

    auto_commit 选项 [Interactive SQL]

     

    功能

     

    控制是否在各条语句后执行 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 语句的结果。

     

     

    posted on 2009-01-03 14:16  天下  阅读(452)  评论(0编辑  收藏  举报

    导航