现象:AIX上的DB2数据库,使用过程中,DataGrip忽然提示日志已满,数据无法保存。
调查:由于DBA不在,所以只能自己解决。先用连接用的账号登录了,执行db2 get db cfg for dbname,发现没有权限。只好要来 instance的账号密码。
$su - instname
$#取得设置内容
$db2 get db cfg for dbname
$#找到以下设置,确定是SQL文件已经满了
Log file size (4KB) (LOGFILSIZ) = 25600
Number of primary log files (LOGPRIMARY) = 20
Number of secondary log files (LOGSECOND) = 15
Changed path to log files (NEWLOGPATH) =
Path to log files = /db2data/instname/inst3//NODE0000/SQL00001/LOGSTREAM0000/
$ls /db2data/instname/inst3//NODE0000/SQL00001/LOGSTREAM0000/
$#确认文件确实已经满了,只能更改一下日志文件数量。
对策:
$db2 update db cfg for dbname using LOGPRIMARY 50
#将主日志文件数量改未50
$#改完需要重启服务,先查看一下连接
$#确认没有正在执行的长时连接进程
$db2top -d dbname
$#用l查看session ,确认没有正在执行的长时进程。
$db2 list applications
$#查看所有连接,确认没问题后杀死进程(如果由rollback或者长时进程一定要谨慎强制杀死)
$db2 force APPLICATION ALL
$#断开连接是异步的,所以可以用db2 list applications查看状态,一直到没有连接为止
$db2 stop
$#如果有进程不能杀死的话,可以加 force(不建议,可能会造成数据丢失或者脏数据)
$db2 start
$#启动后,问题解决
遇到的坑:
1,权限,提前确认好权限,没有instance权限的话,不能更改设置,也不能重启instance。
2,更改后必须重启instance,否则不起作用。