??xml version="1.0" encoding="utf-8" standalone="yes"?>
最q因看到论坛有h问vq方面的东西Q将自己的理解加上查阅相兌料整理如下,如果不全或不当的地方Q望指正q补全它?
数据库名(DB_NAME)、实例名(Instance_name)、以及操作系l环境变?ORACLE_SID)
在ORACLE7?数据库中只有数据库名(db_name)和数据库实例?instance_name)。在ORACLE8i?i中出C新的参数Q即数据库域?db_domain)、服务名(service_name)、以及操作系l环境变?ORACLE_SID)。这些都存在于同一个数据库中的标识Q用于区分不同数据库的参数?
一、什么是数据库名(db_name)?
数据库名是用于区分数据的内部标识Q是以二q制方式存储于数据库控制文g中的参数Q在数据安装或创Z后将不得修改。数据库安装完成后,该参数被写入数据库参数文件pfile中,格式如下Q?
[code:1:1aaf156970]
.........
db_name="orcl" #(不允怿?
db_domain=dbcenter.toys.com
instance_name=orcl
service_names=orcl.dbcenter.toys.com
control_file=(...............
.........
[/code:1:1aaf156970]
在每一个运行的ORACLE8i数据库中都有一个数据库?db_name),如果一个服务器E序中创Z两个数据库,则有两个数据库名。其控制参数据分属在不同的pfile中控制着相关的数据库?
二、什么是数据库实例名(instance_name)
数据库实例名则用于和操作pȝ之间的联p,用于对外部连接时使用。在操作pȝ中要取得与数据库之间的交互,必须使用数据库实例名。例如,要和某一个数据库serverq接Q就必须知道其数据库实例名,只知道数据库名是没有用的Q与数据库名不同Q在数据安装或创建数据库之后Q实例名可以被修攏V数据库安装完成后,该实例名被写入数据库参数文gpfile中,格式如下Q?
[code:1:1aaf156970]
db_name="orcl" #(不允怿?
db_domain=dbcenter.toys.com
instance_name=orcl #(可以修改,可以与db_name相同也可不同)
service_names=orcl.dbcenter.toys.com
control_file=(...............
.........
[/code:1:1aaf156970]
数据库名与实例名之间的关pR?
数据库名与实例名之间的关pM般是一一对应关系Q有一个数据库名就有一个实例名Q如果在一个服务器中创Z个数据库Q则有两个数据库名,两个数据库实例名Q用两个标识定一个数据库Q用户和实例相连接?
但在8i?i的ƈ行服务器l构中,数据库与实例之间不存在一一对应关系Q而是一对多关系Q?一个数据库对应多个实例Q同一旉内用户只一个实例相联系Q当某一实例出现故障Q其它实例自动服务,以保证数据库安全q行?
三、操作系l环境变?ORACLE_SID)
在实际中Q对于数据库实例名的描述有时使用实例?instance_name)参数Q有时用ORACLE_SID参数。这两个都是数据库实例名Q它们有什么区别呢Q?l常弄)
[code:1:1aaf156970]
(ORACLE_SID)
OS<----------------> ORACLE 数据?nbsp;<--------(Instance_name(实例?)
[/code:1:1aaf156970]
上图表示实例名instance_name、ORACLE_SID与数据库及操作系l之间的关系Q虽然这里列出的两个参数都是数据库实例名Q但instance_name参数是ORACLE数据库的参数Q此参数可以在参数文件中查询刎ͼ而ORACLE_SID参数则是操作pȝ环境变量?
操作pȝ环境变量ORACLE_SID用于和操作系l交互。也是_在操作系l中要想得到实例名,必M用ORACLE_SID。此参数与ORACLE_BASE、ORACLE_HOME{用法相同。在数据库安装之后,ORACLE_SID被用于定义数据库参数文g的名U。如Q?
$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora?
定义Ҏ:
[code:1:1aaf156970]
export ORACLE_SID=orcl
[/code:1:1aaf156970]
如果在同一服务器中创徏了多个数据库Q则必然同时存在多个数据库实?q时可以重复上述定义q程Q以选择不同实例?
q可以用
[code:1:1aaf156970]
[oracle@Datacent]$ . oraenv
[/code:1:1aaf156970]
来切换不同的ORACLE_SID来通过操作pȝ来启动不同的实例(instance)
谢谢 :em03:
]]>
软g环境Q?
1、Windows 2000+ORACLE 8.1.7
2、ORACLE安装路径为:C:\ORACLE
实现ҎQ?
1?开始-Q设|-Q控刉板-Q管理工PQ服?
停止所有Oracle服务?
2?开始-Q程序-QOracle - OraHome81Q>Oracle Installation ProductsQ>
Universal Installer
卸装所有Oracle产品Q但Universal Installer本n不能被删?
5?q行regeditQ选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLEQ按del键删除这个入口?
6?q行regeditQ选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ServicesQ滚?
q个列表Q删除所有Oracle入口?
7?q行refeditQ?
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\ApplicationQ?
删除所有Oracle入口?
8?开始-Q设|-Q控刉板-Q系l-Q高U-Q环境变?
删除环境变量CLASSPATH和PATH中有关Oracle的设?
9?从桌面上、STARTUPQ启动)l、程序菜单中Q删除所有有关Oracle的组和图?
10?删除\Program Files\Oracle目录
11?重新启动计算机,重v后才能完全删除Oracle所在目?
12?删除与Oracle有关的文Ӟ选择Oracle所在的~省目录C:\OracleQ删除这个入
口目录及所有子目录Qƈ从Windows 2000目录Q一般ؓC:\WINNTQ下删除以下?
件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini{等?
13?WIN.INI文g中若有[ORACLE]的标记段Q删除该D?
14?如有必要Q删除所有Oracle相关的ODBC的DSN
15?C件查看器中,删除Oracle相关的日?
说明Q?
如果有个别DLL文g无法删除的情况,则不用理会,重新启动Q开始新的安装,
安装Ӟ选择一个新的目录,则,安装完毕q新启动后Q老的目录及文件就可以删除掉了
天狼?W?1 ?2003-4-8
Oracle 9i for Windows DBA 手册 ————关于手动删除Oracle的几炚w?有些时候,OUI删除Oracle产品后,会在系l上遗留一些注册设|、文件和文g夏V如果希望清理系l上的Oracle安装Q则可以手工删除Oraclelg。Enterprise Edition可以采用如下方式q行删除Q?1Q、以Administratorw䆾d到Windows 2000 pȝ。选择Service applet 以便停止所有Oracle 服务。Oracle 的服务名都具有一个oracle或ora 的前~。一旦停止了所有的Oracle服务Q我们徏议将它们讄为手工启动模式(manual start modeQ?警告 Microsoft 不要手工更改Windows 注册表。更Ҏ册表可能会导致一些应用程序或Windows 工作不正常?2Q、备份Windows 注册表。启动Registry Editor q从菜单中选择 File | Export?3Q、用命oregedt32启动Registry Editor。找到HKEY_CLASSES_ROOT节点q删除所有以字符串Oracle、ORA、ORCL开始的键?4Q、找到HKEY_LOCAL_MACHINE/SOFTWARE键ƈ删除Oracle ?Apache Group 键?5Q、删除HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\odbcinst.ini ?BR>天狼?W?2 ?2003-4-8
面的Oracle ODBC Driver键?6Q、删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services和HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Servicess\EventLog\Application下所有以ORACLE起始的键?7)、删除HKEY_CURRENT_USER\SOFTWARE\ORACLE下所有以ORACLE或ORCL起始的键?8Q、删除HKEY_CURRENT_USER\SOFTWARE\ODBC\odbcinst.ini 下所有以Oracle起始的键?9Q、寻找注册表中所有包含Oracle和ORCL字符串的键ƈ删除它们?10Q、关闭Registry Editor?11Q、编辑环境变量(控制面板中的System appletQƈ修改PATH变量Q从PATH中删除所有Oracle 条目?12Q、从ALL USERS 特征文g中删除Oracle Home 和Oracle Installation Products 快捷方式。这在Windows NT 中的Path winnt | Profiles | All Users | Start | Programs 以及Windows2000 和Windows XP pȝ中的Documents and Settings | All Users |Start Menu | Programs 中有效?13Q、删除Program Files 中的Oracle 文g夏V如果没有成功的删除该文件夹Q则可能是Windows 锁定了一些文?DLL)。遇到这U情况,重新启动pȝq删除该文g夏V?14Q、删除Oracle Base 文g夹(默认情况为Oracle Q?BR>天狼?W?3 ?2003-4-8
应注意,Oracle 9i Enterprise Edition 也安装了W三方Y件诸如:Apache HTTP Server (Oracle HTTP Server 是一?Apache Web
Server 的修改版)?BR>注意 当试囑ֈ?c:\oracle 文gҎQ可能会得到一个“Access is denied ”的错误消息。如果遇Cq个错误提示Q则应将 c:\oracle\ora90\bin\oci.dll 重新命名?c:\oracle\ora90\bin\ocibak ,然后重新启动机器Qƈ删除c:\oracle 文g夏V?BR>
你是用Oracle的Universal Installer卸蝲的吧Q那个卸载不完全Q?BR>应该手工卸蝲Q?BR>1、停止所有Oracle相关服务Q?BR>2、删除Oracle安装目录Q?BR>3、删除C:\Program\Oracle目录Q?BR>4、删除注册表相关信息Q?BR> HKLM\SoftWare\Oracle?BR> HKLM\System\CurrentContralSet\Service\Ora…?BR> HKLM\System\ControlSet001\Service\Ora…?BR> HKLM\System\ControlSet002\Service\Ora…?BR>5、重新启动计机
一、服务器上用操作系l验?BR>1.配置SQLNET.ORA文g
参数NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
表明解析客户端连接时所用的L字符串的方式
TNSNAMES表示采用TNSNAMES.ORA文g来解?BR>ONAMES表示Oracle使用自己的名U服务器QOracle Name ServerQ来解析Q目前Oracle使用轻量目录讉K协议LDAP来取代ONAMES
HOSTNAME表示使用host文gQDNSQNIS{来解析
参数SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)
表明用户q接Oracle服务器时使用哪种验证方式
NONE表示Oracle数据库n份验证,NTS表示操作pȝw䆾验证Q两U方式可以ƈ?/P>
2.建立相应的操作系l组及用户加入该l?BR>ORA_DBAl中的域用户和本地用户不需要Oracle用户名和密码可以登录Oracle
而且该组的用L录数据库后都hSYSDBA权限
Q多个实例时Q可以徏立类DLlORA_SID_DBAQ其中SID指实例名Q?BR>同理:ORA_OPERl中的成员具有SYSOPER角色的权限?/P>
3.d方式
CQ\>sqlplus ? as sysdba?BR>或者CQ\>sqlplus nolog,然后SQL>connect / as sysdba
4.init.ora中的Remote_Login_Passwordfile对n份验证的影响
三个可选|
NONEQ默认|指示Oraclepȝ不用密码文Ӟ通过操作pȝq行w䆾验证的特权用h有SYSORA和SYSOPER权限
EXCLUSIVEQ?BR>1.表示只有一个数据库实例可以使用密码文g
2.允许SYSORA和SYSOPER权限赋值给SYS以外的其它用?BR>SHARED:
1.表示可以有多个数据库实例可以使用密码文g
2.不允许将SYSORA和SYSOPER权限赋值给SYS以外的其它用?BR>所以,如果要以操作pȝw䆾dQRemote_Login_Passwordfile应该讄为NONE
5.当登录用户不是ORA_DBAl和ORA_OPERl成员时Q登录数据库
需要在Oracle中创建当前操作系l用L同的用户名,如果当前用户是域用户Q则名称?domainname\yourname,
如果是本地计机用户Q则名称为:computername\yourname
创徏ҎQ?BR>create "domainname\yourname" identified externally;
grant connect to "domainname\yourname";
Windows操作pȝQ修Ҏ册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0下面dOSAUTH_PREFIX_DOMAINQD为FALSE,在创建Oracle用户时可以忽略掉域名
q种方式下,init.ora中有一个参数将影响数据库如何匹配一个windows用户和Oracle用户
os_authent_prefix = ""
~省为空QOracle8i以前Q无该参敎ͼ而用OPS$作ؓ用户名前~.(Oracle用户名最大长度限制ؓ30个字W?
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
二、远E客L使用操作pȝ验证
首先需要在init.ora文g中设|如下参敎ͼ
REMOTE_OS_AUTHENT=TRUE
Oracle不推荐在q程客户端上使用操作pȝ验证Q因为客L验证时不是通过服务器上的操作系l用h验证Q而是使用客户端自己怕操作系l来q行windows验证,q样Q客L可以采用建立对应的windows机器名和用户名的方式来欺骗Oracle的操作系l验?
例如Q?BR>创徏了如下Oracle用户
create "zl\zyk" identified externally;
grant connect to "zl\zyk";
如果有一台名为ZL的机器,创徏了一个名为zyk的用Pq以此登录连接Oracle服务器(q接时用\@OracleSTRQ?无需用户名和密码
造成此问题的原因是,Oracle使用客户端操作系l进行验证,它无法区别zl是域名还是机器名.
Windows &.net杂志2004W??http://www.winnetmag.com/Windows/Articles/ArticleID/42280/pg/1/1.html)
作者在文章中强?W三|后一D?:
Oracle数据库服务器上的windowsw䆾认证很容易实施,q且使已d的用戯问数据库很方?BR>但是Q这U验证模型ƈ不适合q程客户端,因ؓ安全隐患太大?/P>
--------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------
三、Oracle 9iҎ作系ln份认证支持的增强
Oracle 9i可以与活动目录集成,通过Oracle Enterprise Security Manager 理用户权限
Enterprise user authentication做ؓ一U新的外部集中认证模?BR>Q也?global user authentication,Oracle 9i以前的External user authentication仅仅采用了客L操作pȝ本地认证)
Oracle9iq行在一个win2000及以上的域中Q注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID,参数OSAUTH_X509_NAME讄为true
(默认为false,如果该参C存在Q则新增为REG_EXPAND_SZcd)
注意QWindows NT 4.0 domain 不支持这U方?/P>
参考:
http://www.utexas.edu/its/unix/reference/oracledocs/v92/B10501_01/win.920/a95492/enterpri.htm
http://www.utexas.edu/its/unix/reference/oracledocs/v92/B10501_01/win.920/a95492/authen.htm
http://www.utexas.edu/its/unix/reference/oracledocs/v92/B10501_01/network.920/a96573/asoauth.htm
http://www.cnblogs.com/zyk/archive/2004/11/09/61786.html
作?Arup Nanda 来源Q?OTN
W?13 ?
Enterprise Manager 10 g
最后,讨论一U管理和q用 Oracle 的一站式工具 ?无论对于初学者还是专?
您在日常?DBA 相关zd中用什么工P我最q在一个用L会议中提Zq个问题?
{案?DBA 的工作经验而有所不同。大部分高理员偏q单的命o?SQL*Plus Q我的个人偏好)Q而其余的人则偏爱使用一些第三方产品。但是,同一个问题在入门U?DBA 那里却得C不同反应Q在q一体中, Enterprise Manager (EM) 昄是他们的选择?
q些偏好不难理解?Oracle Enterprise Manager 自从几年前推Z来一直不断进行完善,它开始时是字W模式显C的 SQL*DBA Q随后发展ؓZ操作pȝ的客L工具Q最后具有了 Java 风格?EM 提供的信息非常详l,_完成大多?DBA dQ可作ؓ不愿或者无暇了解新语法q且希望使用 GUI 工具来管理常见数据库dQ如d用户、修Ҏ据文件和查回退D)的用L解决Ҏ。诊断程序包为性能调节提供了非帔R要的 GUI 支持?
但是Q阻?EM q泛使用的一个主要问题是它无法跟上数据库服务器本w的发展。例如, EM ?Oracle9 i 数据库版本不支持子分区(该特性在 Oracle8 i 中首ơ引入)?
Oracle 数据?10 g 中的 EM 新版本改变了q种情况。它h新的体系l构和新的界面,而最重要的是Q它h一个功能非常强大而完善的工具,提供从初学者到高用户所需的所?DBA 技能集。而最好之处在于,它是安装本n的一部分Q无需额外费用。如果您正在评估W三方工P您当然可以将 EM 加入评估行列中,从而竞争更加Ȁ烈。即使您是那U??W信命o???DBA Q象我这PQ您也会非常ƣ赏 EM 在某些情况下能ؓ您所提供的帮助?
在本文中Q我ؓ您介l新?EM 。由于该工具所涉范围甚q,因此不可能在此讨论所有的Ҏ;我将在此介绍几个基本Ҏ,q提供其他材料的U烦。我遵循本pd之精提供实际的CZQ演C如何用该工具解决实际问题?
体系l构
~省情况下,在安?10 g 软g?, 卛_?EM 10 g ?, 在概念上它与以前版本的不同之处在于,它不是客L安装的工P实际上它是位于数据库服务器本w上?HTTP 服务器(UCؓ DB 控制収ͼ。(参见?1 。)您可以用Q何浏览器查看 EM 界面?
?1 Q?EM 体系l构
DB 控制台的端口号可?$ORACLE_HOME/install/portlist.ini 中找到。以下是一个文件的CZQ对于您来说Q端口可能不相同?
Ultra Search HTTP port number = 5620
iSQL*Plus HTTP port number = 5560
Enterprise Manager Agent Port =
Enterprise Manager Console HTTP Port (starz10) = 5500
Enterprise Manager Agent Port (starz10) = 1830
从这个文件中我们了解刎ͼ数据?starz10 的代理程序监听端?1830 Q?EM 控制台监?5500 。我们可以通过输入以下 URL 来调?EM d画面Q?
http://starz/em/console/logon/logon
?URL 调出d画面Q从中您可以?DBA 用户d。在我们的示例中Q我们将?SYS d?
L据库主页
d后即出现L据库主页。主늚上部提供寚w要细节的快速浏览。(参见?2 。)
?2 Q主数据库主(上部Q?
在上图中已圈Z最重要的一些部分,q用本文中编L引用对其q行了标注。首先,h意标?“General?1) 的部分;q一部分昄了有x据库的一些最基本l节Q如数据库从 3 ?20 日v已经启动Q以及实例名U等?Oracle Home 昄Z个超链接Q当单击该链接时Q将昄所有品以及共享该ȝ录的所有其?Oracle 数据库?Listener 的超链接昄注册到监听器Q其名称显C在紧靠它的下方Q的所有数据库和实例。最后,昄L?(starz) ?
在名?“Host CPU?2) 的部分中Q醒目地昄?CPU 的详l信息?“Active Sessions?3) 部分昄了活动的会话及其当前状?(4) 。从上面我们看到Q?99% 的时间被处于{待状态的会话所占用。(我们E后找出导致这些等待的原因。) “High Availability?5) 部分昄了与可用性相关的信息。例如, “Instance Recovery Time?的|实例?MTTR Target 的|定实例崩溃恢复可能需要的旉?
“Space Usage?6) 部分很有:它显CZ 23 个段相关的警告。(同样Q稍后再详细介绍q些警告。) “Diagnostic Summary?7) 部分提供数据库良好运行的概要信息。所发现的性能问题的数量表C动数据库诊断监控E序 (ADDM) ??10g 中新增的自诊断引??d识别出多问题?EM q自动分析您的环境,以确定是否违反了所的最佛_践;此分析的l果昄?“Policy Violation?部分。最后, EM 扫描警报日志Qƈ昄M最新的 ORA 错误。这U信息非常有价??在警报日志中自动扫描 Oracle 错误使您避免了手动搜索这些错误的很多ȝ?
在数据库主页的下部,如图 3 所C,我们可以更详l地查看其中的一些消息?“Alerts?1) 部分昄了需要您注意的所有相兌报,每个警报都可以方便地q行配置。以W一个警?(2) ZQ它昄 Archiver q程因ؓ某种原因而挂赗当Ӟ下一步就是确定其原因。要查明原因Q只需单击它即可。您从包含该错误的 alert.log 文g中获得更多详l信息。在此情形下Q故障点是一个已l填满的闪回恢复区;我们只需其清空Q?Archiver 卛_重新开始工作?
?3 Q主数据库主(下部Q?
另一个警?(3) 是有关等待的Q数据库?69% 的时间中{待一个与{待c?“Application?相关的等待。还记得主页上部是如何显CZ个会话处于等待状态的吗?q个警报向我们显C它正在{待什么。单击超链接会立即为您昄实际的等待?
下一个警?(4) 昄一个审计项目,即用?SYS 从特定的客户端机器连接到数据库。同P通过单击链接,您可以显C有兌q接的所有详l信息。最后一个警?(5) 昄某些对象无效。单击超链接Q您{到对象被验证无效的画面?
如您所见,数据库主늊如显C需要您注意的所有事的仪表ѝ该界面没有详l信息堆U在屏幕上,其界面相当简z,只需单击卛_获得q些详细信息。您可以手动搜集所有这些信息,但这可能会花费很多时间和_֊?EM 10 g 提供了随取随用的解决Ҏ?
一般应?
让我们来看看如何使用新的 EM 来完成一些较常见的Q务?
一常见的d是变更表及其相应的烦引。在数据库主,如图 3 所C选择 “Administration?选项卡,q引用标Cؓ 6 的项目。在本页中,您可以管理数据库来配|回退Dc创I间和模式对象、设|资源管理器、用新的调度程序(在以后的文章中介绍Q以及更多事V在此处选择 “Tables?Q这调出如?4 所C的画面?
?4 Q表理
注意U色圆圈中高亮显C的手电{标志;q是用于调出数值列表的按钮。在图中所C画面中Q您可以单击 LOV 标志Q调出数据库中的用户列表Qƈ从列表中选择一个用戗单L?“Go?Q出现该用户的表的一个列表。您q可以???W号指定通配W??例如Q通过使用 %TRANS% Q可以找出名UC带有单词 TRANS 的所有表?
让我们来看一个示例。选择?TRANS Q更改其中的一列。单击超链接Q调出如?5 所C的 ?~辑??画面?
?5 Q表理
如果您要列 ACTUAL_RATE ?NUMBER(10) 改ؓ NUMBER(11) Q则可以更改数字Q引?1 Q,然后单击 “Apply?。要查看完成该Q务的实际 SQL 语句Q可以单L?“Show SQL??
在同一画面上还可以获得另一条重要信息:增长势。您在以后一有x理的文章中了解刎ͼ观察一D|间内的对象增长情冉|可能的。该画面提供了相同的信息Q但却是以图形方式表C的。要查看该画面,可单击选项?“Segments?Q??5 引用 2 Q。该操作调出D는面,如图 6 所C?
?6 Q段画面
注意U色圆圈中标记的目。该画面昄有多空间分配给D?(2) 、实际用了多少 (1) 以及费了多?(3) 。在该画面的下部 (4) Q您可以看到一q有兛_象所用空间以及分配给对象的空间的囑Ş。在本示例中Q表的用模式已l稳??因此是直Uѝ?
您可以对表执行其他管理操作,Ҏ是用那些用于该目的的选项卡,如用于管理约束的 “Constraints??
使用 EM q行性能调节
到目前ؓ止您已经了解刎ͼ虽然 EM 的外观已l更改,但它提供了至与以前?Java 版本同样多的功能。但是,与后者不同的是, EM 现在q支持更新的 Oracle 数据库功能。例如, EM 现在能够处理子分区?
但是Q有l验?DBA 希望q种工具能完成更多的工作 ?其是在故障诊断或主动性能调节斚w。让我们举个例子。回忆前文中我们的数据库正在 “Application?{待cM处于{待状态,如数据库主页所C( ?3 引用 3 Q,而我们需要诊断其原因。在M调整q程中需要了解的关键事情之一是有多少U组Ӟ?CPU 、磁盘和L子系l)在相互作用,q样有助于在上下文环境中l合观察所有这些变量。ؓ此,可在数据库主中选择 “Performance?选项卡。此操作调出如图 7 所C的画面?
?7 Q?“Performance?选项?
h意所有量度已在同一旉轴上寚wQ这hҎ观察它们的相互依赖性。注意尖?(3) Q它对应于调度程序Q务。它表明Q在该时ȝ有七个会话正在等待与调度E序相关的等待事件。那么,影响因素是什么?注意处于同一位置Q绿色区域)?CPU 量度 ?它们昄了曾l用过的最?CPU 使用率,在图形中以虚U?(4) 表示。在该点前后Q我们没有看?CPU 峰出现Q这提供了一条线索。注?CPU q行队列长度中的峰 (1) Q这是调度程序的直接后果Q调度程序可能生了q多的内存需求,D增加了分|?(2) 。如您所见,所有现象集中在一P促进了对数据库负??概况 ?的了解?
注意在时间u末尾的尖??增加了运行队列长?(5) 和分速率 (6)?它们与物理读取的另一个尖峰相?(7) 。原因是什么?
通过比较囑Ş “Sessions:Waiting and Working?与尖峰发生的旉Q我们可以看刎ͼ大部分会话都?“Application?{待cMq行{待。但是我们需要确切地查明它在该时期内正在{待什么?单击该时间的区域Q调出活动会话画面,如图 8 所C?
?8 Q活动会话等?
该画面显CZ话正在等待的{待事g?enq:TX ?row lock contention 。那么导致此问题?SQL 语句是什么?很简单:画面本n昄了语?8rkquk6u9fmd0 ?SQL ID Q在U色圆圈中)。单击该 SQL ID Q调出如?9 所C的 SQL 画面?
?9 Q?SQL 详细信息
在该画面上,您可以看到关于它?SQL 语句以及相关的详l信息,包括执行计划。它表明Q这?SQL D行锁争用Q因此应用程序设计可能是问题的根源?
栓锁争用
假设单击 “Performance?选项卡出现类似图 10 所C的画面?
?10 Q?“Performance?选项卡,CZ 2
在图中,h意红色矩形中高亮昄的量度。您可以看到?12:20AM 左右有很多与 CPU 相关的等待,q导致在 CPU 中出现庞大的q行队列。我们需要诊断这一{待?
首先Q单LC?CPU 争用区域的图形(在图上标?“Click Here?Q,以详l查看该特定{待Q如?11 所C?
?11 Q活动会话等?
注意?“Active Sessions Working:CPU Used?囑Ş中带阴媄的框 (1) 。您可以使用鼠标拖动它来攄焦点。此操作D以下的饼形图Q?2 ?3 Q只在该框所包含的时D内q行计算。在q里我们看到Q一个具?id 8ggw94h7mvxd7 的特?SQL 正在非常困难地运?(2) 。我们还看到Q具有用户名 ARUP ?SID 265 的用户会话是最主要的运行会?(3) 。单击该会话Q查看其详细信息。此操作调出 “Session Details?画面。单击选项?“Wait Events?Q调会话所l历的等待事件的详细信息Q其画面cM于图 12 所C?
?12 Q等待事件的详细信息
在该画面中,h意在U色圆圈中高亮显C的 118 厘秒的最长等待,它在{待库高速缓存。当您单?“Latch:Library Cache?的超链接Ӟ会看到cM?13 所C的画面?
?13 Q等待直方图
该画面提供了 10 g 数据库之前所没有提供的一些独特信息。在诊断q个栓锁争用问题Ӟ如何知道q?118 厘秒的等待是由几个会话中的多个小{待l成Q还是只是由一个会话中的一个大{待l成Q从而数据出现偏差呢?
在这里,直方囑֏以帮助我们。从图上看,您知道大U?250 ơ会话拥?1 毫秒的等待(在圆圈中高亮昄Q。会话在 4 ?8 毫秒之间的某处等待了大约 180 ơ。该画面昄Q这些等待的旉通常很短Q因而它们不是栓锁争用的主要症状?
在数据库主页上,您可以通过单击标ؓ “Advisor Central?的选项卡来讉K ADDM ?SQL Access Advisor 以及其他NE序?ADDM 在收集量度时自动q行Qƈ且结果立卛_布在 Advisor Central 中Q当单击该页Ӟ显C由 ADDM l出的徏议?SQL Tuning Advisor 也检查这些量度,q在此页上发布其。(我们在以后的文章中更加详细地研I?ADDM ?SQL Tuning Advisor 。)
化维?
数据库主上标ؓ “Maintenance?的选项卡是常用l护zd ?如备份和恢复、数据导出或导入Q?数据?Q、数据库克隆以及更多zd ?的启动控制台。在该画面上Q您q可以对{略验证警报所Z的最佛_늚基本原理q行~辑?
l论
如先前所qͼq篇文章所涉及的只是巨大冰q一角。在本文中,我的目的不是Z提供全面的概qͼ而是希望提供对一些跨多个技能集的特定活动的快速浏览?
Oracle 10 g EM ?DBA 新手提供了够的资源Q以便很快地了解 Oracle 数据库管理的微妙之处。一本有关?EM 的Q务及技术的好提U是 Oracle ?两日速成 DBA?参考手?。我强烈您阅dQ尤其是在您刚开始学习的时候?
q一部分表是Oracle数据库的q行基础Q在数据库启动时?/SPAN>Oracle应用E序动态创建?/SPAN>
q部分表Ҏ据库来说臛_重要Q所?/SPAN>Oracle不允?/SPAN>SYSDBA之外的用L接访问,昄授权不被允许?/SPAN>
如果昄授权你会收到如下错误:
SQL> grant select on x$ksppi to eygle;
grant select on x$ksppi to eygle
*
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
?/SPAN>Oracle8开始,GV$视图开始被引入Q其含义?/SPAN>Global V$.
除了一些特例以外,每个V$视图都有一个对应的GV$视图存在?/SPAN>
GV$视图的生是Z满OPS环境的需要,?/SPAN>OPS环境中,查询GV$视图q回所有实例信息,而每?/SPAN>V$视图ZGV$视图Q增加了INST_ID列判断后建立Q只包含当前q接实例信息?/SPAN>
注意Q每?/SPAN>V$视图都包含类D句:
where inst_id = USERENV('Instance')
用于限制q回当前实例信息?/SPAN>
我们?/SPAN>GV$FIXED_TABLE?/SPAN>V$FIXED_TABLE开?/SPAN>
SQL> select view_definition from v_$fixed_view_definition where view_name='V$FIXED_TABLE';
VIEW_DEFINITION
------------------------------------------------------------------------------
select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE where inst_id = USERENV('Instance')
q里我们看到V$FIXED_TABLEZGV$FIXED_TABLE创徏?/SPAN>
SQL> select view_definition from v_$fixed_view_definition where view_name='GV$FIXED_TABLE';
VIEW_DEFINITION
------------------------------------------------------------------------------
select inst_id,kqftanam, kqftaobj, 'TABLE', indx from x$kqfta
union all
select inst_id,kqfvinam, kqfviobj, 'VIEW', 65537 from x$kqfvi
union all
select inst_id,kqfdtnam, kqfdtobj, 'TABLE', 65537 from x$kqfdt
q样我们扑ֈ?/SPAN>GV$FIXED_TABLE视图的创句,该视囑֟?/SPAN>X$表创建?/SPAN>
q些视图是通过catalog.ql创徏?/SPAN>
?/SPAN>catalog.sqlq行?/SPAN>:
create or replace view v_$fixed_table as select * from v$fixed_table;
create or replace public synonym v$fixed_table for v_$fixed_table;
create or replace view gv_$fixed_table as select * from gv$fixed_table;
create or replace public synonym gv$fixed_table for gv_$fixed_table;
我们注意刎ͼW一个视?/SPAN>V_$?/SPAN>GV_$首先被创建,v_$?/SPAN>gv_$两个视图?/SPAN>
然后ZV_$视图的同义词被创建?/SPAN>
所以,实际上通常我们讉K?/SPAN>V$视图Q其实是指向V_$视图的同义词?/SPAN>
?/SPAN>V_$视图是基于真正的V$视图(q个视图是基?/SPAN>X$表徏立的)?/SPAN>
?/SPAN>v$fixed_view_definition视图是我们研I?/SPAN>Oracle对象关系的一个入口,仔细理解Oracle的数据字典机Ӟ有助于深入了解和学习Oracle数据库知识?/SPAN>
关于X$表,其创Z息我们也可以从数据字怸一H究竟?/SPAN>
首先我们考察bootstrap$表,该表中记录了数据库启动的基本及驱动信息?/SPAN>
SQL> select * from bootstrap$;
LINE# OBJ# SQL_TEXT
------------------------------------------------------------------------------
-1 -1 8.0.0.0.0
0 0 CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL 112K NEXT 1024K MINEXTENTS 1 M
8 8 CREATE CLUSTER C_FILE#_BLOCK#("TS#" NUMBER,"SEGFILE#" NUMBER,"SEGBLOCK#" NUMBER)
9 9 CREATE INDEX I_FILE#_BLOCK# ON CLUSTER C_FILE#_BLOCK# PCTFREE 10 INITRANS 2 MAXT
14 14 CREATE TABLE SEG$("FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER NOT NULL,"TYPE#" NUMBE
5 5 CREATE TABLE CLU$("OBJ#" NUMBER NOT NULL,"DATAOBJ#" NUMBER,"TS#" NUMBER NOT NULL
6 6 CREATE CLUSTER C_TS#("TS#" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS 2 MAXTRANS 255
7 7 CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE (
....
q部分信息,在数据库启动时最先被加蝲Q跟t数据库的启动过E,我们发现数据库启动的W一个动作就?/SPAN>:
create table bootstrap$ ( line# number not null, obj#
number not null, sql_text varchar2(4000) not null) storage (initial
50K objno 56 extents (file 1 block 377))
q部分代码是写在Oracle应用E序中的Q在内存中创Zbootstrap$以后Q?/SPAN>Oracle可以从file 1,block 377上读取其他信息,创徏重要的数据库对象。从而根据这一部分信息启动数据库,q就实现了数据库的引|cM于操作系l的初始化?/SPAN>
q部分你可以参?/SPAN>biti_rainy的文章?/SPAN>
X$表由此徏立。这一部分表可以从v$fixed_table中查刎ͼ
SQL> select count(*) from v$fixed_table where name like 'X$%';
COUNT(*)
----------
394
共有394?/SPAN>X$对象被记录?/SPAN>
X$表徏立以后,ZX$表的GV$?/SPAN>V$视图得以创徏?/SPAN>
q部分视图我们也可以通过查询V$FIXED_TABLE得到?/SPAN>
SQL> select count(*) from v$fixed_table where name like 'GV$%';
COUNT(*)
----------
259
q一部分?/SPAN>259个对象?/SPAN>
SQL> select count(*) from v$fixed_table where name like 'V$%';
COUNT(*)
----------
259
同样?/SPAN>259个对象?/SPAN>
v$fixed_tablep录了:
394 + 259 + 259 ?/SPAN> 912 个对象?/SPAN>
我们通过V$PARAMETER视图来追t一下数据库的架?/SPAN>:
SQL> select view_definition from v$fixed_view_definition a where a.VIEW_NAME='V$PARAMETER';
VIEW_DEFINITION
------------------------------------------------------------------------------
select NUM , NAME , TYPE , VALUE , ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIA
BLE , ISMODIFIED , ISADJUSTED , DESCRIPTION, UPDATE_COMMENT from GV$PARAMETER wh
ere inst_id = USERENV('Instance')
我们看到V$PARAMETER是由GV$PARAMETER创徏的?/SPAN>
SQL> select view_definition from v$fixed_view_definition a where a.VIEW_NAME='GV$PARAMETER';
VIEW_DEFINITION
-----------------------------------------------------------------------------
select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl,ksppstdf, decode(bitand(kspp
iflg/256,1),1,'TRUE','FALSE'), decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,
'DEFERRED', 3,'IMMEDIATE','FALSE'), decode(bit
and(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'), decode(bitand(ksppstvf,2)
,2,'TRUE','FALSE'), ksppdesc, ksppstcmnt from x$ksppi x, x$ksppcv y where (x.i
ndx = y.indx) and ((translate(ksppinm,'_','#') not like '#%') or (ksppstdf = 'F
ALSE'))
在这里我们看?/SPAN>GV$PARAMETER来源?/SPAN>x$ksppi,x$ksppcv两个X$表?/SPAN> x$ksppi,x$ksppcv 基本上包含所有数据库可调整参敎ͼv$parameter展现的是不包?/SPAN>"_"开头的参数。以"_"开头的参数我们通常UCؓ隐含参数Q一般不修改Q但很多因ؓ功能强大l常使用而广Zh知?/SPAN>