DB2中如何查询一个数据库中有多少张表

DB2中如何查询一个数据库中有多少张表,第1张

数据库中还有大量系统表的,所以我觉得你查某些模式下的表比较好:
select count() from syscattables where tabschema='GP'
GP为某用户模式。
当然也可以用
select count() from syscattables where tabschema='GP'
查出所有表的数量。
再查出有多少张系统表,就是在SYSIBM、SYSTOOLS下的表数目。相减就可以了。
我用的是DB2 V97。

在日常DB2的维护中,transaction log full是比较常见的问题,日志空间使用情况也是我们比较重视的问题,那么如何查看日志空间使用情况呢?
其实昨天在提到归档设置,我们知道DB2 在DATABASE级别有几个参数,如下决定了事物日志的使用空间大小
Log file size (4KB) (LOGFILSIZ) = 60000
Number of primary log files (LOGPRIMARY) = 16
Number of secondary log files (LOGSECOND) = 200
Changed path to log files (NEWLOGPATH) =
Path to log files = /db2inst1_log01/sample
如此我们可以计算分配给日志的空间大约是(200+16)600004/1024/1024大约50GB。
如果日志是单独的文件系统分区,我们在 *** 作系统上即可看到日志空间使用情况,对日志使用情况进行监控,可以看到如下信息:
$ df -g
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/db2inst1_log01 6000 5450 10% 1458 1% /db2inst1_log01
这个需要登录到系统,其实db2pd也是可以看到日志信息的
db2pd -d sample -logs
Database Partition 0 -- Database SAMPLE -- Active -- Up 34 days 17:30:12 -- Date 2013-11-26-104249558342
Logs:
Current Log Number 117123
Pages Written 33697
Cur Commit Disk Log Reads 0
Cur Commit Total Log Reads 0
Method 1 Archive Status Success
Method 1 Next Log to Archive 117123
Method 1 First Failure n/a
Method 2 Archive Status n/a
Method 2 Next Log to Archive n/a
Method 2 First Failure n/a
Log Chain ID 2
Current LSN 0x00001A2DDE649E70
Address StartLSN State Size Pages Filename
0x0700000177B795D0 00001A2CBFD88010 0x00000000 60000 60000 S0117104LOG
0x0700000177B806D0 00001A2CCE7E8010 0x00000000 60000 60000 S0117105LOG
0x0700000177B8B450 00001A2CDD248010 0x00000000 60000 60000 S0117106LOG
0x0700000177B82EF0 00001A2CEBCA8010 0x00000000 60000 60000 S0117107LOG
0x0700000177B9ECD0 00001A2CFA708010 0x00000000 60000 60000 S0117108LOG
0x0700000177BA27D0 00001A2D09168010 0x00000000 60000 60000 S0117109LOG
0x0700000177B79E30 00001A2D17BC8010 0x00000000 60000 60000 S0117110LOG
0x0700000177BAAD50 00001A2D26628010 0x00000000 60000 60000 S0117111LOG
0x0700000177B9FFD0 00001A2D35088010 0x00000000 60000 60000 S0117112LOG
0x0700000177BB44D0 00001A2D43AE8010 0x00000000 60000 60000 S0117113LOG
0x0700000177BD45D0 00001A2D52548010 0x00000000 60000 60000 S0117114LOG
0x0700000177B7F0D0 00001A2D60FA8010 0x00000000 60000 60000 S0117115LOG
0x0700000177B9C850 00001A2D6FA08010 0x00000000 60000 60000 S0117116LOG
0x0700000177B84750 00001A2D7E468010 0x00000000 60000 60000 S0117117LOG
0x0700000177B877D0 00001A2D8CEC8010 0x00000000 60000 60000 S0117118LOG
0x0700000177B857D0 00001A2D9B928010 0x00000000 60000 60000 S0117119LOG
0x0700000177B7DC50 00001A2DAA388010 0x00000000 60000 60000 S0117120LOG
0x0700000177B83750 00001A2DB8DE8010 0x00000000 60000 60000 S0117121LOG
0x0700000177B907B0 00001A2DC7848010 0x00000000 60000 60000 S0117122LOG
0x0700000177B91010 00001A2DD62A8010 0x00000000 60000 60000 S0117123LOG
0x0700000177B9A150 00001A2DE4D08010 0x00000000 60000 60000 S0117124LOG
不过之只能看到当前使用日志和日志文件对应的LSN信息和归档情况,对于使用率还真不能看到。
另外还可以在实例快照中看到,不过在此不示例了。
但是上面我们需要登录到 *** 作系统上,如何在远端通过SQL查询呢,其实DB2还是提供了蛮多的方法。
a通过管理视图查询:
select DB_NAME, LOG_UTILIZATION_PERCENT, TOTAL_LOG_USED_KB,TOTAL_LOG_AVAILABLE_KB,TOTAL_LOG_USED_TOP_KB, DBPARTITIONNUM from SYSIBMADMLOG_UTILIZATION;
DB_NAME LOG_UTILIZATION_PERCENT TOTAL_LOG_USED_KB TOTAL_LOG_AVAILABLE_KB TOTAL_LOG_USED_TOP_KB DBPARTITIONNUM
-------------------------------------------------------------------------------------------------------------------------------- ----------------------- -------------------- ---------------------- --------------------- --------------
DSS 897 4631824 46955050 16655013 0
非常清楚一目了然吧,对于监控事物日志使用情况,及早发现事务日志空间满问题很有帮助。
b还有一种方法,就是查看快照视图:
select int(total_log_used/1024/1024) as "Log Used (Mb)",int(total_log_available/1024/1024) as "Log Space Free(Mb)",
int((float(total_log_used)/float(total_log_used+total_log_available))100) as "Pct Used",int(tot_log_used_top/1024/1024) as "Max Log Used (Mb)",
int(sec_log_used_top/1024/1024) as "Max Sec Used (Mb)",int(sec_logs_allocated) as "Secondaries" from sysibmadmsnapdb;
Log Used (Mb) Log Space Free(Mb) Pct Used Max Log Used (Mb) Max Sec Used (Mb) Secondaries
------------- ------------------ ----------- ----------------- ------------------ -----------
4544 45833 9 16264 12532 5
1 record(s) selected
其实还有一种通过表函数的方法,不过需要带入参数:
select DB_NAME,TOTAL_LOG_AVAILABLE,TOTAL_LOG_USED,SEC_LOG_USED_TOP,SEC_LOGS_ALLOCATED from table(SNAP_GET_DB('SAMPLE',0))
DB_NAME TOTAL_LOG_AVAILABLE TOTAL_LOG_USED SEC_LOG_USED_TOP SEC_LOGS_ALLOCATED
-------------------------------------------------------------------------------------------------------------------------------- -------------------- -------------------- -------------------- --------------------
SAMPLE 48045192251 4779767749 13141773417 5
1 record(s) selected
看吧,DB2查看日志空间的方法真的很多,不能不说提供了强大的用户接口,就看大家怎么用了。
转载仅供参考,版权属于原作者。祝你愉快,哦

一、备份(backup)数据库
1、离线全备份
1)、首先确保没有用户使用DB2:
db2 list applications for db sample
2)、停掉数据库并重新启动,以便断掉所有连接:
db2stop force
db2start
若是不喜欢重启的朋友可以使用[db2 force applications all]命令以结束正在利用的连接,该句执行完以后,继续执行[db2 list applications for db sample],若还有连接残留,则再运行[db2 force applications all]命令,直到没有连接残留
3)、执行备份命令:(使用TSM作为备份的介质)
db2 backup db sample use tsm
备份成功,将会返回一个时间戳。
4)、检查备份成功:
db2 list history backup all for sample 可以看到多了这个备份的纪录。
db2adutl query 命令也可以看到返回值。
5)、备注:
首先对主节点(catalog表空间在的节点)执行备份命令,再对另外的节点也做这个 *** 作。
2、 在线备份:
1)、首先打开一下支持在线备份的数据库配置参数:
db2 update db cfg for sample using userexit on 启用用户出口
db2 update db cfg for sample using logretain on 启用归档日志
db2 update db cfg for sample using trackmod on 启用增量备份功能
(需要各个Node都分别做设置)
开启这些参数后,数据库处于backup pending状态,要求做数据库的离线全备份。 做一下离线全备份,参考上面的命令。
2)、在线备份命令如下:
db2 backup db sample online use tsm
备份成功,返回一个时间戳。
3)、同样可以用db2adutl 和db2 list history察看备份纪录。
4)、备注:
同样,对每个节点都做这个 *** 作。
3、 在线增量备份
1)、在开启了必须的三个参数的情况下,做增量备份:
db2 backup db sample online incremental use tsm
备份成功,返回一个时间戳。
2)、同样可以用db2adutl 和db2 list history察看备份纪录。
3)、还有一种delta的备份:
db2 backup db sample online incremental delta use tsm
这两种备份的区别,类似Oracle Exports的Incremental和Cumulative方式,db2的incremental对应oracle的cumulative方式,而 db2的delta方式则对应oracle的incremental方式。
4)、备注:
同样,对每个节点都做这个 *** 作。
二、恢复(RESTORE)数据库
1、新建数据库
在一般管理工具, 创建数据库(别名要和原来的数据库别名一致)。
2、恢复数据库
1):断开连接:将网络断开,切断所有的客户连接,如果不行,先重启。(如果有 客户端连接到DB2服务器,恢复不行的,包括控制中心)
2):恢复离线备份:
设:
你的备份那个DB2文件在:C:\Temp
你的数据库名称:DBName
那么对应DB2的备份/恢复文件的格式是这样的:
C:\Temp\DBName0\DB2CTLSV\NODE0000\CATN0000\20090706\HHMMSS001
备 份时你只是指定了一个C:\Temp目录,后面那么目录为DB2备份时生成。
然后是它的文件名,一般格式是:HHMMSS001,即:小时分钟秒数001,也就是说后面那个20020828是 备份日期,文件名是备份时间。
好,清楚后,你就可以写SQL命令进行恢复了
运行: Start->Program->IBM DB2->Command Center
然后:不要登陆,直接输入下列命令:
以下为引用的内容:
RESTORE DATABASE OldDBName FROM C:\\Temp\\ TAKEN AT
20020919094932 TO D: INTO NewDBName WITH 2 BUFFERS BUFFER 1024
WITHOUT PROMPTING
你要改
NewDBName ==》你的新建数据库名称
C:\\TEMP\\ ==> 你备份DB2的目录,像上面所说
20020919094932 ==> 一看你DB2的目录和文件组合成这东东
D: ==> 新建的数据库放在哪个盘上
OldDBName ==> 备份前那个数据库叫什么
好了,CTRL+ENTER, 如果不行请检查,如果再不行,请重启,如果再不行,。。。阿门,上帝保佑你
3): 实例
备份文件路径:C:\Temp\ipmdemo0\DB2CTLSV\NODE0000\CATN0000\20090622\164642001
其中,备份日期:20090622 备份文件:164642001
新建数据库名:ipmdemo
数据库文件时间戳:20090622164642
恢复命令为:db2 restore database ipmdemo from C:\Temp taken at20090622164642
3、恢复在线备份
1)、恢复。恢复命令为:db2restoredatabase DBName from C:\Temp taken at20090622164642
2)、前滚。前滚命令为:db2 rollforward db DBName to end of logs(或 者:控制中心->所有数据库->dbname ->右键->前滚)
3)、停止前滚。停止前滚命令为:db2 rollforward db DBName stop(或者:控制中心 ->所有数据库->dbname ->右键->停止前滚)
三、有关说明
1、恢复 *** 作也有online和offline的,区别如同backup的 *** 作。
2、按照表空间的备份和恢复类似,加子句TABLESPACE ( tablespace-name )即可。表空间级别的备份/恢复 *** 作要求数据库处于归档日志和启用增量备份模式下。
3、恢复的例子中只做了版本恢复。若还有更新的全备份和增量备份的image,可以依次做恢复(注意使用db2ckrst的建议恢复次序和次数)后,再做 roll forward。

SELECT FROM T WHERE YEAR(DATE) = YEAR(CURREN T DATE) AND MONTH(DATE) = MONTH(CURRENT DATE);
如果数据量太大,这个可能有效率问题建议用下面的
SELECT FROM T WHERE DATE BETWEEN CURRENT DATE - (DAY(CURRENT DATE -1) AND CURRENT DATE;

如何使用db2ckbkp命令查看DB2数据库备份的类型
db2ckbkp命令不仅可以用来检查DB2数据库备份文件的完整性,而且还可以用来查询DB2数据库备份文件的元数据,如果我们有一些备份文件,但是不知道备份的类型,我们可以使用db2ckbkp -H <备份文件>来检查DB2数据库备份的类型:
#db2ckbkp -H WWQ0gmcwNODE0000CATN000020130107000019001


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13385948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存