You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置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; -- 恢复非超级用户连接限制
可行解决方案

以下是经过验证的步骤,确保彻底断开所有连接后修改隔离级别:

  1. 先锁定数据库,阻断新连接

    -- 禁止非超级用户连接目标数据库
    ALTER DATABASE db CONNECTION LIMIT 0;
    -- 临时移除etl用户的超级权限,防止其创建新连接
    ALTER USER etl_user NOCREATEUSER;
    
  2. 精准终止目标数据库的所有活跃进程
    不要依赖集群重启,直接终止目标库的所有进程:

    -- 查询目标数据库的所有活跃进程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确认无残留连接

  3. 立即执行隔离级别修改
    确认无任何活跃连接后,马上执行修改命令:

    ALTER DATABASE db ISOLATION LEVEL SNAPSHOT;
    
  4. 恢复原有配置
    修改完成后,恢复用户权限和连接限制:

    ALTER USER etl_user CREATEUSER;
    ALTER DATABASE db CONNECTION LIMIT UNLIMITED;
    

关键提示

  • 集群重启后部分服务(如ETL调度、监控工具)可能自动重连,导致修改失败,因此不建议依赖reboot_cluster
  • 必须先锁定连接再终止进程,避免终止过程中产生新连接
  • pg_stat_activity能更全面地展示所有活跃进程,比SVV_TRANSACTIONS更适合排查连接问题

内容的提问来源于stack exchange,提问作者Robert Riley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:40:33