数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的。比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息的视图等。
数据字典系统表,保存在system表空间中。查询所有数据字典可用语句“select * from dictionary;”。
数据字典分类
数据字典主要可分为四部分:
1)内部RDBMS表:x$*,用于跟踪内部数据库信息,维持DB的正常运行。是加密命名的,不允许sysdba以外的用户直接访问,显示授权不被允许。
2)数据字典表:*$,如tab$,obj$,ts$等,用来存储表、索引、约束以及其他数据库结构的信息。
3)动态性能视图:gv$*,v$*,记录了DB运行时信息和统计数据,大部分动态性能视图被实时更新以反映DB当前状态。
4)数据字典视图:user_*、all_*、dba_*,在非Sys用户下,我们访问的都是同义词,而不是V$视图或GV视图。
数据库启动时,动态创建x$,在X$基础上创建GV$,在GV$基础上创建V$X$表-->GV$(视图)--->V$(视图)。
数据字典视图可分为静态数据字典视图和动态数据字典视图。
静态数据字典是指在用户访问数据字典时内容不会发生改变。这类数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。
静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*(该用户方案对象的信息)、all_*(该用户可以访问的所有对象的信息)、dba_*(全部数据库对象的信息)。
动态数据字典是Oracle包含的一些潜在的由系统管理员如SYS维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。Oracle中这些动态性能视图都是以v$开头的视图,比如v$access。
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语句访问过的资源及相关的信息
v$sql与v$sqlarea基本相同的相关信息
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;