【问题标题】:Informix: create table <table name> as select * from <old table> locked the DB, how to unlock it?Informix:create table <table name> as select * from <old table> 锁定了数据库,如何解锁?
【发布时间】:2017-02-25 01:02:18
【问题描述】:

我正在对表字段更改进行一些研发。所以,我需要一个表的克隆。

我运行了命令“create table &lt;table name&gt; as select * from &lt;old table&gt;”,它成功了。

但是,当我第二次运行时,我取消了中间的命令,之后我收到以下错误。

$ select count(*) from my_table_copy;
SQL -211: Cannot read system catalog (systables).
ISAM -154: ISAM error: Lock Timeout Expired
SQLSTATE: IX000 at /dev/stdin:1

当我尝试通过 Open Admin 获取数据库时,也出现了错误:

256 : 数据库查询失败:-

错误:-244 [Informix][Informix ODBC Driver][Informix]Could not do a 物理顺序读取以获取下一行。 sqlerrm(系统表) (SQLExecute[-244] 在

如何解决?

谢谢,

【问题讨论】:

  • 你说“我取消了中间的命令”——你到底是怎么取消这个操作的?我的猜测是用户会话可能仍然在持有 systables 的锁。
  • 我在 Unix 的命令提示符下执行此操作。我做了一个 Ctr-C 来取消命令。我检查了后台进程,操作系统端没有运行任何东西。

标签: informix


【解决方案1】:

您一定遇到了这些锁定错误,因为引擎正在回滚您的克隆表事务。

如果在标志列上存在带有 R 的事务,请使用“onstat -x”检查。 est.rb_time 列显示恢复完成过程的估计值。

我的建议?如果您不需要在新表上完全相同的实际数据,您可以放置​​一个“SET ISOLATION TO DIRTY READ;”在您的创建表命令之前。

【讨论】:

  • 谢谢亚历山大。一个小时后问题得到解决。桌子很大,正如你所说,回滚花了很多时间。我喜欢你设置脏读的建议,因为实际数据可能很谨慎,而对于研发我们只需要一个大集合,而不是精确集合。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2011-04-06
  • 2016-03-18
  • 2013-06-29
相关资源
最近更新 更多