1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
--查询用户连接数及资源限制
WITH
a AS
(
SELECT
user_name,
count(*) current_connect
FROM
v$sessions
WHERE
CONN_TYPE <> 'BACKGROUND'
AND user_name NOT IN ('SYS', 'SYSDBA', 'SYSREP', 'DMHS', 'SYSSSO')
and user_name not like 'P\_%' escape '\'
group by
user_name
)
,
b AS
(
select
NAME AS USERNAME ,
case when to_char(SESS_PER_USER)=0 then 'UNLIMITED' else to_char(SESS_PER_USER) end as SESS_PER_USER,
case when SESS_PER_USER =0 then 'please add user session limit' else SESS_PER_USER end as max_limit
from
SYS.SYSUSERS ,
SYSRESOURCES AS RSCS,
SYSOBJECTS AS SYSOB
where
SYS.SYSUSERS.ID = RSCS.ID
AND SYSOB.ID =SYS.SYSUSERS.ID --注意:普通用户去掉此关联条件查询,DBA用户保留,使用普通用户查询时,SESS_PER_USER列值只能查询自己的信息
AND SYSOB.TYPE$ ='UR'
AND SYSOB.SUBTYPE$ ='USER'
AND SYSOB.NAME NOT IN ('SYS', 'SYSDBA', 'SYSREP', 'DMHS', 'SYSSSO', 'SYSAUDITOR')
)
select
user_name ,
current_connect ,
SESS_PER_USER as sess_limit,
case when pct_or_attention=0 then 'please add you session max_limit' else pct_or_attention * 100
|| '%' end pct_or_attention,
max_failover_pct
|| '%' max_failover_pct,
'There is a risk that after one node goes down, the other surviving nodes will not be able to carry the connection' as falover_flag
from
(
SELECT
a.user_name ,
a.current_connect ,
b.SESS_PER_USER ,
case when b.max_limit <> 'please add user session limit' then round(a.current_connect / b.max_limit, 4) else 0 end as PCT_OR_ATTENTION,
0 as max_failover_pct
FROM
a,
b
WHERE
a.user_name = b.username ORDER BY A.USER_NAME
);


--查询用户资源限制
SELECT SJ.NAME "用户名",
TBS.NAME "默认表空间",
CASE TBS2.NAME WHEN 'SYSTEM' THEN 'MAIN' ELSE TBS2.NAME END "默认索引表空间",
CASE SU.AUTHENT_TYPE WHEN 1 THEN 'NDCT_DB_AUTHENT' WHEN 2 THEN 'NDCT_OS_AUTHENT' WHEN 3 THEN 'NDCT_NET_AUTHENT' ELSE 'NDCT_UNKOWN_AUTHENT' END "用户认证方式",
CASE SU.SESS_PER_USER WHEN 0 THEN '不限制' ELSE SU.SESS_PER_USER END "最大会话数",
CASE SU.CONN_IDLE_TIME WHEN 0 THEN '不限制' ELSE SU.CONN_IDLE_TIME END "会话最大空闲时间(分钟)",
CASE SU.FAILED_NUM WHEN 0 THEN '不限制' ELSE SU.FAILED_NUM END "登录失败次数限制",
CASE SU.LIFE_TIME WHEN 0 THEN '不限制' ELSE SU.LIFE_TIME END "口令有效期(天)" ,
CASE SU.REUSE_TIME WHEN 0 THEN '不限制' ELSE SU.REUSE_TIME END "口令重用等待时间(天)",
CASE SU.REUSE_MAX WHEN 0 THEN '不限制' ELSE SU.REUSE_MAX END "口令重用变更次数",
CASE SU.LOCK_TIME WHEN 0 THEN '不限制' ELSE SU.LOCK_TIME END "口令锁定时间(分钟)",
CASE SU.GRACE_TIME WHEN 0 THEN '不限制' ELSE SU.GRACE_TIME END "口令宽限期(天)" ,
CASE SU.LOCKED_STATUS WHEN 2 THEN '否' ELSE '是' END "用户是否锁定",
SU.LASTEST_LOCKED "最后一次锁定时间",
SU.PWD_POLICY "密码策略",
CASE RN_FLAG WHEN 0 THEN '否' ELSE '是' END "是否只读",
SU.ALLOW_ADDR "连接限制IP白名单" ,
SU.NOT_ALLOW_ADDR "连接限制IP黑名单",
SU.ALLOW_DT "允许登录的时间段",
SU.NOT_ALLOW_DT "不允许登录的时间段",
SU.LAST_LOGIN_DTID "上次登录时间",
SU.LAST_LOGIN_IP "上次登录 IP",
SU.FAILED_ATTEMPS "自上次登录后的失败登录次数",
CAST(RSCS.INFO1 AS INT) AS "会话持续期(分钟)",
RSCS.CPU_PER_CALL "请求使用CPU时间(秒)" ,
RSCS.CPU_PER_SESSION "会话使用CPU时间(秒)" ,
RSCS.MEM_SPACE "会话私有内存(M)" ,
RSCS.READ_PER_CALL "请求读取页数" ,
RSCS.READ_PER_SESSION "会话读取页数"
FROM SYS.SYSUSERS SU
INNER JOIN SYSOBJECTS SJ
ON SU.ID=SJ.ID
INNER JOIN SYS.V$TABLESPACE TBS
ON TBS.ID=(SJ.INFO3
& 0X000000000000FFFF)
INNER JOIN SYSRESOURCES RSCS
ON SU.ID=RSCS.ID
LEFT JOIN SYS.V$TABLESPACE TBS2
ON TBS2.ID=((SJ.INFO3
& 0X00000000FFFF0000) >> 16)
WHERE TBS.ID != 0 AND SJ.TYPE$='UR' AND SJ.SUBTYPE$='USER' AND SJ.NAME NOT IN('SYS',
'SYSREP',
'SYSAUDITOR',
'SYSSSO');