SlideShare ist ein Scribd-Unternehmen logo
1 von 7
Downloaden Sie, um offline zu lesen
§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
空间,你分配怎么还失败呢,问题就是出现在这个 OEM 上,OEM 只告诉你现
在剩下的总空间是多少,这些 400MB 空间是由多个小的碎片块构成的。可能有
的是 100MB 连续块,有的只有 2MB 连续快。 initial 400MB,…)要求的是 400MB
                          而(
的连续块,当然会分配失败了。那么,你会问,这 400MB 中,最大的那个连续
块是多大了。要得到这个结果,你查询数据字典就非常简单了,请看下面样例:

--9i/10g/11g 版本:


col “自由空间” for a14
col 最小字节 for 999,999,999
col 最大字节 for 999,999,999
col 平均字节 for 999,999,999
col 分布在 for 999,999,999
col 表空间类型 for a18
SELECT 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 d
Where f.tablespace_name = d.tablespace_name
GROUP BY f.tablespace_name ,d.EXTENT_MANAGEMENT ;


表空间               表空间类型               自由空间               最小字节         最大字节           平均字节       分布在

------------------ ------------------ -------------- ------------ ------------ ------------ --------

RP_TAB0311        本地                  64.44MB          65,994,752   65,994,752    65,994,752            1

RP_TAB0312        本地                  64.44MB          65,994,752   65,994,752    65,994,752            1

RP_TAB0401        本地                  64.44MB          65,994,752   65,994,752    65,994,752            1

RP_TAB0402        本地                  64.44MB          65,994,752   65,994,752    65,994,752            1

SYSTEM            字典                  332.59MB        340,574,208   340,574,208   340,574,208           1

TEMP              字典                  524.28MB            655,360   472,637,440    5,422,856           99

TOOLS              字典                 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
记录目前连接到实例的会话的信息,假设现在有 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>cd
C:>sqlplus system/Zhaoyuan123


SQL*Plus: Release 11.2.0.1.0 Production on 星期四 6 月 30 15:56:27 2011


Copyright (c) 1982, 2010, Oracle. All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options


SQL> desc dict
名称                                   是否为空? 类型
-----------------------------------------                                --------
----------------------------
TABLE_NAME                                   VARCHAR2(30)
COMMENTS                                                       VARCHAR2(4000)


SQL> set line 200
SQL> col table_name for a28
SQL> col comments for a120
SQL> show user
USER 为 "SYSTEM"
SQL> select count(*) FROM DICT;


  COUNT(*)
----------
       2553


SQL> 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 transactions

DBA_2PC_PENDING              info about distributed transactions awaiting recovery

DBA_ADDM_FDG_BREAKDOWN

DBA_ADDM_FINDINGS

DBA_ADDM_INSTANCES

DBA_ADDM_SYSTEM_DIRECTIVES

DBA_ADDM_TASKS

DBA_ADDM_TASK_DIRECTIVES

DBA_ADVISOR_ACTIONS

DBA_ADVISOR_COMMANDS



已选择 10 行。



SQL>


§1.4.2 积少成多方法记住一些必要的数据字典

   Oracle 11g 系统的数据字典多达上千个,要全部记住也没有必要,再说,你
记住数据字典的名称,       还是没有办法记住数据字典内的列的名称及其含义,所以,
我们并不建议要记住很多数据字典,而是将那些重要的、日常要用到的数据字典
记录在自己的秘笈里即可。这里所说的秘笈是你自己习惯的多个文件夹(目录结
构),比如:

       Oracle 10g-常用数据字典与脚本

       Oracle 11g-常用数据字典与脚本
此外,每个文件夹再分为对象管理、性能视图与数据字典、备份恢复有关
数据字典、等。


§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            段在空间扩展中的信息记录
DBA_tablespaces          表空间有关信息
dba_data_files           数据文件有关信息
dba_free_space           表空间中可用空间的信息



§1.6 附录 2:常用查询脚本(初学者)
    下面例子是引导初学者如何查询数据的一些简单脚本,对于中级以上读者可参考网上
的其他文章:
--Oracle 11g 版本:
--查看自己有哪些对象:
Select object_name,object_type,status from user_objects
Order by object_type ;
--
--查询两个对象的依赖关系:
SELECT name, type, referenced_name, referenced_type
FROM user_dependencies
WHERE 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_link
from   sys.dba_dependencies
where owner not in ('SYS', 'SYSTEM')
order by 1,2;
--
--直接将系统权限授予用户和角色
select b.privilege what_granted,
              b.admin_option, a.username
from   sys.dba_users a, sys.dba_sys_privs b
where a.username = b.grantee
order by 1,2;

select privilege what_granted,
              admin_option, grantee
from   sys.dba_sys_privs
where not exists
(select 'x' from sys.dba_users
                 where username = grantee)
order by 1,2;
--
--查询扩展在 10 次以上的段的信息:
select owner,
       segment_name,
       segment_type,
       tablespace_name,
       extents,
       max_extents
from   sys.dba_segments
where extents > 10
order by tablespace_name;
--
--查询无效对象的信息:
select owner, object_name, object_type,
          created, last_ddl_time
from   sys.dba_objects
where status = 'INVALID'
order by owner, object_type;



==============全文完================

Weitere ähnliche Inhalte

Was ist angesagt?

Linux2帳號與磁碟空間管理
Linux2帳號與磁碟空間管理Linux2帳號與磁碟空間管理
Linux2帳號與磁碟空間管理
jiannrong
 
11g新特性streams同步捕获
11g新特性streams同步捕获11g新特性streams同步捕获
11g新特性streams同步捕获
maclean liu
 
Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例
maclean liu
 
【Ask maclean技术分享】oracle dba技能列表 z
【Ask maclean技术分享】oracle dba技能列表 z【Ask maclean技术分享】oracle dba技能列表 z
【Ask maclean技术分享】oracle dba技能列表 z
maclean liu
 
Essential oracle security internal for dba
Essential oracle security internal for dbaEssential oracle security internal for dba
Essential oracle security internal for dba
maclean liu
 
分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训
maclean liu
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
maclean liu
 
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展
yp_fangdong
 
第4章 数据库管理
第4章 数据库管理第4章 数据库管理
第4章 数据库管理
zhang shuren
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程
Lixun Peng
 
Cassandra的初步使用及一些简单的操作
Cassandra的初步使用及一些简单的操作Cassandra的初步使用及一些简单的操作
Cassandra的初步使用及一些简单的操作
zhubin885
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
dianming.song
 
Unix常用命令 1
Unix常用命令 1Unix常用命令 1
Unix常用命令 1
tony2yy_fish
 

Was ist angesagt? (20)

Linux2帳號與磁碟空間管理
Linux2帳號與磁碟空間管理Linux2帳號與磁碟空間管理
Linux2帳號與磁碟空間管理
 
11g新特性streams同步捕获
11g新特性streams同步捕获11g新特性streams同步捕获
11g新特性streams同步捕获
 
Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例Sql调优clustering factor影响数据删除速度一例
Sql调优clustering factor影响数据删除速度一例
 
【Ask maclean技术分享】oracle dba技能列表 z
【Ask maclean技术分享】oracle dba技能列表 z【Ask maclean技术分享】oracle dba技能列表 z
【Ask maclean技术分享】oracle dba技能列表 z
 
Essential oracle security internal for dba
Essential oracle security internal for dbaEssential oracle security internal for dba
Essential oracle security internal for dba
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance management
 
分区表基础知识培训
分区表基础知识培训分区表基础知识培训
分区表基础知识培训
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
百度分布式数据实践与进展
百度分布式数据实践与进展百度分布式数据实践与进展
百度分布式数据实践与进展
 
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
 
第4章 数据库管理
第4章 数据库管理第4章 数据库管理
第4章 数据库管理
 
淺談 Ado.net
淺談 Ado.net淺談 Ado.net
淺談 Ado.net
 
MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程MySQL源码分析.01.代码结构与基本流程
MySQL源码分析.01.代码结构与基本流程
 
imobile-beta技术沙龙
imobile-beta技术沙龙imobile-beta技术沙龙
imobile-beta技术沙龙
 
Cassandra的初步使用及一些简单的操作
Cassandra的初步使用及一些简单的操作Cassandra的初步使用及一些简单的操作
Cassandra的初步使用及一些简单的操作
 
MySQL数据库生产环境维护
MySQL数据库生产环境维护MySQL数据库生产环境维护
MySQL数据库生产环境维护
 
mysql总结
mysql总结mysql总结
mysql总结
 
MongoDB for C# developer
MongoDB for C# developerMongoDB for C# developer
MongoDB for C# developer
 
Unix常用命令 1
Unix常用命令 1Unix常用命令 1
Unix常用命令 1
 

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

1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能
WASecurity
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
Leyi (Kamus) Zhang
 
Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程
yiditushe
 
Oracle中比对2张表之间数据是否一致的几种方法
Oracle中比对2张表之间数据是否一致的几种方法Oracle中比对2张表之间数据是否一致的几种方法
Oracle中比对2张表之间数据是否一致的几种方法
maclean liu
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
pwesh
 
Oracle10g高级安全特性列加密技术
Oracle10g高级安全特性列加密技术Oracle10g高级安全特性列加密技术
Oracle10g高级安全特性列加密技术
maclean liu
 
香港六合彩
香港六合彩香港六合彩
第4章 sql server数据库的管理
第4章   sql server数据库的管理第4章   sql server数据库的管理
第4章 sql server数据库的管理
hanmo1988
 
深入学习Mongo db
深入学习Mongo db深入学习Mongo db
深入学习Mongo db
Lucien Li
 

Ähnlich wie A.oracle 数据字典与脚本初步 (20)

1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能
 
lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫lwdba – 開放原始碼的輕量級資料庫存取程式庫
lwdba – 開放原始碼的輕量級資料庫存取程式庫
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
 
Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程
 
Oracle中比对2张表之间数据是否一致的几种方法
Oracle中比对2张表之间数据是否一致的几种方法Oracle中比对2张表之间数据是否一致的几种方法
Oracle中比对2张表之间数据是否一致的几种方法
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
Oracle10g高级安全特性列加密技术
Oracle10g高级安全特性列加密技术Oracle10g高级安全特性列加密技术
Oracle10g高级安全特性列加密技术
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle security
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
手机之家新系统介绍及架构分享
手机之家新系统介绍及架构分享手机之家新系统介绍及架构分享
手机之家新系统介绍及架构分享
 
六合彩
六合彩六合彩
六合彩
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Sql语句的优化
Sql语句的优化Sql语句的优化
Sql语句的优化
 
第4章 sql server数据库的管理
第4章   sql server数据库的管理第4章   sql server数据库的管理
第4章 sql server数据库的管理
 
11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert system
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
深入学习Mongo db
深入学习Mongo db深入学习Mongo db
深入学习Mongo db
 

Mehr von WASecurity

IT Vulnerability & Tools Watch 2011
IT Vulnerability & Tools Watch 2011IT Vulnerability & Tools Watch 2011
IT Vulnerability & Tools Watch 2011
WASecurity
 
一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程
WASecurity
 
国内主流WAF测评报告
国内主流WAF测评报告国内主流WAF测评报告
国内主流WAF测评报告
WASecurity
 
企业安全应急响应与渗透反击V0.04(程冲)
企业安全应急响应与渗透反击V0.04(程冲)企业安全应急响应与渗透反击V0.04(程冲)
企业安全应急响应与渗透反击V0.04(程冲)
WASecurity
 
1.Oracle系统应用数据泄露问题分析
1.Oracle系统应用数据泄露问题分析1.Oracle系统应用数据泄露问题分析
1.Oracle系统应用数据泄露问题分析
WASecurity
 

Mehr von WASecurity (7)

Pki guide v1.0a_aka
Pki guide v1.0a_akaPki guide v1.0a_aka
Pki guide v1.0a_aka
 
IT Vulnerability & Tools Watch 2011
IT Vulnerability & Tools Watch 2011IT Vulnerability & Tools Watch 2011
IT Vulnerability & Tools Watch 2011
 
PCI DSS V2.0
PCI DSS V2.0PCI DSS V2.0
PCI DSS V2.0
 
一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程一次详细的渗透Wordpress教程
一次详细的渗透Wordpress教程
 
国内主流WAF测评报告
国内主流WAF测评报告国内主流WAF测评报告
国内主流WAF测评报告
 
企业安全应急响应与渗透反击V0.04(程冲)
企业安全应急响应与渗透反击V0.04(程冲)企业安全应急响应与渗透反击V0.04(程冲)
企业安全应急响应与渗透反击V0.04(程冲)
 
1.Oracle系统应用数据泄露问题分析
1.Oracle系统应用数据泄露问题分析1.Oracle系统应用数据泄露问题分析
1.Oracle系统应用数据泄露问题分析
 

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

  • 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. 空间,你分配怎么还失败呢,问题就是出现在这个 OEM 上,OEM 只告诉你现 在剩下的总空间是多少,这些 400MB 空间是由多个小的碎片块构成的。可能有 的是 100MB 连续块,有的只有 2MB 连续快。 initial 400MB,…)要求的是 400MB 而( 的连续块,当然会分配失败了。那么,你会问,这 400MB 中,最大的那个连续 块是多大了。要得到这个结果,你查询数据字典就非常简单了,请看下面样例: --9i/10g/11g 版本: col “自由空间” for a14 col 最小字节 for 999,999,999 col 最大字节 for 999,999,999 col 平均字节 for 999,999,999 col 分布在 for 999,999,999 col 表空间类型 for a18 SELECT 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 d Where f.tablespace_name = d.tablespace_name GROUP BY f.tablespace_name ,d.EXTENT_MANAGEMENT ; 表空间 表空间类型 自由空间 最小字节 最大字节 平均字节 分布在 ------------------ ------------------ -------------- ------------ ------------ ------------ -------- RP_TAB0311 本地 64.44MB 65,994,752 65,994,752 65,994,752 1 RP_TAB0312 本地 64.44MB 65,994,752 65,994,752 65,994,752 1 RP_TAB0401 本地 64.44MB 65,994,752 65,994,752 65,994,752 1 RP_TAB0402 本地 64.44MB 65,994,752 65,994,752 65,994,752 1 SYSTEM 字典 332.59MB 340,574,208 340,574,208 340,574,208 1 TEMP 字典 524.28MB 655,360 472,637,440 5,422,856 99 TOOLS 字典 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. 记录目前连接到实例的会话的信息,假设现在有 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>cd C:>sqlplus system/Zhaoyuan123 SQL*Plus: Release 11.2.0.1.0 Production on 星期四 6 月 30 15:56:27 2011 Copyright (c) 1982, 2010, Oracle. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> desc dict 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- TABLE_NAME VARCHAR2(30)
  • 4. COMMENTS VARCHAR2(4000) SQL> set line 200 SQL> col table_name for a28 SQL> col comments for a120 SQL> show user USER 为 "SYSTEM" SQL> select count(*) FROM DICT; COUNT(*) ---------- 2553 SQL> 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 transactions DBA_2PC_PENDING info about distributed transactions awaiting recovery DBA_ADDM_FDG_BREAKDOWN DBA_ADDM_FINDINGS DBA_ADDM_INSTANCES DBA_ADDM_SYSTEM_DIRECTIVES DBA_ADDM_TASKS DBA_ADDM_TASK_DIRECTIVES DBA_ADVISOR_ACTIONS DBA_ADVISOR_COMMANDS 已选择 10 行。 SQL> §1.4.2 积少成多方法记住一些必要的数据字典 Oracle 11g 系统的数据字典多达上千个,要全部记住也没有必要,再说,你 记住数据字典的名称, 还是没有办法记住数据字典内的列的名称及其含义,所以, 我们并不建议要记住很多数据字典,而是将那些重要的、日常要用到的数据字典 记录在自己的秘笈里即可。这里所说的秘笈是你自己习惯的多个文件夹(目录结 构),比如: Oracle 10g-常用数据字典与脚本 Oracle 11g-常用数据字典与脚本
  • 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. DBA_tablespaces 表空间有关信息 dba_data_files 数据文件有关信息 dba_free_space 表空间中可用空间的信息 §1.6 附录 2:常用查询脚本(初学者) 下面例子是引导初学者如何查询数据的一些简单脚本,对于中级以上读者可参考网上 的其他文章: --Oracle 11g 版本: --查看自己有哪些对象: Select object_name,object_type,status from user_objects Order by object_type ; -- --查询两个对象的依赖关系: SELECT name, type, referenced_name, referenced_type FROM user_dependencies WHERE 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_link from sys.dba_dependencies where owner not in ('SYS', 'SYSTEM') order by 1,2; -- --直接将系统权限授予用户和角色 select b.privilege what_granted, b.admin_option, a.username from sys.dba_users a, sys.dba_sys_privs b where a.username = b.grantee order by 1,2; select privilege what_granted, admin_option, grantee from sys.dba_sys_privs where not exists
  • 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_extents from sys.dba_segments where extents > 10 order by tablespace_name; -- --查询无效对象的信息: select owner, object_name, object_type, created, last_ddl_time from sys.dba_objects where status = 'INVALID' order by owner, object_type; ==============全文完================