我可以执行dump tran mid-transaction吗?此外,使用延迟对日志的影响?

时间:2017-03-14 03:26:26

标签: sql sybase

美好的一天,

两个问题: A)如果我有这样的事情:

COMPLEX QUERY
WAIT FOR LOG TO FREE UP (DELAY)
COMPLEX QUERY

这实际上有用吗?或者tempdb的日志段是否仍然保持完整,因为仍然保留第一个查询的日志。

B)在上面的情况中,是否可以让中间查询使用truncate_only执行dump tran?

(这是一个很长的链接,各种各样的查询一起运行。他们不会改变数据库中的任何内容,如果我不这样做,我也不会关心日志。必须。)

链的原因是因为我需要相同的两个临时表和一大堆变量,用于链中的各种查询(其中一些用于所有查询)。为了简单地由具有非常有限的SQL知识的用户使用查询链,我在长脚本的开头收集非常简单的信息,自动检索其余信息,然后通过脚本使用它

我怀疑其中任何一种都可行,但我想我也可以问。

Sybase版本15.7和12(12.?我不记得了)

谢谢, 谢夫。

根据我对@ michael-gardner答案的理解,这就是我的计划:

FIRST TEMP TABLES CREATION
MODIFYING OPERATIONS ON FIRST TABLES
COMMIT
QUERY1: CREATE TEMP TABLE OF THIS QUERY 
QUERY1: MODIFYING OPERATIONS ON TABLE
QUERY1: SELECT
COMMIT
(REPEAT)
DROP FIRST TABLES (end of script)

我读到了'选择进入'没有写入日志,所以我用创建创建表(由于其他原因我必须这样做),并使用select into existing table进行初始填充。 (临时表) 完成表格后,我放弃它,然后“提交”。 在链中的各个点我检查tempdb的日志段,如果它< 70%(通常在> 98%),我使用goto到达脚本的末尾,我放弃了最后一个temp表和脚本结束。 (所以不需要手册'在这里提交)

我误解了整个"在提交保留行"事情,那完全依靠智商,我在ASE。

1 个答案:

答案 0 :(得分:0)

在事务中间转储日志不会对日志空间量产生任何影响。只有存在提交(或回滚)时,Sybase日志标记才会移动;如果没有旧的打开事务(可以在syslogshold中找到)

,则只会移动

有几种不同的方法可以解决问题:

  • 向tempdb添加日志空间。

这不需要更改代码,也不是很困难。甚至可能tempdb的大小不适合系统,额外的日志空间对于使用tempdb的其他应用程序也很有用。

  • 重新编写脚本以在开头添加提交,并仅查询以后的事务。

这将完成一些事情。开头的提交会将日志标记向前移动,这将允许日志转储回收空间。然后,由于其余的查询只是读取,因此不应该是与它们关联的任何事务空间。请记住,事务日志仅存储有关插入/更新/删除的信息,而不是读取信息。

在上面列出的示例中,用户详细信息可以存储并提交到数据库,然后其余查询只是使用变量的这些详细信息的select语句,然后最终事务将清理表。在这种情况下,日志仅保留第一个事务和最后一个事务..但中间的查询不会填充日志。

如果不了解有关数据库配置或查询详情的更多信息,则很难更加详细。