背景:备份服务器数据转存到加固服务器时,有两个任务最开始成功,后来一直失败,报错session-log违反检查约束,而其他任务正常。起因是加固服务器之前的空间爆盘导致此两个任务备份失败,隔了很多天才继续备份就开始报错。
解决方法:需要进数据库中删除关于session-log的定义。
1、首先关闭Veeam服务(powershell管理员执行)
net stop VeeamBackupSvc
有其他veeam相关服务也最好关闭
2、找到数据库目录,打开管理员cmd切换到对应路径
C:\Users\Administrator>cd C:\Program Files\PostgreSQL\15\bin
C:\Program Files\PostgreSQL\15\bin>psql.exe -h localhost -p 5432 -U postgres -d VeeamBackup
上述数据库账号及库名不知道的话,可以去查注册表:
HKEY_LOCAL_MACHINE\SOFTWARE\Veeam\Veeam Backup and Replication\DatabaseConfigurations
在右侧窗口中,查找以下键值:
PostgreSqlPort:记录端口号(默认通常为 5432 或动态分配的端口,如 9000+)。
PostgreSqlDatabaseName:记录数据库名称(默认为 VeeamBackup)。
PostgreSqlUser:记录用户名(默认为 veeam 或 postgres,具体取决于安装时的设置)。
3、查看是否有session-log
VeeamBackup=# SELECT conname FROM pg_constraint WHERE conname = 'sessionlog_cookie_check';
conname
-------------------------
sessionlog_cookie_check
(1 行记录)
VeeamBackup=# SELECT conname AS constraint_name, pg_get_constraintdef(oid) AS constraint_definition FROM pg_constraint WHERE conname = 'sessionlog_cookie_check';
constraint_name | constraint_definition
-------------------------+----------------------------------------------
sessionlog_cookie_check | CHECK ((char_length((cookie)::text) <= 260))
(1 行记录)
将CHECK ((char_length((cookie)::text) <= 260))记录下来,若后续备份有问题,可以将此约束加回去
3、删除session-log此约束
VeeamBackup=# ALTER TABLE sessionlog DROP CONSTRAINT IF EXISTS sessionlog_cookie_check;
ALTER TABLE
VeeamBackup=# SELECT conname FROM pg_constraint WHERE conname = 'sessionlog_cookie_check';
conname
---------
(0 行记录)
****若有添加约束回去的需求,执行以下命令:
ALTER TABLE sessionlog
ADD CONSTRAINT sessionlog_cookie_check
CHECK ((char_length((cookie)::text) <= 260))