PHP程序员站--PHP编程开发平台
 当前位置:主页 >> 数据库 >> Oracle >> 

Oracle常见错误代码的分析与解决

Oracle常见错误代码的分析与解决

来源:互联网  作者:未知  发布时间:2007-12-22
在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的这些错误,本人就使用中出现比较频繁的错误代码一一做出分析,希望能够帮助你找到一个合理解决这些错误的方法,同时也希望你能够

在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的这些错误,本人就使用中出现比较频繁的错误代码一一做出分析,希望能够帮助你找到一个合理解决这些错误的方法,同时也希望你能够提出你的不同看法。毕竟作为一种交流的手段,个人意见难免过于偏颇,而且也必定存在着不足,出错之处在所难免。写这篇文章的目的就是想通过相互之间的交流共同促进,共同进步。 

ORA-01650:unable to extend rollback segment NAME by NUM intablespace NAME 

  产生原因:上述ORACLE错误为回滚段表空间不足引起的,这也是ORACLE数据管理员最常见的ORACLE错误信息。当用户在做一个非常庞大的数据操作导致现有回滚段的不足,使可分配用的回滚段表空间已满,无法再进行分配,就会出现上述的错误。 

  解决方式:使用“ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file”命令向指定的数据增加表空间,根据具体的情况可以增加一个或多个表空间。当然这与还与你主机上的裸盘设备有关,如果你主机的裸盘设备已经没有多余的使用空间,建议你不要轻意的增加回滚段表空间的大小,可使用下列的语句先查询一下剩余的tablespace空间有多少: 

Select user_name,sql_text from V$open_cursor where user_name=’’; 

  如果多余的空间比较多,就可以适当追加一个大的回滚段给表空间使用,从而避免上述的错误。你也可以用以下语句来检测一下rollback segment的竞争状况: 

 

Select class,count from V$waitstat where calss in(‘system undo header’,’system undo block’,’undo header’,’undo block’);和 

Select sum(value) from V$sysstat where name in (‘db_block_gets’,’consistents gets’);   

  如果任何一个class in count/sum(value)大于1%,就应该考虑增加rollback segment。 

相应的英文如下: 

 

Cause:Failed to allocate extent from the rollback segment in tablespace 

Action:Use the ALTER TABLESPACE ADD DATAFILE statement to add one or more files to the specified tablespace. 

ORA-01652:unable to extend temp segment by num in tablespace name   

  产生原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。 

  解决方法:我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小: 

SQL>;Select file_id,block_id,blocks,bytes from sys.dba_free_space where tablespace_name=’’; 

  返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数: 

SQL>;SELECT INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE TABLESPACE_NAME=name; 

  通过下面的SQL命令修改临时段表空间的缺省存储值: 

SQL>;ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY); 

  适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题: 

SQL>;ALTER USER username TEMPORARY TABLESPACE new_tablespace_name; 

  使用ALTER TABLESPACE命令,一但完成,所增加的空间就可使用,无需退出数据库或使表空间脱机,但要注意,一旦添加了数据文件,就不能再删除它,若要删除,就要删除表空间。 

  一个报错例子如下: 

ORA-1652:unable to extend temp segment by 207381 in tablespace TEMPSPACE 

  相应的英文如下: 

 

Cause: Failed to allocate extent for temp segment in tablespace 

Action:Use the ALTER TABLESPACE ADD DATAFILE statement to add one or more files to the specified tablespace or create the object in another tablespace. 

ORA-01578:Oracle data block corrupted(file # num,block # num)   

  产生原因:当ORACLE访问一个数据块时,由于1、硬件的I/O错误;2、操作系统的I/O错误或缓冲问题;3、内存或paging问题;4、ORACLE试图访问一个未被格式化的系统块失败;5、数据文件部分溢出等上述几种情况的一种引起了逻辑坏块或者物理坏块,这时就会报ORA-01578的错误。 

  解决方式:由于ORACLE只有在访问到有问题的数据文件时才会报错,所以报错的时间有可能会比实际出错的时间要晚,如果ORA-01578出错信息提示数据坏块指向的是用户自己的数据文件,则用以下方法来解决: 

  如果通过下面的SQL语句查出的坏块出现有索引上,则只需重建索引即可 

SQL>;Select owner,segment_name,segment_type from dba_extents where file_id= and between block_id and block_id+blocks-1; 

  (和分别是ORA-01578报出的坏块出现的文件号和块号) 

  如果坏块出现在表上,先用以下语句分析是否为永久性坏块(建议多执行一两次,有助于鉴别数据坏块是永久性的(硬盘上的物理坏块)还是随机性的(内存或硬件错误引起)): SQL>;Analyze table validate structure cascade; 


  执行该命令后,可能会出现以下的结果: 

  ORA-01578:与原先错误信息有相同的参数,为永久性的物理或逻辑坏块;与原先错误信息有不同的参数,可能与内存,page space和I/O设备有关。 

  如果用户有此表的最新备份,那么最好是用此备份来恢复此表,或者使用event 10231来取出坏块以外的数据: 

  <1>;.先关闭数据库 

  <2>;.编辑init.ora文件,加入: 

event=”10231 trace name context forever,level 10” 

  <3>;.startup restrict 

  <4>;.创建一个临时表:SQL>;create table errortemp as select * from error;(error是坏表的表名) 

  <5>;.把event从init.ora文件中删掉并重起数据库 

  <6>;.rename坏表,把临时表rename成坏表的表名 

  <7>;.创建表上的INDEX等 
  如果ORA-01578出错信息提示数据坏块指向的是数据字典或者是回滚段的话,你应该立即与ORACLE公司联系,共同商量一个好的解决办法。 

  这里所讲的解决方法只是比较常见的一种,一些更为具体的解决办法可以查看一下ORACLE的故障解决手册,那里面有浞及使用ROWID方法来取出坏块以外的数据的方法,这里就不介绍了。 

  相应的英文如下: 

 

Cause:The given data block was corrupted,probably due to program errors 

Action:Try to restore the segment containing the given data block,This may involve dropping the segment and recreating it,If there is a trace file,report the messages recorded in it to customer support. 

ORA-01628:max # of extents num reached for rollback segment num   

  产生原因:这种错误通常为一个回滚段和一个表空间已经达到MAXEXTENTS参数设置的极限。要注意的是这个MAXEXTENTS不是该回滚段或表空间的硬件极限,硬件极限取决于数据库创建时在init.ora文件中指定的DB_BLOCK_SIZE参数的值。 

  解决方法:使用SQL命令ALTER TABLESPACE…STORAGE(MAXEXTENTS XXXX)来增加 MAXEXTENTS,其中“XXXX”值必须大于错误信息中所指的数值,但不能大于LARGEST MAXEXTENT的值,如果已经达到了LARGEST MAXEXTENT VALUE,解决的办法就是重新创建较大的范围尺寸,使用带有选项COMPRESS=Y的Export工具导出表,如果表空间有可用空间,先给表做一个备份,用alter tablespace tablespace_name更改其名字,然后再装载表回数据库。 

  查看其错误出现的地方,如果出现在回滚段或索引上,那么必须将其删除并重建,如果出现在临时表空间,修改临时表空间的存储字段,便可解决这个问题。 

  一个报错例子如下: 

ORA-1628:max # extents 50 reached for rollback segment RBS_1 

  相应的英文如下: 

 

Cause: An attempt was made to extend a rollback segment that already has reached its maximum size or space could not be allocated in the data dictionary to contain the definition of the object. 

Action:If possible,increase the value of either the MAXEXTENTS or PCTINCREASE initialization parameters or find the data dictionary table lacking space and alter the storage parameters,as described in the Oracle8 Server Administrator’s Guide. 

ORA-00600:internal error code,arguments:[num],[?],[?],[?],[?]   

  产生原因:这种错误通常为ORACLE的内部错误,只对OSS和ORACLE开发有用。ORA-600的错误经常伴随跟踪文件的状态转储(系统状态和进程状态),系统状态存储将包括ORACLE RDBMS持有的当前对象的信息,进程状态转储则将显示特殊进程持有的对象,当进程符合了某错误条件时,经常是由于一些信息取自它持有的一个块,如果我们知道这些错误进程持有的块,就容易跟踪问题的来源。 

  解决方法:一般来说出现这个错误我们本身是无法解决的,只有从提高系统本身各方面来解决这个内部问题,如增加硬件设备,调整系统性能,使用OPS(当然OPS从某种意义上说并不是一种好的解决方式)等。ORA-600错误的第一个变量用于标记代码中错误的位置(代码中的每个部分的第一变量都不一样),从第二个到第五个变量显示附加信息,告诉OSS代码在哪里出现了错误。 

  一个报错例子如下: 

ORA-00600: internal error code, arguments: [1237], [], [], [], [], [], [], [] 

  相应的英文如下: 

Cause:This is a catchall internal error message for Oracle program exceptions.It indicates that a process has met a low-level,unexpected condition.Various causes of this message include: 

  Time-outs(超时) 

  File corruption(文件太老) 

  Failed data checks in memory(内存检索失败) 

  Hardware,memory,or I/O errors(硬件、内存或者磁盘错误) 

  Incorrectly restored files(错误的重建文件) 

  ORA-03113:end-of-file on communication channel 

  产生原因:通讯不正常结束,从而导致通讯通道终止 

  解决方法:1>;.检查是否有服进程不正常死机,可从alert.log得知 

  2>;.检查sql*Net Driver是否连接到ORACLE可执行程序 

  3>;.检查服务器网络是否正常,如网络不通或不稳定等 

  4>;.检查同一个网上是否有两个同样名字的节点 

  5>;.检查同一个网上是否有重复的IP地址 

  相应的英文如下: 

 

Cause:An unexpected end-of-file was processed on the communication channel.The problem could not be handled by the Net8,two task,software.This message could occur if the shadow two-task process associated with a Net8 connect has terminated abnormally,or if there is a physical failure of the interprocess communication vehicle,that is,the network or server machine went down. 

Action:If this message occurs during a commection attempt,check the setup files for the appropriate Net8 driver and confirm Net8 software is correctly installed on the server.If the message occurs after a connection is well established,and the error is not due to a physical failure,check if a trace file was generated on the server at failure time.Existence of a trace file may suggest an Oracle internal error that requires the assistance of customer support. 

ORA-00942:table or view does not exist   

  产生原因:这是由于装载的表或视图不存在,多半是CATEXP.SQL还没有运行,无法执行Export视图,如果CATEXP.SQL已经运行,则可能是版本错误。 

  解决方法:因为Import和Export共享的一些视图是通过运行CATEXP.SQL来装载的(它们具有相同的视图),并不生成单独的CATEXP.SQL,因而造成视图与Export代码不同步,较难保持彼此之间的兼容,用户就必须建立自己的Export应用,从而避免ORA-00942的错误。 

  相应的英文如下: 

 

Cause:The table or view entered does not exist,a synonym that is jnot allowed here was used,or a view was referenced where a table is required.Existing user tables and views can be listed by querying the data dictionary.Certain privileges may required to access the table.If an application returned this message,the table the application tried to access does not exist in the database,or the application does not have access to it. 

Action:Check each of the following: 

The spelling of the table or view name. 

That a view is not specified where a table is required 

That an existing table or view name exists. 

Contact the database administrator if the table needs to be created or if user or application priviledes are required to access the table. 

Also, if attempting to access a table or view in another schema,make certain thecorrect schema is referenced and that access to the object is granted. 


ORA-01598:rollback segment “name” is not online 

Cause:The rollback segment was taken offline either manually or by SMON. 

Action:Check the status of the rollback segment in DBA_ROLLBACK_SEGS. 

ORA-1636: rollback segment “name” is already online 

Cause:A rollback segment can only be used by one instance and an instance is trying to bring a rollback segment online that is already in use. 

Action:Check that the values set in the initialization parameter file for parameters ROLLBACK_SEGMENTS,ROLLBACK_SEGMENT_INITIAL,and ROLLBACK_SEGMENT_COUNT are correctly set for the instance whiththe problem,Also check that the instance is using the correct initialization parameter file.Make sure you are not confused about the difference between private and public rollback segments.See the Oracle8 Server Administrator’s Guide for more information about using rollback segments in paraller mode.   

  上述错误均为我们在使用回滚段时比较常见的问题,ORA-01598指明当前使用的回滚段的状态为“not online”,不能使用,将它改为“online”状态即可使用;ORA-01636指明当前回滚段已经为“online”状态,可以直接使用,不用再集合它。 

ORA-1636 signalled during: alter rollback segment rb00 online 

  我们在做统计时还可能遇到下述问题:一个rollback segment的状态为”Needs Recovery”的现象,这是由于ORACLE回退一个事物表中的没有提交的事物时失败所造成的。通常原因为一个datafile或者tablespace是在offline的状态或者一个undo的目标被破坏或者rollback segment被破坏。解决的办法是将所有的tablespace和datafile都置为online状态,如果不能解决则做下面的工作: 

  1>;.在initsid.ora中加入event=”10015 trace name context forever lever 10”; 

  2>;.shutdown数据库然后重启; 

  3>;.在$ORACLE_HOME/rdbms/log下,找到startup时生成的trace file; 

  4>;.在trace文件中,找到下列信息“error recovery tx(#,#) object #”; 

  5>;.根据object#(与sys.dba_objects表中的object_id相同)在sys.dba_objects表中查出该object的名字; 

  6>;.将该object drop掉; 

  7>;.在init.ora文件中将该rollback segment放回rollback_segments参数中,删除event;8>;.shutdown数据库然后重启。此时”Needs Recovery”的问题应该是完全解决了,否则就是rollback segment被破坏了。 

ORA-01688:unable to extend table name.name partition NAME by NUM in tablespace NAME 


  产生原因:指定的tablespace空间已经被占用满,无法扩展。 

  解决方法:使用“ALTER TABLESPACE ADD DATAFILE”命令增加文件系统文件和原始分区,或者增加INITIAL的大小(如:alter tablespace CDRS101 default storage(next 500M pctincrease 1))应该能够解决,否则就是有人使用你的表空间上创建了一个比较大的数据文件导致你的表空间不够用。 

  一个报错例子如下: ORA-1688: unable to extend table RMMCDR.LOCAL_CDR partition LOCAL_CDR101 by 460800 in tablespace CDRS101 

  相应的英文如下: 

Cause:An extent could not be allocated for a table segment in tablespace 

Action:Use the ALTER TABLESPACE ADD DATAFILE statement to add one or more files to the specified tablespace  

. 认识EM(企业管理器)的体系结构 
===================================== 

Oracle Enterprise Manager (EM) 2.x 实现了一个3层结构,其组成如下: 

第一层 First-tier: 
第一层是客户端工具,如:EM Console, DBA Management Pack和其他集成的Oracle应用。这些工具是从Windows NT, Windows 95, Windows 98或Sun Solaris机器的本地启动的。这些工具也可以是通过浏览器下载下来的JAVA applet。 

中间层 Middle-tier: 
中间层(也就是第二层) 由安装在Windows NT或Sun Solaris server上的Oracle Management Server (OMS)构成。 
要使用EM Console(企业管理器的控制台)和Job&amp;Event subsystem(任务与事件子系统),必须有一个配置好的Oracle Management Server。 

OMS提供了: 
- 访问EM库(Repository)中的信息 
- 分派控制台的请求 
- 控制任务执行 
- 监控事件 
- 通过电子邮件或寻呼提示任务的完成或事件发生 

多个OMS能够提供: 
- 无需额外的管理,就可以实现负载的分布 
- 工作量能够自动地被共享和均衡 
- 容错:一个OMS可以重做另外一个OMS的工作量 

第三层 Third-tier: 
第三层是智能代理(Intelligent Agent),是在每个server上必须安装的,用来执行任务和监控发生在该服务器各被管理对象上的事件的软件. 被管理对象包括网络节点(服务器)、数据库、侦听程序(listener)以及其他安装在这些结点上的Oracle服务。 

这三层可以是在同一台机器上,不同的机器上,或任意的组合,都可以。 

B. 企业管理器(EM)框架的设置 
================================ 

为了配置简便,每层配置后,应先验证是否配置正确,然后到下一层。方便的构造过程是从第三层到第一层。 

I. 配置第三层: 

为了管理结点和结点上的oracle服务,必须在结点上配置并运行一个智能代理(Intelligent Agent)。 
智能代理是由Oracle Server CD上安装的。详细安装信息,参考Oracle Server安装指南和Intelligent Agent用户指南。 

如果被管理的结点是一个Windows NT系统: 

Checklist - 
o 启动智能代理 
o 设置一个有"Logon as Batch Job"权限的Windows NT 管理员用户 

1. 启动智能代理/Intelligent Agent: 

启动一个Windows NT上的Intelligent Agent, 操作如下: 
a. 双点[控制面板/Control Panel]文件夹中的服务/Services图标。 
b. 选择名为Oracle<oracle home>;Agent的服务。 
c. 点击[开始/Start]按钮,启动这个代理。 

停止一个Windows NT上的Intelligent Agent, 操作如下: 
a. 双点[控制面板/Control Panel]文件夹中的服务/Services图标。 
b. 选择名为Oracle<oracle home>;Agent的服务。 
c. 点击[停止/Stop ]按钮,停止这个代理。 

验证此代理是否在运行,进行下面操作的任意组合: 
a. 在控制面板的服务中检查Oracle<oracle home>;Agent的状态 
b. 验证NT任务管理器中是否有进程dbsnmp.exe。 
c. 在命令行中执行net start命令。Oracle<oracle home>;Agent应当出现在服务列表中。 


2. 设置用于运行任务和事件监控的Windows NT用户的账户 

Checklist - 
o 确定Windows NT系统的类型 
o 创建一个和管理员等同的账号(用户) 
o 给新用户授予"Logon as a Batch Job" 的权限 

因为Windows NT是一个安全的操作系统,NT上的智能代理必须通过一个拥有"Logon as a Batch Job"权限的NT用户来执行任务和事件。 此特权 可以赋给一个一存在的本地用户或域用户,或者一个新的NT用户。下面是如何设置Windows NT用户的帐号。(Refer to the EM Configuration Guide for additional information.) 

注意:要创建或修改NT上的账号,必须以有"Administrator" (管理员)特权的用户登录。 

先判断ORACLE安装在一个什么类型的Windows NT系统上:主域控制器(PDC), 备份控制器 (BDC), 独立的(member) Server还是一个工作站。 如果机器是PDC或BDC,按照一下步骤建立或修改一个域用户。如果NT系统不是PDC或BDC,从“设置一个本地用户”一节开始。 


设置一个域用户: 

运行域的用户管理器 

选择 Start =>; Programs =>;Administrative Tools =>; User Manager for Domains 

窗口的标题条应该是"USER MANAGER - <Domain Name>;" , 


设置一个本地用户: 

运行用户管理器(for Domains) 

选择 Start =>; Programs =>; Administrative Tools =>; User Manager (For Domains) 

窗口的标题条应该是: USER MANAGER - \\ <machine name>; 

如果标题条中列出了域的名字,选User =>; Select Domain。 输入"\\<server name>;" (例如.\\bobpc) 

注意: 如果已有一个Windows NT账号account will be used by the Intelligent Agent, skip to the section "Grant Logon as a Batch Job Privilege" (step (d) below). 

创建一个用户: 

a. 选中一个管理员账号,选菜单User =>; Copy,拷贝这个账号及其权限. 

b. 为EM账号输入新的用户名和口令 (如EMUSER) 

c. 验证确保仅有"口令永不过期"被打上钩。选择Add。 

注意:如果在域中存在相同的名字的域用户和本地用户,口令必须有区别。口令是区分大小写的。 并且本地帐户优先。 

在第三层上为用户授予本地的"Logon as Batch Job"权限: 

d.选中在步骤(a)中创建的用户。 
选择菜单 Policies =>;User Rights。 

e. Click on the box next to Show advanced user rights. 

f. 选择Rights权限下拉列表中的“Logon as a Batch Job”。 如果有账号曾被授予过这个权限, "Grant to" 列表中将包含这个账号的名字。 

g. 选择Add。确保FROM中列出的是正确的名字: 

(1) 域名,如果你想创建一个域用户的话 ; 或 
(2) 本地机器名,如果你要创建一个本地用户 

如果名字不正确,选择下拉列表,选择正确的机器名或域名。 

h. 点 Show Users。找到刚刚创建的用户,点Add。 
此账号将出现在Add Names的底部。如果名字正确,就点OK。此用户就被加到Grant T 中。 
然后,点OK关闭对话框。关闭User Manager。 

注意:如果授予权限的用户已经登录了系统,需要重新注册,授权才会生效。 

如果被管理结点是个UNIX系统: 

Checklist - 
o 确认已经运行了post-installation脚本 (root.sh)。 
o 验证智能代理Intelligent Agent (dbsnmp) 执行文件的访问许可 
o 启动智能代理Intelligent Agent 

1. 运行 root.sh: 

每一次oracle安装之后,都必须运行root.sh脚本。该脚本设置了智能代理的执行文件(dbsnmp)的访问权限。 此脚本还创建或更新智能代理所用来确定是否系统上的所有数据库都可以发现的oratab文件。对于每个创建的数据库,都有下列格式的一项: 

<SID>;:<$ORACLE_HOME>;:[Y/N] 

验证oratab文件列出了系统中的每个数据库,并且遵循了正确的语法。 root.sh shell脚本文件应当已经写下了Oracle Home和SID的值。 如果oratab中没有项目, 按如下步骤操作: 

>; su root 
>; $ORACLE_HOME/orainst 
>; ./root.sh 

回答提出的问题。对于每个创建的数据库,项目的格式为: <SID>;:<$ORACLE_HOME>;:[Y/N] 

你将自动地退出root.sh。 

正常情况下,此代理被root.sh配置为一个setuid程序。如果root.sh执行成功,此代理将被安装成"setuid root",这样agent就可以以 EM Console中为该结点设定的Preferred Credentials中给的用户名和口令执行任务。 

2. 检查dbsnmp的文件访问权限: 

为了验证root.sh已被成功的执行了,检查dbsnmp的文件访问权限: 

>; cd $ORACLE_HOME/bin 

列出关于dbsnmp的相关详细信息: 

>; ls -al dbsnmp 

此命令的输出应当是如下格式的: 

-rwsr-xr-x 1 root dba 1497980 Jun 12 21:04 dbsnmp 

In this example, root is the owner and the group is dba. The first 10 characters (-rwxr-xr-x) represent the level of permissions set on the executable. The first 4 character (-rws) represents the owners permissions. 

For example, the owner has (r)read, (w)write, and (s)setuid on execute. The next 3 characters (r-x) represent the groups permissions. For example, (r)read, 
(x)execute. Group does not have write permissions. The last 3 characters (r-x) represents the permissions of everyone else or "world". If root is the owner 
and -rwsr-xr-x are the permissions, then root.sh has been ran successfully. 

如果dbsnmp的所有者是root,访问权限是-rwsr-xr-x,说明root.sh被成功的执行了。 

3. 在Unix上启动智能代理: 

在UNIX系统上, 智能代理是由"lsnrctl" 程序来启动和停止dbsnmp进程的。控制代理的命令如下: 

在UNIX平台上启动代理 lsnrctl dbsnmp_start 
在UNIX平台上停止代理 lsnrctl dbsnmp_stop 
验证代理的状态 lsnrctl dbsnmp_status 
II. 配置中间层 - Oracle 管理服务器 

Checklist - 
o 验证用于存储EM数据的数据库符合安装前的要求。 
o 运行Enterprise Manager Configuration Assistant来升级或创建新的EM存储库。 
o 启动Oracle Management Server. 


Oracle管理服务器(OMS)提供了在EM客户端和被管理结点之间的集中控制。 OMS必须安装在Sun Solaris (2.6以上) 或 Windows NT 4.0 SP4以上,或Linux。 

1. 安装前的设置 

OMS要有一个EM库(Repository)来存储所有的系统数据,应用数据和环境中被管理结点的状态。 

a. EM Repository是存储在网络上可访问到的一个Oracle8x服务器上的一个模式中。它是OMS所需要的表,视图,索引,存储过程等对象的集合。 

b. Oracle建议将EM Repository建立在一个非产品的实例中,这样实例可以被完全管理,不影响EM Repository的状态。 

c. 在存放EM Repository的数据库的init<sid>;.ora文件中,参数"processes ="至少应设为200。实例必须被重起以使设置生效。 

d. EMCA 2.1将在数据库中创建OEM_REPOSITORY表空间(如果它不存在的话)。当然你也可以手工创建这个表空间。 

要手工创建表空间,在Oracle 8.x数据库上运行下面的脚本。此脚本创建一个带一个初始大小为5M的数据文件的表空间,此数据文件可以自动扩展到80M。 

CREATE TABLESPACE "OEM_REPOSITORY" 
DATAFILE 
'<datafile_specification>;' 
SIZE 5M AUTOEXTEND ON NEXT 25M MAXSIZE 80M 
DEFAULT STORAGE 
(INITIAL 128K 
NEXT 128K 
MINEXTENTS 1 
MAXEXTENTS UNLIMITED 
PCTINCREASE 0 ) 
MINIMUM EXTENT 128K 

2. 运行企业管理器配置助理 Enterprise Manager Configuration Assistant: 

企业管理器配置助理 (EMCA) 在每次OMS安装的最后都将被自动启动,用来创建和更新EM repository。 

注意: 在安装后,启动EMCA: 

- 选择菜单 Programs =>; Oracle<oracle home>; =>; Enterprise Management =>; Configuration Assistant 
- 在命令行中输入: emca 

EMCA可以完成如下任务: 

- 创建 repository用户 
- 为repository用户创建模式/schema对象 
- 向EM repository中加载OMS registry数据. 
- 设置OMS将使用的配置文件 
- 从一个用户模式中清除repository。 
- 修改OMS连到哪个repository。 


创建一个新的EM repository: 

a. 启动EMCA, 选择 Create 选项。 
b. 输入一个拥有DBA权限的数据库用户的用户名。此用户用来创建EM Repository模式的拥有者。 

对于服务名信息, Oracle建议使用JDBC连接串(<host>;:<port>;:<sid>; )来连接数据库。使用这种类型的连接串时,将不使用本地的TNSNAMES.ORA文件。相同的JDBC连接串将被存储在<OMS_oracle_home/sysman/config/>; omsconfig.properties 文件中并在建立OMS到EM Repository的连接的时候使用。 

c. 输入EM Repository模式的名字: 

repository用户名是用于存储repository的数据库用户模式。 它既可以是一个已存在的用户,也可以是一个EMCA创建的新用户。 

如果你计划在同一个intranet创建多个repository, repository的所有者的用户名必须是唯一的。 

d. 如果是EMCA创建的新用户,必须为用户指定缺省表空间和临时表空间。 否则,repository将创建在用户所给的缺省表空间中。缺省的表空间是 OEM_REPOSITORY。 

e. EMCA将自动弹出一个屏幕显示整个配置过程完成的不同步骤的详细信息。配置成功结束后, 将有一个进行新的操作的提示。到这里,配置已经完成了。 

The next step will be to start the OMS. 

3. 启动Oracle Management Server: 
在Windows NT上启动OMS, 执行如下步骤: 

a. 双点[控制面板/ Control Panel]中的服务/Services图标。 
b. 选择服务 - OracleManagementServer 。 
c. 点按钮[启动/Start]来启动这个服务。 

在Solaris上: 

在命令行中,输入: 

oemctrl start oms&amp; 

如果启动OMS失败,请察看在目录$ORACLE_HOME/sysman/log 下的日志文件oms.log中的详细信息。对于EM 2.1的Solaris版本,日志文件的名字是oms.nohup。 


III - 配置第一层 

Checklist - 
o 启动EM Console控制台 
o 发现被管理结点及其被管理的服务 
o 设定缺省登录验证字 
o 测试配置 
o 启动DBA管理工具 

1. 启动企业管理器控制台(EM Console) 

在Windows NT上启动控制台: 

点 Programs =>; Oracle<oracle home>; =>; Enterprise Management =>; Configuration Assistant 

或者从命令行,输入: 
oemapp console 

从Solaris上: 

在命令行输入: 
oemapp console 

缺省的EM登录名是: sysman / oem_temp 

在输入了缺省的登录名之后,你将被强制要求修改初始密码,改完后要记住啊! 

登录完成后,可以设定另外的EM用户。这些用户只是EM console和OMS的用户。 他们不是数据库账号,但是这些用户是存储在EM Repository的一个表中。 


2. 发现和寻找被管理结点 

为了在EM控制台中管理各结点和数据库的任务和事件,这些结点必须被EM控制台发现。 

为了找到一个结点,这个结点上的智能代理(Intelligent Agent )必须正运行着。在OMS机器和结点之间,必须存在TCP/IP的解析。为了验证网络解析,你必须能在OMS机器上ping到服务器的主机名和ip地址,也能从服务器上ping到OMS机器的主机名和ip地址。如果主机名不能双向的ping通,请咨询局域网的管理员。 

在EM控制台中, 选择菜单Navigator =>; Discover Nodes。输入你想找到的机器的TCP主机名。 

完成后,导航板中出现代表这个服务器上的服务的条目。. 

EM直接读取服务器上的智能代理写在文件services.ora中的信息。如果这些信息看上去不对,智能代理的发现过程将出错。 

在执行了发现过程之后,可以通过选择菜单: System =>; Update TNS Alias来更新本地的TNSNAMES.ORA文件。如果设置了TNS_ADMIN变量,tnsnames.ora文件必须被复制到那里。 

3. 设置缺省登录验证字 

为了对被发现的服务执行任务和时间,需要在EM控制台上设定登录验证字。在提交任务和事件的时候,这些验证字将被传给服务器的Intelligent Agent。 

在EM Console中, 进入菜单 System =>; Preferences,进入Preferred Credentials页。 

- 对于每个数据库类型的服务,必须输入数据库的用户。 
- 对于每个节点类型的服务,必须输入操作系统的用户。 

注意: 对于Unix节点, 可以使用Oracle用户。 
对于Windows NT节点,必须使用一个有Logon as a Batch Job权限的用户。 


4. 测试配置 

为了验证第三层、第二层和第一层是否配置正确,创建一个简单的测试任务。 

a) 在EM Console中, 选择菜单Job =>; Create Job。 
b) 在 General 页中,给出任务名字,并选择任务运行在哪个数据库上。 
c) 在Tasks页中,选择"Run SQL*Plus Script" 。 
d) 在Parameters 页中,在文本框script中输入select * from dual; 。 

点击窗口底部的Submit按钮。 

在Jobs pane中的Active页中, 你应该看到任务开始运行了。当任务完成后,它将被移到History页中。到 History页中去察看这个任务的状态是"Completed" 还是 "Failed"。 

如果任务的状态是"Completed", 那么EM任务系统就配置好了。 

如果任务的状态是"Failed", 在History页中双点这个任务,将打开一个"Edit Job"窗口。 

在这个窗口中,选中有"failed"的一行,点击按钮"Show Output"。任务输出窗口将显示出错误信息。 


5. 从控制台之外,启动DBA工具 

1) 在Windows NT/95/98上: 
工具可以从程序组或命令行中单独启动。 
命令行的语法如下: 
首先转换到ORACLE_HOME\bin目录下: 

C>; oemapp dbastudio 
C>; oemapp security 
C>; oemapp schema 
C>; oemapp instance 
C>; oemapp storage 
C>; oemapp worksheet 

2) 在Unix系统上: 
在命令行中可以如此启动那些工具: 

$ oemapp dbastudio 
$ oemapp security 
$ oemapp schema 
$ oemapp instance 
$ oemapp storage 
$ oemapp worksheet 

注意: 在EM Console之外启动这些工具的时候, service name必须要么是JDBC连接串,要么是TNSNAMES.ORA文件中已有的别名。 
Tnsnames.ora文件位于<EM Oracle Home>;/network/admin 并且/或者在变量TNS_ADMIN中指定的目录下。 

* NT下 * 
*********************************** 
1. 控制面板――>;管理工具―― >;计算机管理――>;本地用户和组――>;用户――>;新建用户sys和sysman(sys和sysman 的帐号要和登陆数据库的帐号相同); 
2.控制面板――>;管理工具―― >;本地安全策略――>;本地策略――>;用户权利指派――>; 
作为批处理作业登陆――>;添加sys和sysman两个帐号。 
3.使用Enterprise Manager配置辅助工具 
开始→程序→Oracle - OraHome81→Enterprise Manager→Configuration Assistant 
a、使用Configuration Assistant工具来创建一个新的资料档案库。 

4.控制面板――>;管理工具―― >; 服务,查看OracleOraHome81ManagementServer是否启动,如果没有启动,则手动启动该服务。 
5.以sysman/oem_temp(default)登陆DBA Studio 
(第二个选项:登陆到Oracle Management Server),立即修改密码为你刚才在NT下建的用户sysman的密码。 
6. 以sysman/ *** (bluesky) 从开始→程序→Oracle - OraHome81→Console 登陆到 控制台。 
在 系统→首选项→首选身份证明(我的首选身份设置如下:) 
DEFAULT节点:name:sysman 
DEFAULT数据库:name:sys 

7. 在搜索/添加结点后,以sysman/ *** 登陆到该结点,以sys/ *** as sysdba登陆数据库(也就是在首选身份设置的结果)。 
8. 在工具→备份管理→向导→预定义备份策略(自定义备份策略)→提交备份计划 
9.从开始→程序→Oracle - OraHome81→Console 登陆到 控制台,查看活动(历史记录) 
可以看到你的备份是否成功,如果不成功,可以点击备份看明细。(我第一次也没成功,后来我修改系统的临时目录C:\WINNT\Temp→c:\temp\systmp,重新启动机器就ok了)

Tags: 错误   解决   oRACLE   代码   C   错误代码   分析    
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号