1.如果要看日志内容,sql server下不直接支持,但是可以用LogExplorer(只支持2000)等工具来查看
如果你的意思是想看数据库在执行什么语句,可以用Sql profiler
菜单 Tool->Sql Server Profiler
进到Profiler的界面后新建一个跟踪(new Trace),选择好你的数据库和相应的用户、密码,然后就可以看到所有传到Sql Server来执行的语句了。
如果想更多的了解,可以去找些 Sql Server Profiler的资料看下,最好还是自己试几下, *** 作很简单,但是平时开发过程中调试很好用
2.每个 Microsoft® SQL Server™ 2000 数据库都有事务日志,用以记录所有事务和每个事务对数据库所做的修改。记录事务及其修改有三个作用:
恢复个别的事务。
如果应用程序发出 ROLLBACK 语句,或者 SQL Server 检测到错误(例如失去与客户端的通讯),就使用日志记录回滚未完成的事务所做的修改。
SQL Server 启动时恢复所有未完成的事务。
当运行 SQL Server 的服务器发生故障时,数据库可能处于这样的状态:还没有将修改从高速缓冲存储器写入数据文件,在数据文件内有未完成的事务所做的修改。当启动 SQL Server 的复本时,它对每个数据库执行恢复 *** 作。前滚日志中记录的、可能尚未写入数据文件的每个修改。然后回滚在事务日志中找到的每个未完成的事务,以确保数据库的完整性。
将还原的数据库前滚到故障点。
丢失数据库(在没有 RAID 驱动器的服务器上,硬盘驱动器出现故障时可能会出现这种情况)后,可以将数据库还原到故障点。首先还原上一次的完整数据库备份或差异数据库备份,然后将事务日志备份序列还原到故障点。当还原每个日志备份时,SQL Server 重新应用日志中记录的所有修改以前滚所有事务。当最后的日志备份还原后,SQL Server 将使用日志信息回滚到该点未完成的所有事务。
SQL Server 2000 事务日志的特点是:
事务日志不是作为一个表实现,而是作为单独的文件或数据库内的一组文件实现。日志高速缓存与数据页的高速缓冲存储器分开管理,从而使数据库引擎内的编码更简单、更快速和更可靠。
日志记录和页的格式不必遵守数据页的格式。
事务日志可以在几个文件上实现。可以根据需要定义这些文件为自动增长。这样可减少事务日志内空间不足的可能性,同时减少管理开销。
截断日志中未用部分的机制速度快且对事务吞吐量影响最小。
可以降到2005 用log explorer看下的哈使用Log Explorer查看和恢复数据
Log Explorer 4.1.可用于SQL Server2005的日志查看工具
使用方法:
打开Log Explorer ->Attach Log File ->选择SQL Server服务器和登陆方式 ->Connect ->
在Database Name中选择数据库 ->Attach->左面对话框中Browse->View Log->就可以看到log记录了
想恢复的话: 右键Log记录 Undo Transation->选择保存文件名和路径->然后打开该文件到查询分析器里执行 T-sql代码就可以了
例如 如果Log是delete table where ...的话,生成的文件代码就是insert table ....
然后将此insert table的代码放到查询分析器里执行.就可以恢复数据.
----------------------------------------------------------------------
--如何恢复被delete/update的数据
----------------------------------------------------------------------
1 连接到被删除数据库的Db
打开log explorer 选择 "file"->"attach log file"->选择服务器和登陆方式->"connect"->选择"数据库"->"attach"
2 查看日志
在左面 *** 作项目的对话框中选择"browse"项目->"view log"->就可以看到当前的Log记录了
3 恢复数据
右键某一条log记录,选择"undo transation"->"选择保存文件名和路径"->然后打开该文件到查询分析器里执行
T-sql代码就可以了
例如: 如果log是delete table where ...的话,生成的文件代码就是insert table ....
----------------------------------------------------------------------
--Log Explorer恢复被drop table和truncate table后的数据
----------------------------------------------------------------------
1 连接到被删除数据库的Db
*** 作同上
2 恢复方法
1) 选择"salvaage dropped/truncate"菜单,在右边的对话框中选择表名,和droped/trucated的日期,
File Name中选择生成insert语句脚步的存放位置,condition选择是droped还是truncated,
最后点击"create" 就会生成insert语句,把生成的语句到查询分析器里面执行一下就可以了
2) 选择"ViewDDL Commands"菜单->选"truncate table" *** 作项->点击"Salvage"->生成语句->查询分析器里执行
----------------------------------------------------------------------
--log explorer使用的几个问题
----------------------------------------------------------------------
1) 对数据库做完全/差异/日志备份
备份时如果选用了删除事务日志中不活动的条目
再用Log explorer打试图看日志时,提示No log recorders found that match the filter,would you like to view unfiltered data 选择yes 就看不到刚才的记录了
如果不选用了删除事务日志中不活动的条目
再用Log explorer打试图看日志时,就能看到原来的日志并做恢复
2) 修改了其中一个表中的部分数据,此时用Log explorer看日志,可以作日志恢复
3) 然后恢复备份,(注意:恢复是断开log explorer与数据库的连接,或连接到其他数据上,
否则会出现数据库正在使用无法恢复)
恢复完后,再打开log explorer 提示No log recorders found that match the filter,would you like to view unfiltered data,选择yes 就看不到刚才在2中修改的日志记录,所以无法做恢复.
4) 不要用SQL的备份功能备份,搞不好你的日志就破坏了.
在日常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)*60000*4/1024/1024大约50GB。
如果日志是单独的文件系统分区,我们在 *** 作系统上即可看到日志空间使用情况,对日志使用情况进行监控,可以看到如下信息:
$ df -g
Filesystem GB blocks Free %UsedIused %Iused Mounted on
/dev/db2inst1_log0160.0054.50 10%14581% /db2inst1_log01
这个需要登录到系统,其实db2pd也是可以看到日志信息的
db2pd -d sample -logs
Database Partition 0 -- Database SAMPLE -- Active -- Up 34 days 17:30:12 -- Date 2013-11-26-10.42.49.558342
Logs:
Current Log Number117123
Pages Written33697
Cur Commit Disk Log Reads0
Cur Commit Total Log Reads0
Method 1 Archive Status Success
Method 1 Next Log to Archive 117123
Method 1 First Failuren/a
Method 2 Archive Status n/a
Method 2 Next Log to Archive n/a
Method 2 First Failuren/a
Log Chain ID 2
Current LSN 0x00001A2DDE649E70
AddressStartLSNState Size Pages Filename
0x0700000177B795D0 00001A2CBFD88010 0x00000000 60000 60000 S0117104.LOG
0x0700000177B806D0 00001A2CCE7E8010 0x00000000 60000 60000 S0117105.LOG
0x0700000177B8B450 00001A2CDD248010 0x00000000 60000 60000 S0117106.LOG
0x0700000177B82EF0 00001A2CEBCA8010 0x00000000 60000 60000 S0117107.LOG
0x0700000177B9ECD0 00001A2CFA708010 0x00000000 60000 60000 S0117108.LOG
0x0700000177BA27D0 00001A2D09168010 0x00000000 60000 60000 S0117109.LOG
0x0700000177B79E30 00001A2D17BC8010 0x00000000 60000 60000 S0117110.LOG
0x0700000177BAAD50 00001A2D26628010 0x00000000 60000 60000 S0117111.LOG
0x0700000177B9FFD0 00001A2D35088010 0x00000000 60000 60000 S0117112.LOG
0x0700000177BB44D0 00001A2D43AE8010 0x00000000 60000 60000 S0117113.LOG
0x0700000177BD45D0 00001A2D52548010 0x00000000 60000 60000 S0117114.LOG
0x0700000177B7F0D0 00001A2D60FA8010 0x00000000 60000 60000 S0117115.LOG
0x0700000177B9C850 00001A2D6FA08010 0x00000000 60000 60000 S0117116.LOG
0x0700000177B84750 00001A2D7E468010 0x00000000 60000 60000 S0117117.LOG
0x0700000177B877D0 00001A2D8CEC8010 0x00000000 60000 60000 S0117118.LOG
0x0700000177B857D0 00001A2D9B928010 0x00000000 60000 60000 S0117119.LOG
0x0700000177B7DC50 00001A2DAA388010 0x00000000 60000 60000 S0117120.LOG
0x0700000177B83750 00001A2DB8DE8010 0x00000000 60000 60000 S0117121.LOG
0x0700000177B907B0 00001A2DC7848010 0x00000000 60000 60000 S0117122.LOG
0x0700000177B91010 00001A2DD62A8010 0x00000000 60000 60000 S0117123.LOG
0x0700000177B9A150 00001A2DE4D08010 0x00000000 60000 60000 S0117124.LOG
不过之只能看到当前使用日志和日志文件对应的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 SYSIBMADM.LOG_UTILIZATION
DB_NAMELOG_UTILIZATION_PERCENT TOTAL_LOG_USED_KBTOTAL_LOG_AVAILABLE_KB TOTAL_LOG_USED_TOP_KB DBPARTITIONNUM
-------------------------------------------------------------------------------------------------------------------------------- ----------------------- -------------------- ---------------------- --------------------- --------------
DSS8.97 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 sysibmadm.snapdb
Log Used (Mb) Log Space Free(Mb) Pct UsedMax Log Used (Mb) Max Sec. Used (Mb) Secondaries
------------- ------------------ ----------- ----------------- ------------------ -----------
4544 45833 916264 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_TOPSEC_LOGS_ALLOCATED
-------------------------------------------------------------------------------------------------------------------------------- -------------------- -------------------- -------------------- --------------------
SAMPLE 48045192251 4779767749 131417734175
1 record(s) selected
看吧,DB2查看日志空间的方法真的很多,不能不说提供了强大的用户接口,就看大家怎么用了。
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)