gulpgg 发表于 2010-11-09 20:41

关于跨库查询的副作用问题

前段时间为了解决某一问题运用了informix的跨库查询。 同一个informix服务下有A,B两个库 A库的所有者是 Aowner   B库的所有者是 Bowner,为了实现跨库查询给Bowner授予了 A库的dba权限.这样代码中就可以使Bowner 在连接了 B库(用 exec sql database B ;)的同时 通过执行形如"select * from A:tabname"语句而查询A库中的表。按理说执行完以上语句 Bowner应该从A库断开了才是。但现在我再备份A库时提示我有其他用户在访问该库不能备份。(我在应用中不能把数据库服务停了,因为B库还要一直运行下去,只是想备份A库),想请教大家怎样把 Bowner跨库对A库的连接断开而顺利的进行对A库的备份.用onstat -g ses 等命令查看到的信息显示 当前所连接的库是 B库(因为代码中运用了 exec sql database B ;),而体现不出有 Bowner 对A的跨库访问.   谢谢大家!!

liaosnet 发表于 2010-11-09 20:46

没听说过数据库在访问就不能备份的~{:3_194:}{:3_194:}

gulpgg 发表于 2010-11-09 20:52

本帖最后由 gulpgg 于 2010-11-09 21:01 编辑

回复 2# liaosnet


    谢谢您的回答,我再执行 dbexportA 的时候,报有其它用户再访问。
-425 - Database is currently opened by another user.
-107 - ISAM error:record is locked.

liaosnet 发表于 2010-11-09 20:57

回复liaosnet


    谢谢您的回答,我再执行 dbexportA 的时候,报有其它用户再访问。
gulpgg 发表于 2010-11-09 20:52 http://bbs3.chinaunix.net/images/common/back.gif


    这个需要独占权限~ 这个也不叫备份,这种方法一般用于导库、迁移。。:sleepy:
    备份一般用ontape / onbar

liaosnet 发表于 2010-11-09 21:03

回复 3# gulpgg


    你可以考虑使用onmode -z 杀掉连接到数据库的进程,然后再执行dbexport

gulpgg 发表于 2010-11-09 21:06

回复 4# liaosnet


    谢谢,学习了, 那是我平时的叫法不对,请问我怎么把Bower对A的跨库连接真正的断开而使对A的这个导库操作能够做下去呢?

gulpgg 发表于 2010-11-09 21:11

回复 5# liaosnet


    我用onstat -e ses 看到的ID 是我 用 语句 exec sql database B 所建立的会话。 如果把这个会话杀掉的话,那对B库的所有连接都断开了.我不想断开B的连接只是想断开 Bowner在访问B的同时而跨库访问A的连接。想断开的是这个跨库的对A的连接。再次感谢您。

liaosnet 发表于 2010-11-09 21:24

你要在那个库上做dbexport,就需要在那个库上onmode -z.
如果你不想onmode -z,那么,请你在程序中显式的退出操作。

gulpgg 发表于 2010-11-09 21:35

回复 8# liaosnet


    请问有没有一个命令完成断开对A库的所有连接,而不影响对B库的连接呢?

liaosnet 发表于 2010-11-09 21:38

回复liaosnet


    请问有没有一个命令完成断开对A库的所有连接,而不影响对B库的连接呢?
gulpgg 发表于 2010-11-09 21:35 http://bbs3.chinaunix.net/images/common/back.gif


    onmode -sy/ onmode -jy
页: [1]
查看完整版本: 关于跨库查询的副作用问题