系统表(system table)也被称为系统目录(system catalog),是数据库系统中一种特殊的表格,用于存储数据库中各种对象的元数据信息,如表、列、索引、视图、存储过程、触发器 等。系统表提供了数据库管理系统(DBMS)的基础架构,可以使用户和开发人员查询、检查、更新数据库的元数据。
系统表通常是只读的,它们存储在数据库系统的内部,用户不能直接修改它们。系统表的底层原理和其他表格类似,它们存储在数据库中的数据文件和日志文件中。
常见的系统表有:
SYSOBJECTS可查询所有对象
SYSCOLUMNS可查询表的所有列的信息
dba_tables可查询表信息(包括系统表)
dba_users可查询系统所有用户
dba_data_files可查询数据库文件信息
dba_segments可查询模式
all_tables可查询所有用户的表
user_tables可查询当前用户所拥有的所有表
user_tablespaces可查询表空间
系统视图是数据库中的一种特殊视图,它们是由数据库管理系统(DBMS)自动生成和维护的。系统视图提供了关于数据库和其对象的元数据信息,以及访问和查询这些元数据的能力。系统视图允许用户和开发人员在不直接访问数据库系统表的情况下获取有关数据库结构和内容的信息。
常见的系统视图:
v$database 可查询数据库信息
v$tablespace可查询表空间信息
v$datafile可查询数据文件信息
v$dm_arch_ini可查询归档信息
v$dm_ini可查询参数
v$instance可查询数据库实例信息
v$rlogfile可查询日志文件信息
v$systeminfo可查询操作系统CPU 和内存的信息
v$version 可查询数据库版本
v$wait_class 可查询等待(wait)情况
根据此类系统表和视图可以加工得到哪些信息
sql语句
--查看表空间使用情况
select
t1.NAME tablespace_name,
t2.FREE_SIZE * SF_GET_PAGE_SIZE() / 1024 / 1024 || 'M' free_space,
t2.TOTAL_SIZE * SF_GET_PAGE_SIZE() / 1024 / 1024 || 'M' total_space,
t2.FREE_SIZE * 100 / t2.total_size" % FREE"
from V$TABLESPACE t1, V$DATAFILE t2 where t1.ID = t2.GROUP_ID;
--数据文件路径
select
tablespace_name,
file_name,
AUTOEXTENSIBLE,
bytes / 1024 / 1024 || 'M' total_space,
user_bytes / 1024 / 1024 || 'M' user_space,
user_bytes * 100 / bytes "% FREE"
from dba_data_files;
--数据库对象
select
t2.name owner,
t1.subtype$ object_type,
t1.valid status, count(1) count#
from sysobjects t1, sysobjects t2
where t1.schid = t2.id
and t1.schid != 0
group by t2.name, t1.subtype$, t1.valid;
--数据库创建日期和归档方式
select
create_time,
case when arch_mode = 'n' then '非归档模式' else '归档模式' end arch
from v$database;
--查看object分类和数量
select
subtype$ object_type,
count(1) quantity
from sysobjects
where subtype$ <>''
group by subtype$
union
select
'column',
count(1)
from syscolumns;
--查看最近错误的sql语句
select * from SYS.V$RUNTIME_ERR_HISTORY
order by err_time desc;
--死锁排查select
lc.lmode,
lc.table_id,
lc.blocked,
vtw.id as trx_id,
vs.sess_id,
vs.sql_text,
vs.appname,
vs.clnt_ip
from v$lock lc
left join v$trxwait vtw on (lc.trx_id=vtw.id)
left join v$trx vt on (vtw.id=vt.id)
left join v$sessions vs on (vt.sess_id=vs.sess_id)
where vs.sql_text is not null;
文章
阅读量
获赞
