最初没有记录表的目的是什么

Chr*_*ich 5 db2 ddl transaction-log

我最近遇到了这个。在 DB2 LUW(至少 9.5 或更高版本)中定义表时,可以将其定义为NOT LOGGED INITIALLY.

我读过的书中的例子:

CREATE TABLE products (
    productID      INT,
    product_Name   VARCHAR(30)
)
NOT LOGGED INITIALLY;
Run Code Online (Sandbox Code Playgroud)

文档我已阅读状态,该表是不是在执行过程中记录INSERTUPDATEDELETECREATE INDEXALTER TABLE,或DROP INDEX直到COMMIT被执行的语句。之前的所有内容都COMMIT不会被记录。之后的一切COMMIT都是。

显然,只要您将表定义为NOT LOGGED INITIALLY,您就可以随时发出 anALTER TABLE <table-name> ACTIVATE NOT LOGGED INITIALLY将表重新置于非日志记录状态,直到COMMIT再次发出a 为止。

他们举了一个例子,我可以看到这可能有用。我读过的那本书说你可以发布以下内容

ALTER TABLE <table-name> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
Run Code Online (Sandbox Code Playgroud)

这显然会删除表中的所有数据而不记录它。我可以理解这在您希望清除数据并重新测试的测试环境中是可取的,而无需记录删除以进行回滚的性能开销。

但除此之外,我感到困惑。您是否有任何理由不想在测试环境之外登录表?这种桌子还有什么其他用途?

小智 5

经典的现实示例是我创建的表是来自静态外部源的副本。如果数据库在初始加载期间出现故障,与完全记录事务的开销相比,删除部分加载的表并从头开始导入操作会更快。

例如,我正在使用交易环境备份文件中的客户列表加载我的报告环境。