欢迎光临
我们一直在努力

启动Oracle常见疑难问题分析-数据库专栏,ORACLE

建站超值云服务器,限时71元/月

启动oracle常见疑难问题分析  (2003-10-1) 

本文出自《网管员世界》2003年第10期“故障诊断”栏目

实例和数据库的启动与关闭是dba的重要职责之一。只有打开数据库,其他用户才能对数据库中的数据进行操作。一旦数据库关闭,便不能对其操作。对于dba们来说,关闭和重新启动数据库以便优化、调整应用程序的运行是经常碰到的事情。如果用户已经进入了数据库,使用shutdown immediate 或shutdown abort命令来执行关闭数据库,则用户将失去连接,直到数据库重新启动。经常关闭和启动会对数据库性能造成一定的影响,当然也会影响到用户对数据库的使用。本文从管理数据库的角度来分析在oracle启动和关闭时经常遇到的问题,并总结了在启动和关闭oracle数据库中应该注意的问题和事项。

启动常见问题

(一)在一个控制文件被损坏情况下,如何正常启动?
系统环境
操作系统:windows 2000 advanced server
数据库: oracle 8i r2 (8.1.6) for nt 企业版
安装路径:c:\oracle
错误现象
因硬盘有坏道,一个控制文件损坏了,或人工误删一个控制文件,控制面板的oracle相关服务可以启动成功,但用sql*plus无法连接。错误提示为“ora-01034: oracle not available”。
解决方法
(1)在开始菜单中直接运行命令,进入“svrmgrl>”提示符模式。
(2)在“svrmgrl>”提示符下键入“connect internal”命令。
(3)在“svrmgrl>”提示符下键入“shutdown abort”命令关闭数据库。
(4)找到init.ora文件,它一般位于“c:\oracle\admin\oradb\pfile”目录下,然后修改init.ora文件,使无法使用的控制文件不在control_files参数中定义。如“c:\oracle\oradata\oradb\control03.ctl”,可在init.ora中将其删除掉,或者更换成其它可启动的控制文件。
修改前:
control_files=(“c:\oracle\oradata\oradb\control01.ctl”.c:\oracle\oradata\oradb\control02.ctl“,”“c:\oracle\oradata\oradb\control03.ctl”)
修改后:
control_files=(“c:\oracle\oradata\oradb\
control01.ctl”,“c:\oracle\oradata\oradb\control02.ctl”)
(5)重新启动数据库实例,即可解决问题。
注意:在控制文件中最少要有两个控制文件。

(二)联机热备份失败后,如何打开数据库?
系统环境:
操作系统:windows 2000 advanced server
数据库: oracle 8i r2 (8.1.6) for nt 企业版
安装路径:c:\oracle
错误现象
进行联机热备份时,服务器发生故障(如掉电等)。重新启动服务器后,再启动数据库时,无法打开数据库,oracle要求进行介质恢复,因为表空间还处在热备份状态。
解决方法
(1)先将数据库设置为归档模式
c:\>svrmgrl
svrmgrl>connect internal
svrmgrl>alter tablespace 表空间名 begin backup;
说明:这是在表空间进行热备份模式没结束时,就强行关闭数据库所造成的错误。
svrmgrl>shutdown abort
svrmgrl>startup mount
(2)将此表空间的数据文件在没打开数据库时,设置成“end backup”模式
svrmgrl>alter database datafile 表空间的数据文件名 end backup;
(3)执行表空间介质恢复
svrmgrl>recover tablespace 表空间名;
svrmgrl>alter database open;

(三)oracle启动时,监听器不启动或打开出错? 
错误现象:
oracle启动时,监听器不启动或打开出错;服务器端:用username/password登录正常,但用username/password@alias登录不成功;客户端:用username/password@alias登录不成功
解决方法
(1)如果是因为修改了nt的机器名,则把listener.ora文件中的host参数全部改为新的nt机器名,重新启动oracletnslistener80服务即可。
例如:
listener =
(address_list =
(address = (protocol = tcp)(host = nt_name)(port = 1521))
(address=(protocol=tcp)(host=nt_name)(port= 1526))
  )
(2)使用监听器实用程序:lsnrctl80.exe。
(3)检查监听器参数文件:c:\orant\net80\admin\
listener.ora。
(4)检查监听器日志文件:c:\orant\net80\log\
listener.log。
(5)tnsnames.ora文件配置错误,重新配置。
(6)检查client端 tnsnames.ora。

(四)oracle enterprise manager(oem)工具中如何以sysoper、sysdba方式登录?
软件环境:
windows nt4.0+oracle 8.0.4
oracle安装路径为:c:\orant
错误现象
在以oracle enterprise manager(oem)工具登录数据库时,不论是sys用户、system用户,还是其他用户,在connect as栏中以sysdba或sysoper角色登录均遭拒绝,报错:ora-01017:invalid username/password;logon denied,但以normal登录成功。
出错分析
在oracle数据库中有三种连接方式:
(1)normal正常方式,基本连接方式,级别较低。
(2)sysopr系统方式,系统连接方式,高一级。
(3)sysdba管理员方式,是数据库管理员连接方式,级别最高。
oracle8中,sys、system已经只是具有特权的普通用户,而internal才是dba。所以在dba进行管理数据时,只能使用具有特权的“internal”连接方式才不会出错。
解决方法
以internal/oracle方式连接即可。 

oracle数据库的启动

启动实例
启动实例,以使oracle server完成如下任务:
◆ 读参数文件init.ora文件,以决定如何初始化该实例;
◆ 根据参数文件中提供的sga大小,来为sga分配存贮空间;
◆ 启动后台进程;
◆ 打开后台跟踪文件。
实例启动分正常启动和约束启动。所谓约束启动,就是当数据库打开后,只能使具有restricted session系统特权的用户与其相连接。而正常启动则允许所有用户与其相连接。
实例启动有如下三种方式:
◆ 只启动实例;
◆ 启动实例并安装数据库,但不打开数据库;
◆ 启动实例,并安装和打开数据库。

数据库安装
数据库安装就是将指定的数据库与已启动的实例相联系。被安装的数据库在打开之前保持关闭,此时只有dba能存取。在安装数据库时,实例查找参数文件中的control-files参数所指定的控制文件,并打开它,从中取得数据库的数据文件名和日志文件名,然后确认这些文件是否存在。如果希望多个实例并发地安装同一个数据库,则dba可选择并行方式安装该数据库。如果希望只有一个实例可安装该数据库,则选择专用方式安装该数据库。如果oracle版本不支持并行服务器选项,则只能按专用方式安装数据库。当选择并行方式安装数据库时,并发安装同一个数据库的实例个数受预定义最大值的限制,而且在参数文件中必须有命名的私用回滚段或可用的公用回滚段。

打开数据库
在安装的数据库被打开之前,所有合法的用户(除dba)都不能对该数据库进行连接和存取;只有被打开以后才能进行连接和存取。在打开数据库的同时,实例也打开在线的数据文件和在线日志文件。如果数据库是由于实例的异常而中止或电源故障而被关闭时,则下次打开它时会自动执行实例恢复。在数据库被打开时,实例试图获取一个或多个回滚段。在分布事务中,若当—个数据库因电源故障等突然被关闭,此时若有一个或多个分布式事务还没提交或回滚,则在该数据库被重新打开时,继续完成实例恢复,reco后台进程将自动、立即和一致地解决尚未提交或回滚的任何分布事务。

常用打开数据库和实例命令方式
(1)startup nomount
非安装启动,这种启动方式下可执行:重建控制文件、重建数据库和启动instance,即启动sga和后台进程,这种启动只需要init.ora文件。
(2)startup mount dbname
安装启动,这种启动方式下可执行:数据库日志归档、数据库恢复和重新命名一些数据库文件。
(3)startup open dbname
先执行“nomount”,然后执行“mount”,再打开包括redolog文件在内的所有数据库文件,这种方式下可访问数据库中的数据。
(4)startup等于以下三个命令
startup nomount
alter database mount
alter database open
(5)startup restrict
约束方式启动,这种方式能够启动数据库,但只允许具有一定特权的用户访问,非特权用户访问时,会出现以下提示:
error:
ora-01035: oracle 只允许具有restricted session权限的用户使用。
(6)startup force
强制启动方式,当不能关闭数据库时,可以用startup force来完成数据库的关闭,先关闭数据库,再执行正常启动数据库命令。
(7)startup pfile=参数文件名
带初始化参数文件的启动方式,先读取参数文件,再按参数文件中的设置启动数据库。例:startup pfile=e:\oracle\admin\oradb\pfile\init.ora
(8)startup exclusive 
    sql>conect internal
作为internal连接时,connect命令不需要口令,因为其授权是由操作系统隐式提供的。internal连接等价于sys连接,它们都是拥有oracle数据字典的用户。

应用
在unix下启动oracle8i,其整个过程步骤如下:
(1)telnet 主机ip或者是主机名
user:***** password:*****
(2)lsnrctl start
(3)svrmgrl
(4)svrmgrl>connect internal
(5)svrmgrl>startup

实例和数据库的关闭

关闭实例的步骤
关闭实例后,sga从内存撤消,后台进程被停止。关闭实例的步骤如下:
(1)启动sql*dba
(2)作为internal用户与数据库相连接
(3)关闭实例
◆ 关闭数据库
◆ 卸下数据库
◆ 关闭实例

关闭数据库
数据库关闭时,首先将sga中的所有数据库数据和日志项数据写入相应的数据文件和日志文件。然后关闭所有联机数据文件和日志文件。在数据库关闭后和卸下之前,控制文件仍保持打开,此时如果需要打开时,还可重新打开数据库。

卸下数据库
卸下数据库就是切断实例与数据库的联系,关闭数据库控制文件,使内存仅保留实例。

常用关闭数据库和实例命令
(1)shutdown normal(正常关闭数据库)
在正常关闭情况下,oracle在关闭数据库前,等待所有与之相连接的用户正常结束其对话。于是在下次启动数据库时,就不需要恢复实例。
(2)shutdown immediate(立即方式关闭数据库)
当选择immediate关闭方式时,即实现直接关闭。在svrmgrl中执行shutdown immediate,数据库并不立即关闭, 而是在oracle执行某些清除工作后才关闭(终止会话、释放会话资源),当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。
该关闭方式主要用于下列情况:
①马上停电;
②oracle正在非正规的运行数据库或一个数据库应用。
该方式关闭数据库过程如下:
①oracle结束当前正在处理的sql语句;
②回滚未提交的事务;
③oracle不等待与之相连接的用户退出连接,就直接中断他们,使用这种关闭方式,下次启动数据库时,oracle应自动执行实例恢复。
(3)shutdown abort(撤消实例方式关闭数据库)
这是一种最快的关闭方式,它主要用于下列情况:
①一分钟后就要停电;
②oracle正在非正规的运行数据库或一个数据库应用,并且其它的关闭方式失效;
③启动一个数据库实例时碰到问题。
该方式关闭数据库的过程如下:
①oracle不等待调用完成,直接中断正在处理的sql语句;
②回滚未提交事物。
使用这种关闭方式,下次启动数据库时,oracle应自动执行实例恢复。启动和关闭实例和数据库的操作需要connect internal系统特权,安装和打开数据库的操作还要有alter database系统特权。直接关闭数据库,正在访问数据库的会话会被突然终止,如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。

应用
在unix中关闭oracle8i,其具体步骤如下:
svrmgrl>connect internal
svrmgrl>shutdown
svrmgrl>exit

在关闭oracle数据库时需注意问题

不要提前关闭sql*net。
当需要shutdown数据库,不要提前关闭sql*net,直到确认关闭了server上的所有数据库后再关闭sql*net。如果关闭了sql*net,用户将失去和数据库的会话。

存档或删除旧的trace files和logs
当启动oracle的一个实例时,oracle把关于该实例的诊断信息写入指定的trace和log文件。每个后台进程都增加一个trace文件,它被存储在指定的目录,该路径由init.ora或config.ora文件中的background_dump_dest参数指定。用户在数据库中遇到一个内部错误时也增加用户的trace文件,该文件的位置由init.ora或config.ora文件中的user_dump_dest参数指定。trace文件的个数和名称形式由使用数据库的操作系统决定。
在每次启动和关闭数据库时,oracle不会自动删除trace文件。如果长期不删除这些无用文件,它们将占据数据库中大量的自由空间。数据库管理员应该很好的管理这些文件,可以采取删除或者存档的策略来避免无用文件占用大量自由空间。
sql*net也产生log文件,一般叫listener.log,listener.log文件大小也随着启动的次数不断的变大,所以通过妥善管理它也能有效的利用空间。查看该文件可以键入命令:
lsnrctl status
在oracle8i中使用该命令,其显示结果为:
o200 5% lsnrctl status
lsnrctl for sgi irix64: version 8.1.6.0.0 – production on 09-apr-2003 09:16:26
(c) copyright 1998, 1999, oracle corporation.  all rights reserved.
connecting to (address=(protocol=ipc)(key=pnpkey))
status of the listener
alias                     listener
version                   tnslsnr for sgi irix64: version 8.1.6.0.0 – production
start date                19-mar-2003 14:43:53
uptime                    20 days 18 hr. 4607182418800017439 min. 56 sec
trace level               off
security                  off
snmp                      off
listener log file         /data/ora8i/orahome/network/log/listener.log
the listener supports no services
the command completed successfully

改名alert log文件
alert log文件也是用来记录instance的诊断信息的。它的存放目录也通过background_dump_dest参数来指定。一般情况下alert log文件命名方式为:alert_ .log。alter log文件包括了一些数据库主要事件信息,例如:startup和shutdown及redolog的使用、表空间的改变、文件的改变、内部错误信息和数据库备份状态的改变等。
alter log在后续数据库的使用中,其增长速度非常快。如果一段时间后,再查看它时,其文件已经变得非常大,所以查看它是非常的费劲。一般来讲,为了既能留下这些有用的信息,同时不至于浪费很大的空间,最好的管理办法就是给它改名。可以在任何时候更改alter log文件名,建议在shutdown/startup数据库时更改名字。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 启动Oracle常见疑难问题分析-数据库专栏,ORACLE
分享到: 更多 (0)