§1 Oracle 开发人员/DBA 与 数据字典关键字:Oracle、script 、Data Dictionary读者级别:入门级作者:赵元杰概要:Oracle 公司自 Oracle 9i 版本开始提供一个称为 Oracle Enterpr...
空间,你分配怎么还失败呢,问题就是出现在这个 OEM 上,OEM 只告诉你现在剩下的总空间是多少,这些 400MB 空间是由多个小的碎片块构成的。可能有的是 100MB 连续块,有的只有 2MB 连续快。 initial 400MB,…)要求的...
记录目前连接到实例的会话的信息,假设现在有 10 个用户登录到 Oracle 11g 系统,DBA 可从 V$SESSION 中看到这十个用户的相应信息,但这时有一个用户退出 Oracle 系统,V$SESSION 视图立即只看到 9 个用户的...
COMMENTS                                                       VARCHAR2(4000)SQL> set line 200SQL> col table_name for a28S...
此外,每个文件夹再分为对象管理、性能视图与数据字典、备份恢复有关数据字典、等。§1.4.3        “与时俱进” 跟踪新功能与数据字典    Oracle 系统每个版本都在增加新功能,这些新功能就带有内部的数据字典和视图,        ...
DBA_tablespaces          表空间有关信息dba_data_files           数据文件有关信息dba_free_space           表空间中可用空间的信息§1.6 附录 2:常用查询脚本(初学者)...
(select x from sys.dba_users                 where username = grantee)order by 1,2;----查询扩展在 10 次以上的段的信息:select owner,    ...
Upcoming SlideShare
Loading in …5
×

A.oracle 数据字典与脚本初步

1,296 views
1,221 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,296
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

A.oracle 数据字典与脚本初步

  1. 1. §1 Oracle 开发人员/DBA 与 数据字典关键字:Oracle、script 、Data Dictionary读者级别:入门级作者:赵元杰概要:Oracle 公司自 Oracle 9i 版本开始提供一个称为 Oracle Enterprise Manager(OEM)的图像界面,它给广大用户带来了面目一新的友好界面,特别是给 DBA带来极大的方便。DBA 可从过去记住多个数据字典和掌握许多查询技巧才能实现的繁琐任务中解放出来。毫无疑问,OEM 是一个非常好的产品,但是,作为深入了解 Oracle 内幕和分析复杂问题的 DBA 来说,除了熟练掌握 OEM 的使用方法外,还应该掌握一些必要的数据字典和查询技巧,那么,在遇到复杂问题时可通过查询数据字典的方法, 从多个角度深入剖析问题的根源,从而帮助你解决棘手的问题。 本文章从初学者的角度出发,介绍如何掌握一些数据字典和查询技巧。§1.1 数据字典和视图查询重要吗 ? 数据字典和视图是用来存储 Oracle 系统的重要数据的一组内部表,数据字典存储的数据包括 Oracle 系统本身的信息(如数据库名称、 字符集信息)等, 也包括用户使用 Oracle 系统过程中所产生的数据,比如用户创建表所产生的表结构信息、创建的存储过程的代码等。这些数据字典中的数据是由 Oracle 系统自动维护,作为使用 Oracle 系统的技术人员,只要掌握如何从这些数据字典中查询需要的信息即可,比如,你想了解你自己有几个表,你需要查询 User_tables 数据字典,如果你了解表的列的信息,你还要查询 User_tab_columns 数据字典。又比如,Oracle 系统运行时出现慢的现象,DBA 想看到哪些语句产生了“锁”现象导致其他会话处于等待状态,则 DBA 需要查询 V$SESSION 和 V$LOCK 等。§1.2 数据字典与 OEM 对于 Oracle 初学者来说,可能会问,现在除了使用 Oracle 10g/11g 的 OEM外,还有许多界面漂亮的图形界面工具可选,比如 Quest 公司的 Toad 等,你介绍的数据字典和查询技巧不是多余的了吗?其实, 要回答这个问题也是比较简单的,图形界面能以最简单和直观的方法展现数据字典内的数据,比如:你看到某个表空间的总空间是 nnnMB,现在已经用去 xxxMB,还剩下 yyyMB 等。此外,图形界面还给出相应的告警信息等,这些都是图形界面的优势所在。但是,图形界面有时不会给出详细的信息,比如:USERS 表空间总 1000MB,现在已经使用了 600MB, 还剩下 400MB,这时, 你在 USERS 表空间上创建一个表 my_tab1,创建 my_tab1 表时使用 STORAGE ( initial 400MB,…)来该表预分配存储空间400MB 就可能失败, 你再改为 200MB 仍然失败。 那么, 你会感觉明明剩下 400MB
  2. 2. 空间,你分配怎么还失败呢,问题就是出现在这个 OEM 上,OEM 只告诉你现在剩下的总空间是多少,这些 400MB 空间是由多个小的碎片块构成的。可能有的是 100MB 连续块,有的只有 2MB 连续快。 initial 400MB,…)要求的是 400MB 而(的连续块,当然会分配失败了。那么,你会问,这 400MB 中,最大的那个连续块是多大了。要得到这个结果,你查询数据字典就非常简单了,请看下面样例:--9i/10g/11g 版本:col “自由空间” for a14col 最小字节 for 999,999,999col 最大字节 for 999,999,999col 平均字节 for 999,999,999col 分布在 for 999,999,999col 表空间类型 for a18SELECT f.tablespace_name “表空间”,Decode(d.EXTENT_MANAGEMENT,’DICTIONARY’,’字典’,’本地’) “表空间类型”,TRUNC(SUM(f.bytes/1024000),2 ) || MB “自由空间”,MIN(f.bytes) “最小字节”, MAX(f.bytes) “最大字节”,AVG(f.bytes) “平均字节”,COUNT(f.tablespace_name) “分布在”FROM dba_free_space f, dba_tablespaces dWhere f.tablespace_name = d.tablespace_nameGROUP BY f.tablespace_name ,d.EXTENT_MANAGEMENT ;表空间 表空间类型 自由空间 最小字节 最大字节 平均字节 分布在------------------ ------------------ -------------- ------------ ------------ ------------ --------RP_TAB0311 本地 64.44MB 65,994,752 65,994,752 65,994,752 1RP_TAB0312 本地 64.44MB 65,994,752 65,994,752 65,994,752 1RP_TAB0401 本地 64.44MB 65,994,752 65,994,752 65,994,752 1RP_TAB0402 本地 64.44MB 65,994,752 65,994,752 65,994,752 1SYSTEM 字典 332.59MB 340,574,208 340,574,208 340,574,208 1TEMP 字典 524.28MB 655,360 472,637,440 5,422,856 99TOOLS 字典 79.76MB 32,768 294,912 35,936 2,273§1.3 数据字典与视图构成 Oracle 系统数据字典一般都以 DBA_xxx(如 DBA_TABLES)、ALL_xxx、USER_xxx 来命名,以 DBA_开头的属于 DBA 使用的数据字典,DBA_开头的信息包含了 ALL_和 USER_的数据字典。以 USER_开头数据字典只看到属于自己的对象的信息。而 ALL_开头的数据字典包含主要属于自己的对象外,还包含其他用户授予可访问的对象的信息。 除了数据字典外,Oracle 系统还包含众多的视图,视图一般以 V$xxx 和X$xxx 命名,V$xxx 命名的视图有的专家称为动态性能视图,但是,我们建议称为视图即可。 这些以 V$xxx 命名的视图的内部数据多数动态变化,比如 V$session
  3. 3. 记录目前连接到实例的会话的信息,假设现在有 10 个用户登录到 Oracle 11g 系统,DBA 可从 V$SESSION 中看到这十个用户的相应信息,但这时有一个用户退出 Oracle 系统,V$SESSION 视图立即只看到 9 个用户的信息。这就是所谓的“动态视图”的原因。提醒初学者:数据字典都以下减号(“_”)带有一个英语单词构成,比如表的信息的数据字典是 DBA_TABLES、表的列的信息是 DBA_TAB_CLUMNS、索引的数据字典是 DBA_INDEXES 等;而视图的命名与数据字典不同,后面的英语单词都单数(不是复数),比如 V$SESSION 等。§1.4 如何学习和记住数据字典 首先说明,本人不建议你专门像记英语单词那样去记 Oracle 系统数据字典,而是看数据字典的构成是如何,这样,记住一般数据字典就很容易,即使你没有完成记住,在使用时连蒙带猜也能应付,比如,你想查询你创建的视图都存储到哪里去了,那你会想:你创建的表的信息在 USER_TABLEs 数据字典里,那么你的视图的代码也可能存储在 USER_VIEWs 数据字典里。§1.4.1 数据字典的根-DICT 所有 Oracle 系统各版本,数据字典和视图的相关信息都存储在 DICTionary的数据字典里, 而且每个新版本的新功能增加,新的数据字典和视图不断被加入到 DICT 中,当然,Oracle 系统也相应地淘汰某些数据字典。下面是查询 DICT了解数据基本信息的脚本:--Oracle 11g 版本:C:Documents and Settingszhao>cdC:>sqlplus system/Zhaoyuan123SQL*Plus: Release 11.2.0.1.0 Production on 星期四 6 月 30 15:56:27 2011Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> desc dict名称 是否为空? 类型----------------------------------------- ------------------------------------TABLE_NAME VARCHAR2(30)
  4. 4. COMMENTS VARCHAR2(4000)SQL> set line 200SQL> col table_name for a28SQL> col comments for a120SQL> show userUSER 为 "SYSTEM"SQL> select count(*) FROM DICT; COUNT(*)---------- 2553SQL> SELECT * FROM DICT WHERE table_name like DBA_% and rownum<11;TABLE_NAME COMMENTS------------------------------------------------------------------------------------------------DBA_2PC_NEIGHBORS information about incoming and outgoing connections for pending transactionsDBA_2PC_PENDING info about distributed transactions awaiting recoveryDBA_ADDM_FDG_BREAKDOWNDBA_ADDM_FINDINGSDBA_ADDM_INSTANCESDBA_ADDM_SYSTEM_DIRECTIVESDBA_ADDM_TASKSDBA_ADDM_TASK_DIRECTIVESDBA_ADVISOR_ACTIONSDBA_ADVISOR_COMMANDS已选择 10 行。SQL>§1.4.2 积少成多方法记住一些必要的数据字典 Oracle 11g 系统的数据字典多达上千个,要全部记住也没有必要,再说,你记住数据字典的名称, 还是没有办法记住数据字典内的列的名称及其含义,所以,我们并不建议要记住很多数据字典,而是将那些重要的、日常要用到的数据字典记录在自己的秘笈里即可。这里所说的秘笈是你自己习惯的多个文件夹(目录结构),比如: Oracle 10g-常用数据字典与脚本 Oracle 11g-常用数据字典与脚本
  5. 5. 此外,每个文件夹再分为对象管理、性能视图与数据字典、备份恢复有关数据字典、等。§1.4.3 “与时俱进” 跟踪新功能与数据字典 Oracle 系统每个版本都在增加新功能,这些新功能就带有内部的数据字典和视图, 10g 比如: 版本新增加回收站和闪回功能, 就增加了 DBA_RECYCLEBIN数据字典和 V$FLASHBACK_DATABASE_STAT、V$FLASHBACK_DATABASE_LOG 视图,再比如: 11g 版本增加内存自动管理,就增加了 V$MEMORY_TARGET_ADVICE 视图等。从这一点来看,我们只要抓住”新功能必有新数据字典”这个关键点,记住新增加的数据字典和视图也不难。§1.5 附录 1:常用数据字典(初学者) 下面是本人临时整理的一些基本的数据字典,有兴趣的读者可从网山搜索,搜索的关键字为: 数据字典 说明DBA_OBJECTS 各用户的对象的基本信息DBA_tables 有关表基本信息的数据字典DBA_TAB_columns 表的列信息的数据字典DBA_tab_partitions 分区表的相关信息DBA_part_key_columns 分区表的分区键的信息DBA_TAB_SUBPARTITIONS 表的子分区信息DBA_indexes 索引的基本信息DBA_ind_columns 索引的列的详细信息DBA_ind_partitions 分区索引的信息DBA_DEPENDENCIES 表间依赖关系信息DBA_CONSTRAINTS 表的约束信息(主、外键、check 等)DBA_Views 视图有关的信息DBA_SEQUENCES 序列有关的信息DBA_SYNONYMS 同义词有关信息DBA_users Oracle 系统用户有关信息DBA_tab_privs 用户对表可访问的信息(对象权限信息)DBA_sys_privs 授予系统权限的信息DBA_role_privs 授予角色权限的信息DBA_segments 有关段的信息(段=占用存储空间的对象,表索引都占用空间)DBA_extents 段在空间扩展中的信息记录
  6. 6. DBA_tablespaces 表空间有关信息dba_data_files 数据文件有关信息dba_free_space 表空间中可用空间的信息§1.6 附录 2:常用查询脚本(初学者) 下面例子是引导初学者如何查询数据的一些简单脚本,对于中级以上读者可参考网上的其他文章:--Oracle 11g 版本:--查看自己有哪些对象:Select object_name,object_type,status from user_objectsOrder by object_type ;----查询两个对象的依赖关系:SELECT name, type, referenced_name, referenced_typeFROM user_dependenciesWHERE referenced_name IN (EMPLOYEES,EMP_VW );----列出表的依赖关系:select decode(referenced_type, NON-EXISTENT, ....., referenced_type) || || referenced_owner || . || referenced_name r_name, is referenced by: || type || || owner || .|| name name, Referenced Link: || decode(referenced_link_name, null, none, referenced_link_name) r_linkfrom sys.dba_dependencieswhere owner not in (SYS, SYSTEM)order by 1,2;----直接将系统权限授予用户和角色select b.privilege what_granted, b.admin_option, a.usernamefrom sys.dba_users a, sys.dba_sys_privs bwhere a.username = b.granteeorder by 1,2;select privilege what_granted, admin_option, granteefrom sys.dba_sys_privswhere not exists
  7. 7. (select x from sys.dba_users where username = grantee)order by 1,2;----查询扩展在 10 次以上的段的信息:select owner, segment_name, segment_type, tablespace_name, extents, max_extentsfrom sys.dba_segmentswhere extents > 10order by tablespace_name;----查询无效对象的信息:select owner, object_name, object_type, created, last_ddl_timefrom sys.dba_objectswhere status = INVALIDorder by owner, object_type;==============全文完================

×