文章目录
- [1 日期时间函数](#1 日期时间函数)
-
- [1.1 now()](#1.1 now())
- [2 权限相关](#2 权限相关)
- [3 锁](#3 锁)
-
- [3.1 某张表上的某种锁是由哪个会话操作加上的](#3.1 某张表上的某种锁是由哪个会话操作加上的)
- [4 表空间](#4 表空间)
- [5 查看一个模式下的每一张表占据的硬盘空间的大小](#5 查看一个模式下的每一张表占据的硬盘空间的大小)
1 日期时间函数
1.1 now()

语法:NOW(n)
功能:返回系统的当前时间戳。等价于 GETDATE()。
参数:n:指定毫秒的精度。取值范围 0-6,默认为 6。
2 权限相关
为一个用户移除 PUBLIC 角色(默认可能隐含权限)
sql
REVOKE PUBLIC FROM WY_RES_READ;
1、 创建一个角色,并将一个模式下的所有的表的查询权限赋给创建好的角色,然后将角色赋给 另外一个用户。
sql
-- 创建只读角色
--CREATE ROLE WY_GQ_IIMS_READONLY;
-- 授权角色访问模式下的所有表
BEGIN
FOR rec IN (
SELECT TABLE_NAME
FROM ALL_TABLES
WHERE OWNER = 'WY_GQ_IIMS'
)
LOOP
EXECUTE IMMEDIATE
'GRANT SELECT ON WY_GQ_IIMS.' || rec.TABLE_NAME || ' TO WY_GQ_IIMS_READONLY';
END LOOP;
END;
/
-- 将角色授予用户
GRANT WY_GQ_IIMS_READONLY TO WY_RES_READ;
3 锁
3.1 某张表上的某种锁是由哪个会话操作加上的
sql
select
a.*,b.NAME,c.SESS_ID,c.CLNT_IP,c.SQL_TEXT
from
v$lock a
left join sysobjects b on b.ID=a.TABLE_ID
left join v$sessions c on a.TRX_ID=c.TRX_ID
where
b.NAME LIKE '%recent_a%'
and c.CREATE_TIME > '2025-08-05';
4 表空间

sql
SELECT
ID AS "表空间ID",
NAME AS "表空间名称",
CACHE AS "缓存策略",
TYPE$ AS "类型(0=数据,1=临时,2=回滚)",
STATUS$ AS "状态(0=联机,1=脱机)",
TOTAL_SIZE*16/1024/1024 AS "总大小(GB)",
USED_SIZE*16/1024/1024 AS "已使用大小(GB)"
FROM
V$TABLESPACE
order by USED_SIZE DESC;
select tablespace_name,file_name,status, bytes/1024/1024/1024 as "GB" from DBA_DATA_FILES order by "GB" DESC;
-- 查看页大小
SELECT SF_GET_PAGE_SIZE();
select
*
FROM
V$TABLESPACE;
select * from DBA_DATA_FILES;


5 查看一个模式下的每一张表占据的硬盘空间的大小
sql
SELECT
t.owner AS "模式",
t.table_name AS "表名",
ROUND(COALESCE(s.seg_size, 0) / 1024 / 1024, 2) AS "表数据空间(MB)",
ROUND(COALESCE(idx.idx_size, 0) / 1024 / 1024, 2) AS "索引空间(MB)",
ROUND(COALESCE(s.seg_size + idx.idx_size, 0) / 1024 / 1024 / 1024, 2) AS "总占用空间(GB)"
FROM
dba_tables t
LEFT JOIN
(SELECT owner, segment_name, SUM(bytes) AS seg_size
FROM dba_segments
WHERE segment_type = 'TABLE'
GROUP BY owner, segment_name) s
ON t.owner = s.owner AND t.table_name = s.segment_name
LEFT JOIN
(SELECT i.owner, i.table_name, SUM(s.bytes) AS idx_size
FROM dba_indexes i
JOIN dba_segments s ON i.index_name = s.segment_name
WHERE s.segment_type = 'INDEX'
GROUP BY i.owner, i.table_name) idx
ON t.owner = idx.owner AND t.table_name = idx.table_name
WHERE
t.owner = 'SJZT_MD' -- 替换为实际模式名
ORDER BY
"总占用空间(GB)" DESC;
select
sum("总占用空间(GB)")
from (
SELECT
t.owner AS "模式",
t.table_name AS "表名",
ROUND(COALESCE(s.seg_size, 0) / 1024 / 1024, 2) AS "表数据空间(MB)",
ROUND(COALESCE(idx.idx_size, 0) / 1024 / 1024, 2) AS "索引空间(MB)",
ROUND(COALESCE(s.seg_size + idx.idx_size, 0) / 1024 / 1024 / 1024, 2) AS "总占用空间(GB)"
FROM
dba_tables t
LEFT JOIN
(SELECT owner, segment_name, SUM(bytes) AS seg_size
FROM dba_segments
WHERE segment_type = 'TABLE'
GROUP BY owner, segment_name) s
ON t.owner = s.owner AND t.table_name = s.segment_name
LEFT JOIN
(SELECT i.owner, i.table_name, SUM(s.bytes) AS idx_size
FROM dba_indexes i
JOIN dba_segments s ON i.index_name = s.segment_name
WHERE s.segment_type = 'INDEX'
GROUP BY i.owner, i.table_name) idx
ON t.owner = idx.owner AND t.table_name = idx.table_name
WHERE
t.owner = 'SJZT_MD' -- 替换为实际模式名
ORDER BY
"总占用空间(GB)" DESC
)
