Upload
wasecurity
View
885
Download
1
Embed Size (px)
Citation preview
Oracle 10g/11g Database
常用功能与内置包
赵元杰 北京群环域科技有限公司
2012.2
内容提要
♠版本功能与内置包 ♠开发者需了解的内置包 ♠ DBA需了解的内置包 ♠ DSA需了解的内置包 ♠参考
3/75
Oracle 功能与内置包
♠ Oracle功能与内置包关系: ♠许多开发者不喜欢PL/SQL,也喜欢内置包 ♠不了解新功能是由内置包写成,图形界面也要调用内置包来完成处理
♠许多新功能提供完善的API ♠ API 最简单方法就是 PL/SQL ♠ API 可采用JAVA 接口 ♠ API也可使用C/C++ 接口
Oracle 功能关键点
♠ Oracle 功能的内幕
♠对应的数据字典 ♠内设置包 ♠相应的参数
♠ Oracle 功能的表面
♠图形界面有相应栏目 ♠命令如何使用 ♠资料有功能介绍 ♠ API方法
Oracle 系统新功能与内置包
♠ Oracle 系统内置包与参考资料 ♠ Oracle 8i Supplied PL/SQL Packages Reference 共1036页 ♠ Oracle 9i Supplied PL/SQL Packages and Types Reference 共2008页 ♠ Oracle 10g Database PL/SQL Packages and Types Reference 共4164页 ♠ Oracle11g R1 Database PL/SQL Packages and Types Reference 共5100页
♠ Oracle 功能的表面 ♠ 图形界面有相应栏目 ♠ 命令如何使用 ♠ 资料有功能介绍 ♠ API方法
6/30
Oracle 系统新功能与内置包
♠ Oracle 新功能变化相关内容 ♠ 许多新功能=包+参数+数据字典
功能 内置包 参数 相关视图/数据字典
Resumable
(9i开始)
DBMS_RESUMABLE RESUMABLE_TIMEO
UT
DBA_RESUMABLET
DBA_OUTSTANDING_ALERTS
FLASHBACK
(10g 开始)
DBMS_FLASHBACK RECYCLEBIN
DB_FLASHBACK_RE
TENTION_TARGET
v$flashback_database_log
V$FLASHBACK_DATABASE_L
OGFILE
v$flashback_database_stat
DBA_RECYCLEBIN
Automatic
Diagnostic
Repository
(11g 开始)
DBMS_SQLDIAG DIAGNOSTIC_DEST V$ADR_BASE
V$ADR_HOME
V$Diag_info
7/75
Oracle 9i 新增加的包
Oracle9i 新支持包列表 DBMS_AQELM DBMS_ENCODE
DBMS_FGA DBMS_FLASHBACK
DBMS_LDAP DBMS_LIBCACHE
DBMS_LOGMNR_CDC_PUBLISH DBMS_LOGMNR_CDC_SUBSCRIBE
DBMS_METADATA DBMS_ODCI
DBMS_OUTLN_EDIT DBMS_REDEFINITION
DBMS_TRANSFORM DBMS_WM
DBMS_XMLGEN DBMS_XMLQUERY
DMBS_XMLSAVE UTL_ENCODE
UTL_URL
8/75
Oracle 9i 新增加的包
Oracle9i R2新支持包列表 DBMS_APPLY_ADM DBMS_CAPTURE_ADM
DBMS_LOGSTDBY DBMS_MGWADM
DBMS_MGWMSG DBMS_PROPAGATION_ADM
DBMS_RULE DBMS_RULE_ADM
DBMS_STORAGE_MAP DBMS_STREAMS
DBMS_STREAMS_ADM DBMS_XDB
DBMS_XDBT DBMS_XDB_VERSION
DBMS_XMLDOM DBMS_XMLPARSER
DBMS_XPLAN DBMS_XSLPROCESSOR
9/75
Oracle 10g 新的内置包
Oracle 10g R2 新的内置包
DBMS_AQELM
DBMS_AQIN
DBMS_CHANGE_NOTIFICATION
DBMS_DB_VERSION
DBMS_EPG
DBMS_ERRLOG
DBMS_EXPFIL
10/75
Oracle 10g 新的内置包
Oracle 10g R2 新的内置包
DBMS_FILE_GROUP
DBMS_PREDICTIVE_ANALYTICS
DBMS_PREPROCESSOR
DBMS_RLMGR
DBMS_TDB
SDO_NET_MEM
UTL_NLA
11/75
Oracle 10g 新修订的内置包
Oracle 10g R2 新修订的内置包
DBMS_ADVISOR
DBMS_APPLY_ADM
DBMS_AQ
DBMS_AQADM
DBMS_CAPTURE_ADM
DBMS_CDC_PUBLISH
DBMS_CRYPTO
DBMS_DATA_MINING
DBMS_DATA_MINING_TRANSFORM
DBMS_DATAPUMP
DBMS_DDL
DBMS_DESCRIBE
DBMS_FGA
DBMS_FILE_TRANSFER
DBMS_LOB
DBMS_LOGMNR
DBMS_LOGMNR_D
DBMS_LOGSTDBY
DBMS_METADATA
DBMS_MGWADM
12/75
Oracle 10g 新修订的内置包
Oracle 10g R2 新修订的内置包
DBMS_MGWMSG
DBMS_MONITOR
DBMS_OUTLN_EDIT
DBMS_OUTPUT
DBMS_PROPAGATION_ADM
DBMS_REDEFINITION
DBMS_REPAIR
DBMS_RESOURCE_MANAGER
DBMS_RULE_ADM
DBMS_SCHEDULER
DBMS_SERVER_ALERT
DBMS_SERVICE
DBMS_SESSION
DBMS_SPACE
DBMS_SPACE_ADMIN
DBMS_SQLTUNE
DBMS_STATS
DBMS_STREAMS
DBMS_STREAMS_ADM
DBMS_STREAMS_TABLESPACE_ADM
13/75
Oracle 10g 新修订的内置包
Oracle 10g R2 新修订的内置包
DBMS_TTS
DBMS_UTILITY
DBMS_WORKLOAD_REPOSITORY
DBMS_XDB
DBMS_XDBZ
DBMS_XMLDOM
DBMS_XMLSCHEMA
DBMS_XPLAN
DBMS_XSLPROCESSOR
SDO_CS
SDO_TOPO_MAP
SDO_UTIL
UTL_I18N
14/75
Oracle 11g 新的内置包
Oracle 11g R2 新支持的内置包
APEX_CUSTOM_AUTH
APEX_APPLICATION
APEX_ITEM
APEX_UTIL
DBMS_ADDM
DBMS_DBFS_HS
DBMS_ASSERT
DBMS_AUTO_TASK_ADMIN
DBMS_AUTO_TASK_IMMEDIATE
DBMS_AUDIT_MGMT
DBMS_AW_STATS
DBMS_COMPARISON
DBMS_COMPRESSION
DBMS_CONNECTION_POOL
DBMS_CSX_ADMIN
DBMS_CUBE
DBMS_CUBE_ADVISE
DBMS_DBFS_CONTENT
DBMS_DBFS_CONTENT_SPI
DBMS_DBFS_HS
DBMS_DBFS_SFS
DBMS_DG
15/75
Oracle 11g 新的内置包
Oracle 11g R2 新支持的内置包
DBMS_DST
DBMS_HM
DBMS_HPROF
DBMS_HS_PARALLEL
DBMS_METADATA_DIFF
DBMS_MGD_ID_UTL
DBMS_NETWORK_ACL_ADMIN
DBMS_NETWORK_ACL_UTILITY
DBMS_PARALLEL_EXECUTE
DBMS_RESCONFIG
DBMS_RESULT_CACHE
DBMS_SPM
DBMS_SQLDIAG
DBMS_STREAMS_ADVISOR_ADM
DBMS_STREAMS_HANDLER_ADM
DBMS_WORKLOAD_CAPTURE
DBMS_WORKLOAD_REPLAY
DBMS_XA
DBMS_XDB_ADMIN
DBMS_XDBRESOURCE
DBMS_XEVENT
DBMS_XMLINDEX
16/75
Oracle 11g 新的内置包
Oracle 11g R2 新支持的内置包
DBMS_XMLTRANSLATIONS
DBMS_XPLAN
SDO_CSW_PROCESS
SDO_GEOR_ADMIN
SDO_OLS
SDO_PC_PKG
SDO_TIN_PKG
SDO_WFS_LOCK
SDO_WFS_PROCESS
SEM_APIS
SEM_PERF
SEM_RDFCTX
SEM_RDFSA
UTL_MATCH
UTL_SPADV
17/75
Oracle 11g 新修订的内置包
Oracle 11g R2 新修订的内置包
DBMS_ADVISOR
DBMS_APPLY_ADM
DBMS_AQ
DBMS_AQADM
DBMS_CAPTURE_ADM
DBMS_CDC_PUBLISH
DBMS_CDC_SUBSCRIBE
DBMS_CQ_NOTIFICATION
DBMS_DATA_MINING
DBMS_DATA_MINING_TRANSFOR
M
DBMS_DATAPUMP
DBMS_EXPFIL
DBMS_FLASHBACK
DBMS_HS_PASSTHROUGH
DBMS_LOB
DBMS_LOGSTDBY
DBMS_METADATA
DBMS_MGWADM
DBMS_MVIEW
DBMS_OUTLN
DBMS_PARALLEL_EXECUTE
18/75
Oracle 11g 新修订的内置包
Oracle 11g R2 新修订的内置包
DBMS_PREDICTIVE_ANALYTICS
DBMS_PROPAGATION_ADM
DBMS_RESOURCE_MANAGER
DBMS_RLMGR
DBMS_RULE_ADM
DBMS_SCHEDULER
DBMS_SERVER_ALERT
DBMS_SESSION
DBMS_SPACE
DBMS_SQL
DBMS_SQLPA
DBMS_SQLTUNE
DBMS_STATS
DBMS_STREAMS
DBMS_STREAMS_ADM
DBMS_STREAMS_TABLESPACE_AD
M
DBMS_TRACE
DBMS_UTILITY
DBMS_WORKLOAD_REPOSITORY
DBMS_XDB
19/75
Oracle 11g 新修订的内置包
Oracle 11g R2 新修订的内置包
DBMS_XMLINDEX
DBMS_XMLSCHEMA
DBMS_XPLAN
ORD_DICOM
UTL_HTTP
UTL_IDENT
UTL_INADDR
UTL_RECOMP
UTL_SMTP
UTL_SPADV
UTL_TCP
20/75
10g新功能与内置包举例
♠ Oracle 10g新功能 ♠闪回新功能-DBMS_FLASHBACK ♠自动存储管理-DBMS_ASM ♠数据泵-DBMS_PUMP ♠ UTL_COMPRESS ♠ UTL_MAIL
21/75
11g新功能与内置包举例
♠ Oracle 11g 新功能
♠两个表比较-DBMS_COMPARISON ♠连接池-DBMS_CONNECTION_POOL ♠健康管理-DBMS_HM
22/75
11g内置包-DBMS_COMPARISON ♠ DBMS_COMPARISON
♠ 比较两个对象的差异 ♠ $ORACLE_HOME/rdbms/admin/dbmscmp.sql
♠ DBMS_COMPARISON相关的数据字典 ♠ DBA_COMPARISON ♠ DBA_COMPARISON_COLUMNS ♠ DBA_COMPARISON_SCAN ♠ DBA_COMPARISON_SCAN_SUMMARY ♠ DBA_COMPARISON_SCAN_VALUES ♠ DBA_COMPARISON_ROW_DIF
23/75
11g内置包-DBMS_SQLPA ♠ DBMS_SQLPA
♠ SQLPA=SQL Performance Analyzer
♠ 11g版本了解 SQL 执行计划以及 SQL 性能 ♠ 通过SPA可根据各种更改类型(如初始化参数更改、优化程序统计刷新和数据库升级)播放特定的 SQL 或整个的 SQL 负载,然后生成比较报告,帮助您评估它们的影响
♥ SPA 使用顺序:
♥ 1.捕获 SQL workload(工作量) ♥ 2.改变前执行工作量 ♥ 3.进行改变 ♥ 4.测试改变前执行工作量 ♥ 5.比较性能
24/75
11g内置包-DBMS_SPM ♥ 11g SPM=SQL Plan Management:
♥ SPM就是SQL Plan Management,是11g 自我管理(或自动性)发展的新功能
♥ 通过SPM,Oracle自动去判断某个SQL的新的执行计划是否更加合理(成本更低)
♥ 只有在新的执行计划比原来的执行计划更好的情况下,它才会被使用,从而有效的保护了执行计划的稳定性,进而保证了SQL语句的执行效率。
♥ DBMS_SPM包
♥ DBMS_SPM包来管理SQL Plan
♥ SPM是一个预防机制,它记录并评估SQL的执行计划,将已知的高效的SQL执行计划建立为SQL Plan Baselines
♥ SQL Plan Baseline的功能是保持SQL的性能而不必关注系统的改变
11g健康检查-DBMS_HM包
♠ 11g 健康检查包-DBMS_HM:
♠ 可在SQL或API中使用 : SQL> select name from v$hm_check order by 1;
NAME
----------------------------------------------------------------
All Control Files Check
All Datafiles Check
Archived Log Check
Block IO Revalidation Check
CF Member Check
DB Structure Integrity Check
Data Block Integrity Check
Dictionary Integrity Check
Failure Simulation Check
HM Test Check
IO Revalidation Check
Log Group Check
Log Group Member Check
Logical Block Check
Redo Integrity Check
Redo Revalidation Check
Single Datafile Check
Transaction Integrity Check
Txn Revalidation Check
Undo Segment Integrity Check
21 rows selected.
11g健康检查-DBMS_HM包
♠ 11g 健康检查包-DBMS_HM:
♠ 可在SQL或API中使用 : SQL> exec dbms_hm.run_check('DB Structure Integrity Check',’indy_2’);
PL/SQL procedure successfully completed.
SQL> select run_id,name,check_name from v$hm_run where name=’indy_2’;
RUN_ID NAME CHECK_NAME
---------- -------------------------------- --------------------------------
681 indy_2 DB Structure Integrity Check
SQL> set long 1000000000
SQL> select dbms_hm.get_run_report('indy_2') from dual;
DBMS_HM.GET_RUN_REPORT('INDY_2')
--------------------------------------------------------------------------------
Basic Run Information
Run Name : indy_2
Run Id : 761
Check Name : DB Structure Integrity Check
Mode : MANUAL
Status : COMPLETED
Start Time : 2007-08-15 14:51:47.986255 -04:00
End Time : 2007-08-15 14:51:48.003219 -04:00
Error Encountered : 0
Source Incident Id : 0
Number of Incidents Created : 0
27/75
内容提要
♠版本功能与内置包 ♠开发者需了解的内置包 ♠ DBA需了解的内置包 ♠ DSA需了解的内置包 ♠参考
28/75
开发者与内置包
♠ 10g版本的内置包与用户:
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select owner,count(*) from dba_objects
2 where object_type ='PACKAGE' group by owner
3* order by count(*) desc ;
OWNER COUNT(*)
------------------------------ ----------
SYS 519
CTXSYS 71
SYSMAN 71
MDSYS 47
OLAPSYS 45
29/75
开发者与内置包
♠ 11g版本的内置包与用户:
SQL> set pagesize 99
SQL> select owner,count(*) from dba_objects
2 where object_type ='PACKAGE' group by owner
3 order by count(*) desc ;
OWNER COUNT(*)
------------------------------ ----------
SYS 591
SYSMAN 187
FLOWS_030000 174
CTXSYS 70
MDSYS 69
OLAPSYS 45
XDB 30
ORDSYS 27
WKSYS 22
WMSYS 22
30/75
开发者与内置包
♠ 专用的内置包在各个用户名下 ♠ 软件人员需大概了解主要内置包的名称:
用户 用途
SYSMAN 管理Oracle数据库的用户
FLOWS_030000 DBA用的在APEX version 3.0 环境
CTXSYS Oracle Text用户
MDSYS Oracle Spatial用户
OLAPSYS OLAP元数据结构的用户
XDB Oracle XML DB用户
31/75
开发者与内置包
♠ 专用的内置包在各个用户名下 ♠ 软件人员需大概了解主要内置包的名称:
用户 用途
ORDSYS Oracle interMedia管理用户
WKSYS Oracle UltraSearch用户
WMSYS Oracle Data Mining account用户
EXFSYS 用于角色管理等的内部用户
ORDPLUGINS Oracle interMedia user
DBSNMP EM中管理带来的用户
ORACLE_OCM Oracle Configuration Manager用户
32/75
开发者与内置包
♠ Oracle 公司早就为你想好了: ♠不怕不知道;就怕想不到 ♠不了解内置包,你可做一些多余的工作
♠ 如何了解内置包 ♠知道名称与功能即可 ♠使用看例子,看例子没能解决问题,深入研究 ♠从网上搜索可能更快,但你至少有一个内置包的名称吧!!
33/75
Oracle 11g内嵌包 ♠ 提供数据库基本支持;在 SYS 模式下
连接到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
select owner,count(*) from dba_objects
where object_type ='PACKAGE' group by owner order by count(*) desc ;
OWNER COUNT(*) ------------------------------ ---------- SYS 591 SYSMAN 187 FLOWS_030000 174 CTXSYS 70 MDSYS 69 OLAPSYS 45 XDB 30 ORDSYS 27 WKSYS 22 WMSYS 22 EXFSYS 18 ORDPLUGINS 5 DBSNMP 3 ORACLE_OCM 3 SYSTEM 1(DBMS_REPCAT_AUTH)
34/75
Oracle 11g内嵌包 ♠ Oracle 功能与内置包
♠ SYS是通用的内置包,其他用户是专用:
用户 功能
SYS Oracle 系统常用的内置包
SYSMAN 超级系统管理用户
FLOWS_030000 Application Express 用户
CTXSYS Oracle Text 产品的用户,用于全文检索
MDSYS Oracle Spatial and Oracle interMedia
OLAPSYS 联机分析用户(OLAP 元数据结构)
35/75
Oracle 的内嵌(Built-In) 包 ♠ 多数schema的模式都有内置包,下面按用户列表查询: SQL> show user
USER 为 "SYS"
col object_name for a30
col owner for a12
select owner,object_name from dba_objects where object_type ='PACKAGE'
order by owner, object_type;
OWNER OBJECT_NAME
------------ ------------------------
…
SYS STANDARD
SYS DBMS_STANDARD
SYS DBMS_REGISTRY
SYS DBMS_REGISTRY_SERVER
SYS XML_SCHEMA_NAME_PRESENT
SYS UTL_RAW
SYS DBMS_ADVISOR
SYS PLITBLM
36/75
开发有关内置包-DBMS_OUTPUT
♠ DBMS_OUTPUT内置包: ♠ 用于输出变量结果
♠ 可输出字符类型数据
♠ 用于调试阶段的结果显示
♠ 建议: ♠ PL/SQL调试中使用
♠ 使用前要设置会话变量:set serveroutput on
♠ 在PL/SQL中用DBMS_OUTPUT.PUT_LINE实现结果输出
37/75
开发有关内置包-DBMS_METADATA
♠ DBMS_METADATA内置包:
♠用于输出对象元数据
♠可输出表、视图、存储过程等对象的元数据
♠此外还用于返回XML等
♠ 建议:
♠建议开发人员与管理人员都要熟悉它
♠在系统的迁移时非常有用
♠建议直接在SQL命令下使用
38/75
开发有关内置包-DBMS_JOB
♠ DBMS_JOB内置包: ♠ 用于设置需要定时运行的作业
♠ 许多需要定时运行的PL/SQL程序可使用
♠ 使用这个包设置作业前先确保PL/SQL是可用
♠ 建议: ♠ 有规律运行的PL/SQL应用可使用
♠ 设置作业的关键是运行时间与再次运行时间
♠ 如果需要设置较多作业时,建议进行时间规划,避免过多作业在同时间运行
39/75
开发有关内置包-DBMS_SCHEDULER
♠ DBMS_SCHEDULER 内置包: ♠ 10g新增加的功能,用于设置定时运行作业日程
♠ 这个包是对DBMS_JOB的增强
♠ 使用这个包设置作业日常,以进行全面的资源管理
♠ 建议: ♠ 对于一般的作业,可直接使用DBMS_JOB完成
♠ 设置多个作业,建议使用通过DBMS_SCHEDULER实现
♠ 设置前,要整体时间规划,避免过多作业在同时间运行
♠ 管理员可从EM直接进行设置使用
40/75
开发有关内置包-DBMS_SQL
♠ DBMS_SQL内置包: ♠ 用于PL/SQL动态编程
♠ 在PL/SQL中使用DDL语句,必须使用动态
♠ PL/SQL中不能确定的DML语句也要用动态
♠ 建议: ♠ 不得已时不要再PL/SQL使用动态
♠ 动态语句运行效率低下
♠ 如果需要动态,则考虑立即的动态
41/75
开发有关内置包-DBMS_PIPE
♠ DBMS_PIPE内置包: ♠ 用于进程间的通信
♠ 一般在PL/SQL中使用,也可在C/C++或JAVA中使用
♠ 管道包实现各进程间数据的双向传递和续传
♠ 建议: ♠ 编写特殊应用或软件产品时使用
♠ 可使用管道包实现工作流处理
♠ 一些要求实时的数据传递可采用管道包来实现,而不要采用触发器
42/75
开发有关内置包-DBMS_ALERT
♠ DBMS_ALERT内置包: ♠ 与DBMS_PIPE包类似,用于信息的订阅-发布
♠ 在多线程中使用
♠ 建议: ♠ 编写特殊应用或软件产品时使用
♠ 信息的订阅与发布情况下使用
♠ 可在开发的软件产品中使用
43/75
开发有关内置包-UTL_MAIL
♠ UTL_MAIL内置包: ♠ 10g新增加的包,用于邮件的发送
♠ 9i之前使用UTL_SMTP包,UTL_SMTP 发送信息大小 < 3000 字符
♠ UTL_MAIL包实现与日常发送邮件一样功能
♠ 建议: ♠ 要使用这个,以sysdba 安装
♠ 了解环境的配置使用
♠ 了解API方法
44/75
开发有关内置包- UTL_FILE
♠ UTL_FILE内置包: ♠ 用于在OS路径下对文件的I/O操作
♠ 类似在C语言的文件打开写入关闭等
♠ 可用于产生需要的文件,比如写文本文件等
♠ 建议: ♠ 这个包对OS路径需要读写权限,但不要轻易授予这样的权限
♠ 可对OS路径文件进程读写,在开发专门软件时使用,比如在应用中运行用户将结果转换为PDF文件或将图像存储为BMP文件等
45/75
开发有关内置包- DBMS_PROFLER
♠ DBMS_PROFILER内置包: ♠ 用于对PL/SQL程序的优化分析
♠ 这个跟踪PL/SQL程序中的语句的运行情况
♠ 可用于PL/SQL性能的问题分析
♠ 建议: ♠ 这个包平时不要使用,当问题较难确定时使用
♠ 建议在会话中使用,注意及时结束使用
46/75
开发有关内置包- DBMS_HPROF
♠ DBMS_HPROF内置包: ♠ 11g 新支持的内置包,用于替代DBMS_PROFILE包
♠ 这个跟踪PL/SQL程序中的语句的运行情况
♠ 可用于PL/SQL性能的问题分析
♠ 建议: ♠ 11g版本可使用这个包,使用这个包需要安装,如connect
HR/HR; @?/rdbms/admin/dbmshptab.sql
♠ 10g及之前的版本只能使用DBMS_PROFILE
47/75
开发有关内置包-DBMS_CONNECTION_POOL
♠ DBMS_CONNECTION_POOL内置包: ♠ 11g 新支持的内置包
♠ 用于设置数据库常驻连接池
♠ 解决连接池的负荷平衡问题
♠ 建议: ♠ 当环境架构是Web时,可采用这个包来设置数据库常驻连接池
♠ 了解DRCP(Database Resident Connection Pooling)技术
48/75
开发有关内置包-DBMS_SHARED_POOL
♠ DBMS_SHARED_POOL内置包: ♠ 用于将PL/SQL程序等驻留在共享内存里;也可从共享内存读出被缓存的对象;
♠ 缓存的目的是解决某个PL/SQL程序被淘汰出共享内存的问题
♠ 建议: ♠ 如果希望使用这个包,要以sysdba登录并运行
ORACLE_HOME}/rdbms/admin/dbmspool.sql 脚本;
♠ 授权给用户即可使用这个包;建议不要将过多PL/SQL程序缓存在共享池内以免起反作用
49/75
开发有关内置包-DBMS_APPLICATION_INFO
♠ DBMS_APPLICATION_INFO内置包: ♠ 用于交换环境中执行处理的时间点信息
♠ DBMS_APPLICATION_INFO 可以设置SESSION的MODULE,ACTION,CLIENT INFO等状态信息 ,跟踪定位出问题的程序
♠ 建议: ♠ 这个包可以在PL/SQL块、批处理程序中调用该包,建议在存储过程中调用
♠ 了解会话跟踪 技术
50/75
开发有关内置包-DBMS_LOB
♠ DBMS_LOB内置包: ♠ 用于处理LOB数据,包括读、写、追加等
♠ DBMS_LOB可以实现对大对象的各种处理
♠ 建议: ♠ 如果你不是采用功能较强的(如C/C++、JAVA)工具处理LOB对象的话,使用DBMS_LOB包是最佳选择
♠ 可在PL/SQL中使用,也可在Pro*C中使用
♠ 建议不要采用LONG或LONG RAW类型
51/75
开发有关内置包-DBMS_COMPARISON
♠ DBMS_COMPARISON内置包: ♠ 11g新增加的包,用于比较和修复两个表数据 ♠ 在Stream中使用,因源数据目标数据可能发生差异
♠ 建议: ♠ 如果应用环境需要进行从源数据同步到目标表(转换或集成)的时候,可使用这个包实现数据的比较与修复
♠ 需要以sysdba登录,并运行{ORACLE_HOME}/rdbms/admin/dbmscmp.sql 脚本完成包的创建
♠ 建议研究包的使用
52/75
开发有关内置包-DBMS_ADVISOR
♠ DBMS_ADVISOR内置包: ♠ 10g新增加的包,用于进行数据库各种优化
♠ 可对表、索引、撤销等的优化作出建议
♠ 建议:
♠ 对于较复杂的应用性能问题,可研究这个包的用法,建议开发与DBA都要关心
♠ 相关的包: ♠ DBMS_SQLDIAG
♠ DBMS_SQLTUNE
♠ DBMS_WORKLOAD_REPOSITOR
53/75
DBMS_ADVANCED_REWRITE
♠ DBMS_ADVANCED_REWRITE内置包: ♠ Version 10.1 or greater
♠ Grant CREATE MATERIALIZED VIEW
♠ Set QUERY_REWRITE_INTEGRITY= TRUSTED
54/75
DBMS_ADVANCED_REWRITE
dbms_advanced_rewrite.declare_rewrite_equivalence (
name VARCHAR2,
source_stmt VARCHAR2,
destination_stmt VARCHAR2,
validate BOOLEAN := TRUE,
mode VARCHAR2 := 'TEXT_MATCH');
BEGIN
dbms_advanced_rewrite.declare_rewrite_equivalence(
'UW',
'SELECT srvr_id FROM servers INTERSECT SELECT srvr_id
FROM serv_inst',
'SELECT srvr_id FROM servers s WHERE EXISTS (
SELECT srvr_id
FROM serv_inst i
WHERE s.srvr_id = i.srvr_id)',
TRUE,
'TEXT_MATCH');
END;
/
55/75
DBMS_FLASHBACK.TRANSACTION_BA
CKOUT
DECLARE
xa sys.xid_array := sys.xid_array();
BEGIN
xa.extend;
xa(1) := '04000700A2020000';
dbms_flashback.transaction_backout(1, xa);
END;
/
dbms_flashback.transaction_backout(
numtxns NUMBER,
xids xid_array,
options BINARY_INTEGER DEFAULT NOCASCADE,
scnhint NUMBER DEFAULT 0);
56/75
内容提要
♠版本功能与内置包 ♠开发者需了解的内置包 ♠ DBA需了解的内置包 ♠ DSA需了解的内置包 ♠参考
57/75
DBA有关内置包-DBMS_COMPARISON
♠ DBMS_FLASHBACK内置包: ♠ 10g新增加的包,用于闪回所做过的DML数据
♠ 主要是用于人为的操作错误
♠ 建议:
♠ 如果需要对某些错误操作的数据进行恢复,需要确定时间点或SCN号
♠ 一般建议在EM上使用,如果确定存在困难,可在命令状态下使用
♠ 特殊情况下在PL/SQL中使用
58/75
DBA有关内置包-DBMS_DATAPUMP
♠ DBMS_DATAPUMP内置包: ♠ 用于API的实现数据泵的包
♠ 可直接在PL/SQL使用
♠ 建议:
♠ 对于一些软件产品的备份功能来说,可采用自动的PL/SQL方式 ,这样可避免用户学习expdp/impdp命令
♠ 参考10g/11g 原版资料。
59/75
DBA有关内置包-DBMS_LOGMNR
♠ DBMS_LOGMNR内置包:
♠ 用于对日志文件进行分析,以输出某个时间段内的DML数据
♠ 这个包也可对归档文件进行分析,还可生成相反操作的DML语句
♠ 主要用于解决审计等问题
♠ 建议: ♠ 这个挖掘日志文件数据,以了解日志文件的DML情况
♠ 对特殊错误的DML进行恢复时,这个包比从备份中恢复要好,因为它只对错误做恢复
60/75
DBA有关内置包-DBMS_RESOURCE_MANAGER
♠ DBMS_RESOURCE_MANAGER内置包: ♠ 用于对Oracle系统资源进行管理
♠ Oracle系统资源包括CPU、 内存、撤销表空间等
♠ 主要用于复杂环境的资源分配与管理
♠ 建议: ♠ 建议在用户类别多,资源紧张情况使用这包
♠ 先对用户的角色、权限、优先等进行规划,然后使用这个包进行配置
61/75
DBA有关内置包-DBMS_RESOURCE_MANAGER
♠ DBMS_RCVCAT内置包: ♠ 用于对数据进行恢复
♠ RMAN是命令方式,DBMS_RCVCAT 是提供的API接口
♠ 主要用于复杂环境的资源分配与管理
♠ 建议: ♠ 建议在命令或EM环境下使用
♠ 特殊情况下在PL/SQL使用这个包,如开发软件产品等
62/75
DBA有关内置包-DBMS_SPACE
♠ DBMS_SPACE内置包: ♠ 用于对段空间进行管理
♠ 段是占用存储空间的对象,表、索引等
♠ 主要用于存储空间的有效管理
♠ 建议: ♠ 标准版不支持
♠ 在段存储问题较大时可采用这样的方法管理
63/75
DBA有关内置包-DBMS_MONITOR
♠ DBMS_MONITOR内置包: ♠ 10g中引入内置包,可跟踪从客户机到中间层、再到后端数据库的任何用户的会话
♠ 用于标识创建大量工作量的特定用户
♠ 建议:
♠ 在多层架构下,建议采用这个包跟踪会话,以确定问题的原因
♠ 建议与DBMS_ APPLICATION_INFO包一起考虑
♠ 相关的包有DBMS_SERVICE、DBMS_SESSION等
64/75
DBA有关内置包-DBMS_SESSION
♠ DBMS_SESSION内置包: ♠ 功能是跟踪客户会话
♠ 用于性能问题的跟踪与安全的控制
♠ 建议: ♠ 如果希望进行安全的自动管理,可研究这个包的使用
♠ 参考David Kurtz的文章
♠ 与安全相关的内容是SYS_CONTEXT
65/75
DBA有关内置包-DBMS_SUPPORT
♠ DBMS_SUPPORT内置包: ♠ 这个包用于 跟踪SQL 语句等
♠ 用于性能的监控,如SQL性能等问题
♠ 默认安装,这个包不被安装
♠ 建议: ♠ conn / as sysdba
♠ @?rdbms\admin\dbmssupp.sql
♠ GRANT execute ON dbms_support TO uwclass;
♠ CREATE PUBLIC SYNONYM dbms_support FOR dbms_support;
66/75
DBA有关内置包-DBMS_SYSTEM
♠ DBMS_SYSTEM内置包: ♠ 这个包用于会话的跟踪
♠ 用于性能用户性能监控和数据搜集
♠ 建议: ♠ 对怀疑的会话进行跟踪,跟踪完成最后取消跟踪
♠ 跟踪所产生的结果被记录到跟踪文件中,跟踪文件路径为$ORACLE_HOME/udump
67/75
DBA有关内置包-DBMS_LOCK
♠ DBMS_LOCK内置包: ♠ 可对所操作的数据进行锁定
♠ 用于多用户下可能产生同时进行DML操作冲突的控制
♠ 一般默认下,Oracle只能对表进行内部机制所提供的锁
♠ 建议:
♠ 如果应用系统所操作的对象可能出现读写冲突时,建议你研究这个包的用法
♠ 参考原版文章
68/75
DBA有关内置包-DBMS_UTILITY
♠ DBMS_UTILITY内置包: ♠ 这个包是多种过程的集合,它放置了许多的过程,如
DBMS_UTILITY.ANALYZE_SCHEMA、dbms_utility.active_instances 等
♠ 用于复杂的应用开发
♠ 建议:
♠ 如果你开发以个复杂的应用,可使用这个实现各种处理
♠ 相关包:DBMS_ODCI
69/75
DBA有关内置包-DBMS_SQLTUNE
♠ DBMS_SQLTUNE内置包(11g新): ♠ 这个包用于SQL性能分析
♠ 提供了一个精确地评估前后性能变化的完整的数据库工作负载的方法。
♠ 用于复杂的应用开发
♠ 建议: ♠ 开发人员与DBA可使用这个包对SQL问题进行分析
♠ 相关包: DBMS_SQLDIAG
70/75
DBA有关内置包-DBMS_SQLDIAG
♠ DBMS_SQLDIAG内置包: ♠ 这个包用于SQL性能诊断
♠ 提供创建和执行SQL Repair Advisor的诊断任务的方法。
♠ 用于存在问题的SQL诊断
♠ 建议: ♠ 开发人员与DBA可使用这个包对SQL问题进行分析
♠ 参考资料: Oracle 11g数据库管理艺术
71/75
DBA有关内置包-DBMS_STATS
♠ DBMS_STATS内置包: ♠ 这个包用于对数据库段对象进行统计
♠ 提供对表、索引、Cluster等进行统计,为CBO提供优化数据。
♠ 用于CBO优化模式
♠ 建议: ♠ DBA可使用这个包对相关表、索引进行统计
♠ 参考资料: Oracle 原版
72/75
DBA有关内置包- DBMS_RESUMABLE
♠ DBMS_RESUMABLE内置包: ♠ 这个包用于对各中表空间进行自动管理
♠ 提供对表永久表空间撤销表空间、临时表空间的使用出现问题自动处理方法
♠ 建议: ♠ DBA可使用这个包对一些旧的应用进行预防性的维护,因为一旦扩展失败意味着DML数据失败
♠ 参考资料: Oracle 原版
73/75
DBA有关内置包- DBMS_REPAIR
♠ DBMS_REPAIR内置包: ♠ 用于对坏块进行修理
♠ 可以发现、标识并修改数据文件中的坏块
♠ 检查到的坏块标注出来,使随后的dml操作跳过该块。
♠ 建议: ♠ DBA可使用这个包对坏块进行诊断
♠ 从性能角度出发,也可使用这个包进行诊断
♠ 参考资料: Oracle 原版
74/75
DBA有关内置包- DBMS_HM
♠ DBMS_HM内置包: ♠ 11g版本引入;HM是Health Management的缩写
♠ 用于Oracle数据库进行健康管理
♠ 可报告存在问题的信息
♠ 建议: ♠ DBA可使用这个包对Oracle系统进行诊断
♠ 一般可从EM中使用,但也要理解输出的结果
♠ 相关包: DBMS_IR
75/75
DBA有关内置包- DBMS_WM ♠ DBMS_WM内置包:
♠ 9i 版本引入;11g版本增加更多的功能 ♠ 用于工作空间管理(Workspace Manager ) ♠ 提供了为不同表建立不同版本的架构
♠ 开发团队建议: ♠ 允许开发人员和DBA在同一个数据库中对数据的多版本进行管理。
♠ 它使用作为虚拟环境的工作区组织管理产品数据,保留数据的多个版本。
♠ 相对于传统的数据版本管理方式,能更加节约时间、资金投入和人员投入
76/75
内容提要
♠版本功能与内置包 ♠开发者需了解的内置包 ♠ DBA需了解的内置包 ♠ DSA需了解的内置包 ♠参考
77/75
新的职位-Oracle 系统安全员 ♠ DSA 数据库安全员:
♠ DSA=database security administrator
♠ 为了实现真正的责权分离,许多RDBMS新添DSA ♠ 要实现DBA/DSA/在责权分离,需要安装Oracle Database Vault 产品
♠ Oracle Database Vault: ♠ 实现职责分离、加强内部控制 ♠ 限制DBA和超级用户对业务数据的访问 ♠ 定制和强制实施个性化的安全规则 ♠ 提供各种详细的安全报告用于法规审计
内置包与授权建议
♠ Oracle 系统下存在风险的包: ♠ dbms_sql
♠ utl_file
♠ utl_mail
♠ utl_inaddr
♠ utl_tcp
♠ dbms_lob
♠ dbms_xmlgen
♠ dbms_aw_xml
♠ ctxsys.drithsx
♠ ordsys.ord_dicom
♠ kupp$proc
内置包与授权建议
♠ Oracle 9i/10g系统下面包不要轻易授权一般用户: ♠ UTL_SMTP
♠ UTL_TCP
♠ UTL_HTTP
♠ UTL_FILE
♠ DBMS_OBFUSCATION_TOOLKIT
♠ DBMS_RANDOM
♠ Oracle 11g已经不允许从外部来使用: ♠ UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP等
内置包使用与授权建议
♠ 撤销将内置包授予Public 公共帐号 ♠ 撤销 Public 权限样例
SQL> show USER User is SYSTEM
SQL> revoke execute on utl_httpfrom public force;
SQL> revoke execute on utl_tcp from public force;
SQL> revoke execute on utl_filefrom public force;
SQL> revoke execute on utl_inaddrfrom public force;
SQL> revoke execute on utl_smtpfrom public force;
SQL> revoke execute on utl_dbwsfrom public force;
SQL> revoke execute on dbms_lobfrom public force;
SQL> revoke execute on dbms_randomfrom public force;
SQL> revoke execute on dbms_obfuscation_toolkit from public force;
内置包使用与授权建议
♠ 撤销将内置包授予Public 公共帐号 ♠ 撤销 Public 权限样例
SQL> show USER User is SYSTEM
SQL> revoke execute on dbms_crypto_toolkitfrom public force;
SQL> revoke execute on dbms_advisorfrom public force;
SQL> revoke execute on dbms_ldapfrom public force;
SQL> revoke execute on dbms_ldap_utlfrom public force;
SQL> revoke execute on dbms_jobfrom public force;
SQL> revoke execute on dbms_scheduler from public force;
SQL> revoke execute on dbms_ddlfrom public force;
SQL> revoke execute on dbms_epgfrom public force;
SQL> revoke execute on dbms_xmlgenfrom public force;
SQL> revoke execute on dbms_aw_xmlfrom public force;
SQL> revoke execute on ctxsys.drithsxfrom public force;
SQL> revoke execute on ordsys.ord_dicomfrom public force;
内置包使用与授权建议
♠ dbms_sql包在10g的处理 ♠ 11g及以上已经修正
SQL> show USER User is SYS
SQL> create role ROLE_DBMSSQL;
SQL> grant execute on dbms_sql to ROLE_DBMSSQL;
SQL> spool grantdbmssql.sql
SQL> select distinct 'grant ROLE_DBMSSQL to "'||owner||'";' from
all_dependencies where referenced_name = 'DBMS_SQL' and owner not
in ('PUBLIC');
SQL> spool off
SQL> @grantdbmssql
SQL> revoke execute on dbms_sql from PUBLIC;
防止外部端口的访问
♠ 对象类型 ♠ HTTPUriType :
--as user SYS
SQL> revoke execute on HTTPUriType from public force;
防止外部端口的访问
♠ 不建议使用口令文件 ♠ 如果使用口令文件,则建议设置:
SQL> show USER
User is SYSTEM
REMOTE_OS_AUTHENT = FALSE
触发器监控数据库
♠ 监控DDL 操作触发器-DDLTrigger ♠ 以sysdba登录
SQL> create or replace trigger DDLTrigger
AFTER DDL ON DATABASE
DECLARE
rc VARCHAR(4096);
BEGIN
begin
rc:=utl_http.request ('http://192.168.2.201/user='||ora_login_user||';DDL_TYPE='||ora_sysevent||';
DDL_OWNER='||ora_dict_obj_owner||';DDL_NAME='||ora_dict_obj_name||';
sysdate='||to_char(sysdate, 'YYYY-MM-DD hh24:mi:ss');
exception
when utl_http.REQUEST_FAILEDthen null;
end;
END;
/
触发器监控数据库
♠ 监控DDL 操作触发器-Logon Trigger ♠ 以sysdba登录
create or replace trigger sec_logon
after logon on database
DECLARE
rc VARCHAR(4096);
begin
begin
rc:=utl_http.request('http://192.168.2.201/logon_user='||user||';sessionid='||sys_context('USERENV','SES
SIONID')||';host='||sys_context('USERENV','HOST')||';ip='||ora_client_ip_address||';sysdate='||to_char(sys
date, 'YYYY-MM-DD hh24:mi:ss'));exception when utl_http.REQUEST_FAILEDthen null;
end;
End sec_logon;
/
触发器监控数据库
♠ 监控DDL 操作触发器-Error Trigger ♠ 以sysdba登录
CREATE OR REPLACE TRIGGER after_error
AFTER SERVERERROR ON DATABASE
DECLARE pragma autonomous_transaction;
id NUMBER;
sql_textORA_NAME_LIST_T;
v_stmtCLOB; n NUMBER;
BEGIN
n := ora_sql_txt(sql_text);
IF n >= 1 THENFOR i IN 1..n LOOP
v_stmt:= v_stmt|| sql_text(i);
ND LOOP;
END IF;
FOR n IN 1..ora_server_error_depth LOOP
IF ora_server_error(n) in (
'900','906','907','911','917','920','923','933','970','1031','1476','1719','1722','1742','1756','1789','1790','2424
7','29257','29540') THEN
INSERT INTO system.oraerrorVALUES (SYS_GUID(), sysdate, ora_login_user, ora_client_ip_address,
ora_server_error(n), ora_server_error_msg(n), v_stmt);
END IF;
END LOOP;
END after_error;
/
审计数据库
♠ Oracle 系统审计 ♠ 以sysdba登录
Declare
jj integer := 666666;--job number
begin
sys.dbms_ijob.submit(JOB=>jj, LUSER =>'SYS',PUSER =>'SYS', CUSER =>'SYS', NEXT_DATE =>
sysdate, INTERVAL =>null, BROKEN =>false, WHAT =>' declarejjinteger := '||jj||';
begin
execute immediate ''alter system archivelog current'';
sys.dbms_ijob.remove(jj);
delete from sys.aud$ where obj$name= ''DBMS_IJOB'';
commit;
end;', sys.dbms_ijob.run(jj);
end;
/
审计数据库
♠ Oracle 系统审计 ♠ 以sysdba登录
AUDIT CREATE USER BY ACCESS;
AUDIT ALTER USER BY ACCESS;
AUDIT DROP USER BY ACCESS;
AUDIT CREATE ROLE BY ACCESS;
AUDIT SELECT ON DBA_USERS BY ACCESS;
AUDIT CREATE EXTERNAL JOB BY ACCESS; --10g
Rel.1
AUDIT CREATE JOB BY ACCESS; --10g
AUDIT CREATE ANY JOB BY ACCESS;
AUDIT CREATE ANY LIBRARY BY ACCESS;
AUDIT ALTER DATABASE BY ACCESS;
AUDIT ALTER SYSTEM BY ACCESS;
AUDIT AUDITSYSTEM BY ACCESS;
AUDIT EXEMPT ACCESS POLICY BY ACCESS;
AUDIT GRANT ANY PRIVILEGE BY ACCESS;
AUDIT GRANT ANY ROLE BY ACCESS;
AUDIT ALTER PROFILE BY ACCESS;
AUDIT CREATE ANY PROCEDURE BY ACCESS;
AUDIT ALTER ANY PROCEDURE BY ACCESS;
AUDIT DROP ANY PROCEDURE BY ACCESS;
AUDIT CREATE PUBLIC DATABASE LINK BY ACCESS;
AUDIT CREATE PUBLIC SYNONYM BY ACCESS;
AUDIT EXECUTE ON DBMS_FGA BY ACCESS;
AUDIT EXECUTE ON DBMS_RLS BY ACCESS;
AUDIT EXECUTE ON DBMS_FILE_TRANSFER BY
ACCESS;
AUDIT EXECUTE ON DBMS_SCHEDULER BY
ACCESS;
AUDIT EXECUTE ON DBMS_JOB BY ACCESS;
AUDIT SELECT ON SYS.V_$SQL BY ACCESS;
AUDIT SELECT ON SYS.GV_$SQL BY ACCESS;
AUDIT EXECUTE ON SYS.KUPP$PROC BY ACCESS;
AUDIT EXECUTE ON DBMS_XMLGEN BY ACCESS;
AUDIT EXECUTE ON DBMS_NETWORK_ACL_ADMIN
BY ACCESS; --11g
91/75
内置包资源参考
♠ Oracle原厂: ♠ Oracle® Database ♠ PL/SQL Packages and Types Reference
♠ 11g Release 1 (11.1.)
♠ B28419-02
♠ OCP: ♠ 11g:D52601GC10-Oracle Database 10g: Advanced PL/SQL
♠ 10g:Oracle Database 10g: Advanced PL/SQL