设为首页 加入收藏 网站搜索 繁體中文 中国建站网 — 站长资源分享平台

SYBASE 数据库迁移到AS 400 db2的FAQ(五)

来源:本站整理 作者:佚名 时间:2006-03-02 15:18:23

 以下是我最后的一篇文章。

41.quiesce是一种持续状态的锁,它属于一个连接,当该连接失败时,quiesce状态依然存在。如何将表空间的状态置为正常状态?

答:除去quiesce状态:
1. 连接到数据库

2. 用 list tablespaces 判断哪个tablespace处于quiesce状态和和取得对象(object)ID

3. 判断对象ID对应的表

用 db2 "select tabname from syscat.tables where tablid=对象ID" 得到表名

b)用 db2 list history 判断是那个表

4. 用 db2 quiesce tablespaces for table 表名 reset 去除quiesce状态

42.在DB2 UDB中如何创建用户定义临时表?

答:可使用 DECLARE GLOBAL TEMPORARY TABLE 语句来定义临时表。此语句需在应用程序中使用。只有在应用程序与数据库断开连接之前,用户定义临时表才是持续的。
此表的说明并不出现在系统目录中,使其对于其他应用程序而言不是持续的,也不能与其他应用程序共享此表。
当使用此表的应用程序终止或与数据库断开连接时,此表中的数据被删除, 此表被隐式卸下。
下面是定义临时表的一个示例:
   DECLARE GLOBAL TEMPORARY TABLE gbl_temp
      LIKE empltabl
      ON COMMIT DELETE ROWS
      NOT LOGGED
      IN usr_tbsp
此语句创建一个名为 gbl_temp 的用户临时表。定义此用户临时表 所使用的列的名称和说明与 empltabl 的列的名称和说明完全相同。隐式定义只包括列名、数据类型、可为空特性和列缺省值属性。未定义所有其他列属性,包括唯一约束、外部关键字约束、触发器和索引。执行 COMMIT 操作时, 若未对该表打开 WITH HOLD 游标,则该表中的所有数据都被删除。不记录 对用户临时表所作的更改。用户临时表被放在指定的用户临时表空间中。此表空间必须存在,否则此表的声明将失败。

 

43.在使用IMPORT命令向数据库出入数据时,如何避免日志空间满错误?

答:在执行IMPORT命令时, 如果使用循环日志, 有时会出现日志满错误,
这时可用COMMITCOUNT参数来解决.
因为日志空间满往往是因为所有的日志均处于活动状态导致的.
而COMMIT执行后, 会释放所占据的资源, 其中包括日志 .
这样, 被当前事务使用的日志在COMMIT命令执行后, 即变成非活动状态了

44.怎么样检查数据库连接有关的错误?

答:以TCP/IP连接为例, 若连接失败,您可以检查下列项目:
A) 在服务器上: 1) db2comm 注册表值包括值 tcpip。
输入 db2set DB2COMM 命令, 以检查 db2comm 注册表值的设置。有关详情,请参考管理指南。
2) 正确地更新了 services 文件。
3) 在数据库管理程序配置文件中正确地更新了服务名 (svcename) 参数。
4) 安全服务已启动。输入 net start db2ntsecserver 命令(仅对于 Windows NT 服务器)。
5) 正确地创建并编目了数据库。
6) 数据库管理程序已停止并再次启动(在服务器上输入 db2stop 和 db2start 命令)。
* 如果在启动一个协议的连接管理程序时出现问题,则会出现警告信息,并将错误信息记录在 db2diag.log 文件中。

B) 在客户机上: 1) 正确地更新了 services 和 hosts 文件(若使用过的话)。
2) 使用正确的主机名 (hostname) 或 IP 地址 (ip_address)编目了此节点。
3) 端口号必须匹配,或服务名必须映射为服务器上所用的端口号。
4) 在数据库目录中指定的节点名 (node_name) 指向节点目录中的正确项目。
5) 数据库已正确编目, 它使用在服务器上创建该数据库时编目的服务器的数据库别名(database_alias),作为客户机上的数据库名 (database_name)。

验证这些项目后,若连接仍失败,则参考 DB2 Troubleshooting Guide

45.一种可以绕开删除整个表操作时遇到交易日志已满的办法

答:以空文件为数据文件导入(IMPORT)并替换(REPLACE)目标表和删除(DELETE)表操作的对比

当用DELETE TABLE命令删除整个表中数据时,该操作会逐条删除表中记录,并记入活动的交易日志。当表中数据量很大时,如果活动的交易日志不够大,就会遇到交易日志已满的错误,并回滚日志。即使活动的交易日志足够大,删除数据量很大的表的操作也会占用很多时间。用以空文件为数据文件导入(IMPORT)并替换(REPLACE)表的办法可以解决这个问题。例如
IMPORT FROM /dev/null OF DEL REPLACE INTO 目标表名

这样交易日志只会记录下该条命令,并立即释放所占的空间,而不会像删除命令一样逐条扫描记录,这就类似于DROP掉该表再创建一个完全相同只是没有数据的表一样。对于属于DMS表空间的表来说,删除命令逐条扫描记录,所占的记录空间仍标记为该表所用,而不立即释放空间,需要用REORG命令才可以释放剩余空间。用 LIST TABLESPACE SHOW DETAIL 可以对比两条命令执行后表空间中的剩余空间的大小。

用LOAD命令加REPLACE参数可以达到类似IMPORT命令加REPLACE的效果,但是由于LOAD本身不记日志,所以对于可恢复的数据库,LOAD完成后建议马上做一下联机备份的,相比之下,IMPORT命令加REPLACE操作上比较简单一些。
46. 怎么样获取表结构以及索引的信息

答:您可以使用"describe" 命令:
(1) 显示关于SELECT语句的 SQLDA 信息;
(2) 显示表或视图的列信息;
(3) 显示表或视图的索引信息;

举例:1) 下面的例子用于描述 SELECT 语句:
db2 "describe select * from staff"
SQLDA Information
sqldaid : SQLDA sqldabc: 896 sqln: 20 sqld: 7
Column Information
sqltype sqllen sqlname.data sqlname.length
--------------- ------ -------------- ---------------
500 SMALLINT 2 ID 2
449 VARCHAR 9 NAME 4
501 SMALLINT 2 DEPT 4

 

2) 下面的例子用于描述表结构:
db2 describe table user1.department
Table: USER1.DEPARTMENT
Column
name Type
schema Type
name Length Scale Nulls

[1] [2]  下一页

Tags:

  • 好的评价 如果您觉得好,就请您
      0%(0)
  • 差的评价 如果您觉得差,就请您
      0%(0)
  • 相关文章
    广告赞助

    文章随便看看 设计素材 建站学院 网页模板 视频教程

    网友评论

    共有 0 位网友发表了评论,得分 0 分,平均 0 分    查看完整评论

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 1分

    内 容:

             通知管理员 验证码: