Oracle系统表介绍和查询

来源:互联网 发布:阿里云win404 编辑:程序博客网 时间:2024/05/16 08:22

学习用到了oracle,对比需要找很多数据,特对oracle进行了转载。

原文链接如下:http://blog.chinaunix.net/uid-20114009-id-2377715.html

原文如下:

Oracle系统表介绍和查询

介绍了ORACLE下对系统表的查询。

1、用户
2、表空间
3、数据库对象
4、表
5、索引
6、序列
7、视图
8、聚簇
9、快照
10、同义词
11、数据库链
12、触发器
13、约束
14、回滚段
15、作业

数据字典dict总是属于Oracle用户sys的。


1、用户:所谓用户就是有权限访问数据库的人。
 select username from dba_users;
改口令
 alter user spgroup identified by spgtest;

2、表空间:表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。
 select * from dba_data_files;
 select * from dba_tablespaces;//表空间
 select tablespace_name,sum(bytes), sum(blocks)
from dba_free_space group by tablespace_name;//空闲表空间
 select * from dba_data_files
where tablespace_name='RBS';//表空间对应的数据文件
 select * from dba_segments
where tablespace_name='INDEXS';

3、数据库对象:
1 表(Table )
2 索引(Index)
3 视图(View)
4 图表(Diagram)
5 缺省值(Default)
6 规则(Rule)
7 触发器(Trigger)
8 存储过程(Stored Procedure)
9 用户(User)
10 序列
 select * from dba_objects;
 CLUSTER、DATABASE LINK、FUNCTION、INDEX、LIBRARY、PACKAGE、PACKAGE BODY、
 PROCEDURE、SEQUENCE、SYNONYM、TABLE、TRIGGER、TYPE、UNDEFINED、VIEW。

4、表: 数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row) 和列(Column)组成的。列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。行包括了若干列信息项。一行数据称为一个或一条记录,它表达有一定意义的信息组合。一个数据库表由一条或多条记录组成,没有记录的表称为空表。每个表中通常都有一个主关键字,用于惟一地确定一条记录。
 select * from dba_tables;
 analyze my_table compute statistics;->dba_tables后6列
 select extent_id,bytes from dba_extents
 where segment_name='CUSTOMERS' and segment_type='TABLE'
 order by extent_id;//表使用的extent的信息。segment_type='ROLLBACK'查看回滚段的空间分配信息
 列信息:
select distinct table_name
from user_tab_columns
where column_name='SO_TYPE_ID';

5、索引:索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径,并且可监督表的数据,使其索引所指向的列中的数据不重复。如聚簇索引。 
 select * from dba_indexes;//索引,包括主键索引
 select * from dba_ind_columns;//索引列
 select i.index_name,i.uniqueness,c.column_name
from user_indexes i,user_ind_columns c
 where i.index_name=c.index_name
 and i.table_name ='ACC_NBR';//联接使用

6、序列:序列定义存储在数据字典中,序列通过提供唯一数值的顺序表用于简化程序设计工作。
 select * from dba_sequences;

7、视图:视图看上去同表似乎一模一样,具有一组命名的字段和数据项,但它其实是一个虚拟的表,在数据库中并不实际存在。视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。由此可见,视图可以用来控制用户对数据的访问,并能简化数据的显示,即通过视图只显示那些需要的数据信息。
 select * from dba_views;
 select * from all_views;
text 可用于查询视图生成的脚本

8、聚簇:为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇。
 select * from dba_clusters;

9、快照:高级复制,arw,statspack上的概念, 就是数据库采集下系统某一时刻的数据,将数据存入数据库中,在arw,statspack中,利用不同时间点间的快照,可以生成报告,用来监测系统在这段时间的性能趋势!
 select * from dba_snapshots;
快照、分区应存在相应的表空间。

10、同义词:数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。
 select * from dba_synonyms
where table_owner='SPGROUP';
//if owner is PUBLIC,then the synonyms is a public synonym.
 if owner is one of users,then the synonyms is a private synonym.

11、数据库链:ORACLE中的数据库链(database link)是对远程数据库定义的一路径。数据库链对分布式数据库的用户是透明的,数据库链的名字与链所指向的数据库的全局名相同。当数据库链建立后,任何连接到一本地数据库的应用或用户,通过数据库链方便地隐式地连接到远程数据库。
  select * from dba_db_links;
在spbase下建数据库链
 create database link dbl_spnew
 connect to spnew identified by spnew using 'jhhx';
 insert into acc_nbr@dbl_spnew
 select * from acc_nbr where nxx_nbr='237' and line_nbr='8888';

12、触发器:触发器是一个用户定义的SQL事务命令的集合。当对一个表进行插入、更改、删除时,这组命令就会自动执行。
 select * from dba_triggers where owner='exhibition';
存储过程,函数从dba_objects查找。
其文本:select text from user_source where name='BOOK_SP_EXAMPLE';
建立出错:select * from user_errors;
oracle总是将存储过程,函数等软件放在SYSTEM表空间。

13、约束:约束是表级强制执行的规则,当表中数据有相互依赖性时,可保护数据不被删除。
(1)约束是和表关联的,可在create table或alter table table_name add/drop/modify来建立、修改、删除约束。
可以临时禁止约束,如:
 alter table book_example
 disable constraint book_example_1;
 alter table book_example
 enable constraint book_example_1;
(2)主键和外键被称为表约束,而not null和unique之类的约束被称为列约束。通常将主键和外键作为单独的命名约束放在字段列表下面,而列约束可放在列定义的同一行,这样更具有可读性。
(3)列约束可从表定义看出,即describe;表约束即主键和外键,可从dba_constraints和dba_cons_columns 查。
 select * from user_constraints
 where table_name='BOOK_EXAMPLE';
 select owner,CONSTRAINT_NAME,TABLE_NAME
from user_constraints
where constraint_type='R'
order by table_name;
(4)定义约束可以无名(系统自动生成约束名)和自己定义约束名(特别是主键、外键)
如:create table book_example
(identifier number not null);
create table book_example
(identifier number constranit book_example_1 not null);
(5)select * from dba_constraints T where owner=用户名 AND T.CONSTRAINT_TYPE='F';查看这个用户中所有的外键约束,table_name显示了建立在哪个表上

14、回滚段: 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正  在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。在所有的修改结果存入磁盘前,回滚段中保持恢复该事务所需的全部信息,必须以数据库发生的事务来相应确定其大小(DML语句才可回滚,create,drop,truncate等DDL不能回滚)。回滚段回滚段空间(undo表空间)(简介Oracle回滚段空间回收步骤http://blog.chinaunix.net/space.php?uid=20114009&do=blog&id=2377962
回滚段数量=并发事务/4,但不能超过50;使每个回滚段大小足够处理一个完整的事务;
 create rollback segment r05
 tablespace rbs;
 create rollback segment rbs_cvt
 tablespace rbs
 storage(initial 1M next 500k);
使回滚段在线
 alter rollback segment r04 online;
用dba_extents,v$rollback_segs监测回滚段的大小和动态增长。
回滚段的区间信息
 select * from dba_extents
 where segment_type='ROLLBACK' and segment_name='RB1';
回滚段的段信息,其中bytes显示目前回滚段的字节数
 select * from dba_segments
where segment_type='ROLLBACK' and segment_name='RB1';
为事物指定回归段
 set transaction use rollback segment rbs_cvt
针对bytes可以使用回滚段回缩。
 alter rollback segment rbs_cvt shrink;
 select bytes,extents,max_extents from dba_segments
where segment_type='ROLLBACK' and segment_name='RBS_CVT';
回滚段的当前状态信息:
 select * from dba_rollback_segs
where segment_name='RB1';
比多回滚段状态status,回滚段所属实例instance_num
查优化值optimal
 select n.name,s.optsize
from v$rollname n,v$rollstat s
 where n.usn=s.usn;
回滚段中的数据
 set transaction use rollback segment rb1;/*回滚段名*/
 select n.name,s.writes
from v$rollname n,v$rollstat s
 where n.usn=s.usn;
当事务处理完毕,再次查询$rollstat,比较writes(回滚段条目字节数)差值,可确定事务的大小。
查询回滚段中的事务
 column rr heading 'RB Segment' format a18
 column us heading 'Username' format a15
 column os heading 'Os User' format a10
 column te heading 'Terminal' format a10
 select r.name rr,nvl(s.username,'no transaction') us,s.osuser os,s.terminal te
from v$lock l,v$session s,v$rollname r
 where l.sid=s.sid(+)
 and trunc(l.id1/65536)=R.USN
 and l.type='TX'
 and l.lmode=6
 order by r.name;

15、作业:作业是数据库服务器的一些自动化、标准化的管理工作。比如定时的数据库关闭或启动、定时执行数据库的恢复或备份等。
 查询作业信息
 select job,broken,next_date,interval,what from user_jobs;
 select job,broken,next_date,interval,what from dba_jobs;
查询正在运行的作业
 select * from dba_jobs_running;
使用包exec dbms_job.submit(:v_num,'a;',sysdate,'sysdate + (10/(24*60*60))')加入作业。间隔10秒钟
exec dbms_job.submit(:v_num,'a;',sysdate,'sysdate + (11/(24*60))')加入作业。间隔11分钟使用包exec dbms_job.remove(21)删除21号作业。 
0 0