设置Redshift隔离级别失败:存在用户连接问题求助
问题:修改Redshift数据库隔离级别时提示存在用户连接报错
Database "db" is being accessed by other users,so the database isolation level cannot be altered.
作为超级用户,已尝试将数据库连接限制设为0、执行soft_reboot、手动终止进程ID等操作,但报错仍存在。最后执行的代码如下:
ALTER DATABASE db CONNECTION LIMIT 0 ; -- 禁止非超级用户连接 ALTER USER etl_user NOCREATEUSER; -- 限制etl超级用户连接 SELECT reboot_cluster(); ALTER DATABASE BI ISOLATION LEVEL SNAPSHOT; -- 尝试设置隔离级别 SELECT * FROM SVV_TRANSACTIONS; -- 排查其他进程ID -- 终止所有进程 SELECT pg_terminate_backend(...); ALTER DATABASE BI ISOLATION LEVEL SNAPSHOT; -- 再次尝试设置快照隔离级别 ALTER USER etl_user CREATEUSER; -- 恢复etl用户超级权限 ALTER DATABASE db CONNECTION LIMIT UNLIMITED; -- 恢复非超级用户连接限制
可行解决方案
以下是经过验证的步骤,确保彻底断开所有连接后修改隔离级别:
先锁定数据库,阻断新连接
-- 禁止非超级用户连接目标数据库 ALTER DATABASE db CONNECTION LIMIT 0; -- 临时移除etl用户的超级权限,防止其创建新连接 ALTER USER etl_user NOCREATEUSER;精准终止目标数据库的所有活跃进程
不要依赖集群重启,直接终止目标库的所有进程:-- 查询目标数据库的所有活跃进程ID SELECT pid FROM pg_stat_activity WHERE datname = 'db'; -- 批量终止这些进程 SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'db';执行后需再次查询
pg_stat_activity确认无残留连接立即执行隔离级别修改
确认无任何活跃连接后,马上执行修改命令:ALTER DATABASE db ISOLATION LEVEL SNAPSHOT;恢复原有配置
修改完成后,恢复用户权限和连接限制:ALTER USER etl_user CREATEUSER; ALTER DATABASE db CONNECTION LIMIT UNLIMITED;
关键提示
- 集群重启后部分服务(如ETL调度、监控工具)可能自动重连,导致修改失败,因此不建议依赖
reboot_cluster - 必须先锁定连接再终止进程,避免终止过程中产生新连接
pg_stat_activity能更全面地展示所有活跃进程,比SVV_TRANSACTIONS更适合排查连接问题
内容的提问来源于stack exchange,提问作者Robert Riley
相关产品推荐
相关产品推荐

