Oracle常用数据字典表

190 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

常用数据字典表

数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的。比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息的视图等。

数据字典系统表,保存在system表空间中。查询所有数据字典可用语句“select * from dictionary;”。

数据字典分类

数据字典主要可分为四部分:

1)内部RDBMS表:x$*,用于跟踪内部数据库信息,维持DB的正常运行。是加密命名的,不允许sysdba以外的用户直接访问,显示授权不被允许。

2)数据字典表:*,如tab,如tab,obj,ts,ts等,用来存储表、索引、约束以及其他数据库结构的信息。

3)动态性能视图:gv\*v\*,v*,记录了DB运行时信息和统计数据,大部分动态性能视图被实时更新以反映DB当前状态。

4)数据字典视图:user_*、all_*、dba_*,在非Sys用户下,我们访问的都是同义词,而不是V$视图或GV视图。

数据库启动时,动态创建x,在X,在X基础上创建GV,在GV,在GV基础上创建VXX表-->GV(视图)>V(视图)--->V(视图)。

数据字典视图可分为静态数据字典视图和动态数据字典视图。

静态数据字典是指在用户访问数据字典时内容不会发生改变。这类数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。

静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*(该用户方案对象的信息)、all_*(该用户可以访问的所有对象的信息)、dba_*(全部数据库对象的信息)。

动态数据字典是Oracle包含的一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。Oracle中这些动态性能视图都是以v开头的视图,比如v开头的视图,比如vaccess。

dba_开头

dba_users数据库用户信息

dba_segments表段信息

dba_extents数据区信息

dba_objects数据库对象信息

dba_tablespaces数据库表空间信息

dba_data_files数据文件设置信息

dba_temp_files临时数据文件信息

dba_rollback_segs回滚段信息

dba_ts_quotas用户表空间配额信息

dba_free_space数据库空闲空间信息

dba_profiles数据库用户资源限制信息

dba_sys_privs用户的系统权限信息

dba_tab_privs用户具有的对象权限信息

dba_col_privs用户具有的列对象权限信息

dba_role_privs用户具有的角色信息

dba_audit_trail审计跟踪记录信息

dba_stmt_audit_opts审计设置信息

dba_audit_object对象审计结果信息

dba_audit_session会话审计结果信息

dba_indexes用户模式的索引信息

user_开头

user_objects用户对象信息

user_source数据库用户的所有资源对象信息

user_segments用户的表段信息

user_tables用户的表对象信息

user_tab_columns用户的表列信息

user_constraints用户的对象约束信息

user_sys_privs当前用户的系统权限信息

user_tab_privs当前用户的对象权限信息

user_col_privs当前用户的表列权限信息

user_role_privs当前用户的角色权限信息

user_indexes用户的索引信息

user_ind_columns用户的索引对应的表列信息

user_cons_columns用户的约束对应的表列信息

user_clusters用户的所有簇信息

user_clu_columns用户的簇所包含的内容信息

user_cluster_hash_expressions散列簇的信息

v$开头

v$database数据库信息

v$datafile数据文件信息

v$controlfile控制文件信息

v$logfile重做日志信息

v$instance数据库实例信息

v$log日志组信息

v$loghist日志历史信息

v$sga数据库SGA信息

v$parameter初始化参数信息

v$process数据库服务器进程信息

v$bgprocess数据库后台进程信息

v$controlfile_record_section控制文件记载的各部分信息

v$thread线程信息

v$datafile_header数据文件头所记载的信息

v$archived_log归档日志信息

v$archive_dest归档日志的设置信息

v$logmnr_contents归档日志分析的DMLDDL结果信息

v$logmnr_dictionary日志分析的字典文件信息

v$logmnr_logs日志分析的日志列表信息

v$tablespace表空间信息

v$tempfile临时文件信息

v$filestat数据文件的I/O统计信息

v$undostatUndo数据信息

v$rollname在线回滚段信息

v$session会话信息

v$transaction事务信息

v$rollstat回滚段统计信息

v$pwfile_users特权用户信息

v$sqlarea当前查询过的sql语句访问过的资源及相关的信息

vsqlvsql与vsqlarea基本相同的相关信息

v$sysstat数据库系统状态信息

all_开头

all_users数据库所有用户的信息

all_objects数据库所有的对象的信息

all_def_audit_opts所有默认的审计设置信息

all_tables所有的表对象信息

all_indexes所有的数据库对象索引的信息

session_开头

session_roles会话的角色信息

session_privs会话的权限信息

index_开头

index_stats索引的设置和存储信息

伪表

dual系统伪列表信息

数据字典常用SQL查询

1)查看表空间的名称及大小

select t.tablespace_name,
 
round(sum(d.bytes/(1024*1024)),0) tbs_size
 
from dba_tablespaces t,
 
dba_data_files d
 
where t.tablespace_name = d.tablespace_name
 
group by t.tablespace_name;

若需要查看指定表空间的大小,则可以直接添加where条件指定,否则结果集是所有表空间。

2)查看表空间物理文件的名称及大小

select tablespace_name,
 
file_id,
 
file_name,
 
round(bytes/(1024*1024),0) total_space
 
from dba_data_files
 
order by tablespace_name;

3)查看表空间剩余空间大小

select tablespace_name,
 
round(sum(bytes) / 1024 / 1024, 2) AS free_space,
 
count(*) AS extends,
 
sum(blocks) AS blocks
 
from dba_free_space
 
group by tablespace_name;

4)查看表空间使用率

SELECT total.tablespace_name,
 
Round(total.total, 2)             AS Total_MB,
 
Round(total.total - free.free, 2) AS Used_MB,
 
Round(( 1 - free.free / total.total ) * 100, 2)
 
|| '%'                            AS Used_PCT
 
FROM   (SELECT tablespace_name,
 
sum(bytes) / 1024 / 1024 AS free
 
FROM dba_free_space
 
GROUP BY tablespace_name) free,
 
(SELECT tablespace_name,
 
sum(bytes) / 1024 / 1024 AS total
 
FROM dba_data_files
 
GROUP BY tablespace_name) total
 
WHERE  free.tablespace_name = total.tablespace_name;

5)查看控制文件

select name from v$controlfile;

6)查看日志文件

select member from v$logfile;

7)查看消耗资源最多的SQL

SELECT hash_value,
 
executions,
 
buffer_gets,
 
disk_reads,
 
parse_calls
 
FROM V$SQLAREA
 
WHERE buffer_gets > 10000000
 
OR disk_reads > 1000000
 
ORDER BY buffer_gets + 100 * disk_reads DESC;

8)捕捉运行很久的SQL

select username,
 
sid,
 
opname,
 
round(sofar*100 / totalwork,0) || '%' as progress,
 
time_remaining,
 
sql_text
 
from v$session_longops,
 
v$sql
 
where time_remaining <> 0
 
and sql_address = address
 
and sql_hash_value = hash_value;

9)查看回滚段名称及大小

select segment_name,
 
tablespace_name,
 
r.status,
 
(initial_extent/1024) InitialExtent,
 
(next_extent/1024) NextExtent,
 
max_extents,
 
v.curext CurExtent
 
from dba_rollback_segs r,
 
v$rollstat v
 
where r.segment_id = v.usn(+)
 
order by segment_name;

10)查看还没提交的事务

select * from v$locked_object;
 
select * from v$transaction;