avinliu 发表于 2011-12-22 08:54

Oracle系统表介绍和查询

<P align=center><STRONG><FONT size=3>Oracle系统表介绍和查询 </FONT></STRONG></P>
<P><FONT size=3>介绍了ORACLE下对系统表的查询。</FONT></P>
<DIV class=brieftext>
<P class=ad><FONT size=3>1、用户 <BR>2、表空间<BR>3、数据库对象 <BR>4、表 <BR>5、索引<BR>6、序列 <BR>7、视图 <BR>8、聚簇<BR>9、快照<BR>10、同义词 <BR>11、数据库链 <BR>12、触发器 <BR>13、约束 <BR>14、回滚段 <BR>15、作业 </FONT></P>
<P class=ad><FONT size=3>数据字典dict总是属于Oracle用户sys的。 </FONT></P></DIV>
<DIV class="content bgF8F8F8 f14">
<DIV><BR><FONT size=3><STRONG>1、用户:</STRONG>所谓用户就是有权限访问数据库的人。 <BR> select username from dba_users; <BR>改口令 <BR> alter user spgroup identified by spgtest; </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>2、表空间:</STRONG>表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表, 所以称作表空间。</FONT><FONT size=3><STRONG> <BR></STRONG> select * from dba_data_files; <BR> select * from dba_tablespaces;//表空间 <BR> select tablespace_name,sum(bytes), sum(blocks) <BR>from dba_free_space group by tablespace_name;//空闲表空间 <BR> select * from dba_data_files <BR>where tablespace_name='RBS';//表空间对应的数据文件 <BR> select * from dba_segments <BR>where tablespace_name='INDEXS'; </FONT></DIV>
<DIV><BR><STRONG><FONT size=3>3、数据库对象:</FONT></STRONG></DIV>
<DIV><FONT size=3>1 表(Table )<BR>2 索引(Index)<BR>3 视图(View)<BR>4 图表(Diagram)<BR>5 缺省值(Default)<BR>6 规则(Rule)<BR>7 触发器(Trigger)<BR>8 存储过程(Stored Procedure)<BR>9 用户(User)<BR>10 序列 <BR> select * from dba_objects; <BR> CLUSTER、DATABASE LINK、FUNCTION、INDEX、LIBRARY、PACKAGE、PACKAGE BODY、 <BR> PROCEDURE、SEQUENCE、SYNONYM、TABLE、TRIGGER、TYPE、UNDEFINED、VIEW。 </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>4、表: </STRONG>数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row) 和列(Column)组成的。列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。行包括了若干列信息项。一行数据称为一个或一条记录,它表达有一定意义的信息组合。一个数据库表由一条或多条记录组成,没有记录的表称为空表。每个表中通常都有一个主关键字,用于惟一地确定一条记录。<BR> select * from dba_tables; <BR> analyze my_table compute statistics;-&gt;dba_tables后6列 <BR> select extent_id,bytes from dba_extents <BR> where segment_name='CUSTOMERS' and segment_type='TABLE' <BR> order by extent_id;//表使用的extent的信息。segment_type='ROLLBACK'查看回滚段的空间分配信息 <BR> 列信息: <BR>select distinct table_name <BR>from user_tab_columns <BR>where column_name='SO_TYPE_ID'; </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>5、索引:</STRONG>索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径,并且可监督表的数据,使其索引所指向的列中的数据不重复。如聚簇索引。  <BR> select * from dba_indexes;//索引,包括主键索引 <BR> select * from dba_ind_columns;//索引列 <BR> select i.index_name,i.uniqueness,c.column_name <BR>from user_indexes i,user_ind_columns c <BR> where i.index_name=c.index_name <BR> and i.table_name ='ACC_NBR';//联接使用 </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>6、序列:</STRONG>序列定义存储在数据字典中,序列通过提供唯一数值的顺序表用于简化程序设计工作。 <BR> select * from dba_sequences; </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>7、视图:</STRONG>视图看上去同表似乎一模一样,具有一组命名的字段和数据项,但它其实是一个虚拟的表,在数据库中并不实际存在。视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。由此可见,视图可以用来控制用户对数据的访问,并能简化数据的显示,即通过视图只显示那些需要的数据信息。</FONT><FONT size=3><STRONG> <BR></STRONG> select * from dba_views; <BR> select * from all_views; <BR>text 可用于查询视图生成的脚本 </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>8、聚簇:</STRONG>为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇。</FONT><FONT size=3><STRONG> <BR></STRONG> select * from dba_clusters; </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>9、快照:</STRONG>高级复制,arw,statspack上的概念, 就是数据库采集下系统某一时刻的数据,将数据存入数据库中,在arw,statspack中,利用不同时间点间的快照,可以生成报告,用来监测系统在这段时间的性能趋势!</FONT><STRONG><BR></STRONG><FONT size=3> select * from dba_snapshots; <BR>快照、分区应存在相应的表空间。</FONT></DIV>
<DIV><BR><FONT size=3><STRONG>10、同义词:</STRONG>数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。</FONT><FONT size=3><STRONG> <BR></STRONG> select * from dba_synonyms <BR>where table_owner='SPGROUP'; <BR>//if owner is PUBLIC,then the synonyms is a public synonym. <BR> if owner is one of users,then the synonyms is a private synonym. </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>11、数据库链:</STRONG>ORACLE中的数据库链(database link)是对远程数据库定义的一路径。数据库链对分布式数据库的用户是透明的,数据库链的名字与链所指向的数据库的全局名相同。当数据库链建立后,任何连接到一本地数据库的应用或用户,通过数据库链方便地隐式地连接到远程数据库。<BR><STRONG>&nbsp;</STRONG> select * from dba_db_links; <BR>在spbase下建数据库链 <BR> create database link dbl_spnew <BR> connect to spnew identified by spnew using 'jhhx'; <BR> insert into acc_nbr@dbl_spnew <BR> select * from acc_nbr where nxx_nbr='237' and line_nbr='8888'; </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>12、触发器:</STRONG>触发器是一个用户定义的SQL事务命令的集合。当对一个表进行插入、更改、删除时,这组命令就会自动执行。</FONT><FONT size=3><STRONG> <BR></STRONG> select * from dba_triggers where owner='exhibition'; <BR>存储过程,函数从dba_objects查找。 <BR>其文本:select text from user_source where name='BOOK_SP_EXAMPLE'; <BR>建立出错:select * from user_errors; <BR>oracle总是将存储过程,函数等软件放在SYSTEM表空间。 </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>13、约束:</STRONG>约束是表级强制执行的规则,当表中数据有相互依赖性时,可保护数据不被删除。</FONT><FONT size=3><STRONG> <BR></STRONG>(1)约束是和表关联的,可在create table或alter table table_name add/drop/modify来建立、修改、删除约束。 <BR>可以临时禁止约束,如: <BR> alter table book_example <BR> disable constraint book_example_1; <BR> alter table book_example <BR> enable constraint book_example_1; <BR>(2)主键和外键被称为表约束,而not null和unique之类的约束被称为列约束。通常将主键和外键作为单独的命名约束放在字段列表下面,而列约束可放在列定义的同一行,这样更具有可读性。 <BR>(3)列约束可从表定义看出,即describe;表约束即主键和外键,可从dba_constraints和dba_cons_columns 查。 <BR> select * from user_constraints <BR> where table_name='BOOK_EXAMPLE'; <BR> select owner,CONSTRAINT_NAME,TABLE_NAME <BR>from user_constraints <BR>where constraint_type='R' <BR>order by table_name; <BR>(4)定义约束可以无名(系统自动生成约束名)和自己定义约束名(特别是主键、外键) <BR>如:create table book_example <BR>(identifier number not null); <BR>create table book_example <BR>(identifier number constranit book_example_1 not null); </FONT></DIV>
<DIV><FONT size=3>(5)select * from dba_constraints T where owner=用户名 AND T.CONSTRAINT_TYPE='F';查看这个用户中所有的外键约束,table_name显示了建立在哪个表上</FONT></DIV>
<DIV><BR><FONT size=3><STRONG>14、回滚段:</STRONG> 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正&nbsp; 在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。<STRONG> </STRONG>在所有的修改结果存入磁盘前,回滚段中保持恢复该事务所需的全部信息,必须以数据库发生的事务来相应确定其大小(DML语句才可回滚,create,drop,truncate等DDL不能回滚)。回滚段回滚段空间(undo表空间)(简介Oracle回滚段空间回收步骤</FONT><A href="http://blog.chinaunix.net/space.php?uid=20114009&amp;do=blog&amp;id=2377962" target=_blank><FONT size=3>http://blog.chinaunix.net/space.php?uid=20114009&amp;do=blog&amp;id=2377962</FONT></A><FONT size=3>) <BR>回滚段数量=并发事务/4,但不能超过50;使每个回滚段大小足够处理一个完整的事务; <BR> create rollback segment r05 <BR> tablespace rbs; <BR> create rollback segment rbs_cvt <BR> tablespace rbs <BR> storage(initial 1M next 500k); <BR>使回滚段在线 <BR> alter rollback segment r04 online; <BR>用dba_extents,v$rollback_segs监测回滚段的大小和动态增长。 <BR>回滚段的区间信息 <BR> select * from dba_extents <BR> where segment_type='ROLLBACK' and segment_name='RB1'; <BR>回滚段的段信息,其中bytes显示目前回滚段的字节数 <BR> select * from dba_segments <BR>where segment_type='ROLLBACK' and segment_name='RB1'; <BR>为事物指定回归段 <BR> set transaction use rollback segment rbs_cvt <BR>针对bytes可以使用回滚段回缩。 <BR> alter rollback segment rbs_cvt shrink; <BR> select bytes,extents,max_extents from dba_segments <BR>where segment_type='ROLLBACK' and segment_name='RBS_CVT'; <BR>回滚段的当前状态信息: <BR> select * from dba_rollback_segs <BR>where segment_name='RB1'; <BR>比多回滚段状态status,回滚段所属实例instance_num <BR>查优化值optimal <BR> select n.name,s.optsize <BR>from v$rollname n,v$rollstat s <BR> where n.usn=s.usn; <BR>回滚段中的数据 <BR> set transaction use rollback segment rb1;/*回滚段名*/ <BR> select n.name,s.writes <BR>from v$rollname n,v$rollstat s <BR> where n.usn=s.usn; <BR>当事务处理完毕,再次查询$rollstat,比较writes(回滚段条目字节数)差值,可确定事务的大小。 <BR>查询回滚段中的事务 <BR> column rr heading 'RB Segment' format a18 <BR> column us heading 'Username' format a15 <BR> column os heading 'Os User' format a10 <BR> column te heading 'Terminal' format a10 <BR> select r.name rr,nvl(s.username,'no transaction') us,s.osuser os,s.terminal te <BR>from v$lock l,v$session s,v$rollname r <BR> where l.sid=s.sid(+) <BR> and trunc(l.id1/65536)=R.USN <BR> and l.type='TX' <BR> and l.lmode=6 <BR> order by r.name; </FONT></DIV>
<DIV><BR><FONT size=3><STRONG>15、作业:</STRONG>作业是数据库服务器的一些自动化、标准化的管理工作。比如定时的数据库关闭或启动、定时执行数据库的恢复或备份等。<BR><STRONG>&nbsp;</STRONG>查询作业信息 <BR> select job,broken,next_date,interval,what from user_jobs; <BR> select job,broken,next_date,interval,what from dba_jobs; <BR>查询正在运行的作业 <BR> select * from dba_jobs_running; <BR>使用包exec dbms_job.submit(:v_num,'a;',sysdate,'sysdate + (10/(24*60*60))')加入作业。间隔10秒钟 <BR>exec dbms_job.submit(:v_num,'a;',sysdate,'sysdate + (11/(24*60))')加入作业。间隔11分钟使用包exec dbms_job.remove(21)删除21号作业。 <BR></FONT></DIV></DIV>
页: [1]
查看完整版本: Oracle系统表介绍和查询