实例和数据库的启动与关闭是DBA的重要职责之一只有打开数据库其他用户才能对数据库中的数据进行操作一旦数据库关闭便不能对其操作对于DBA们来说关闭和重新启动数据库以便优化调整应用程序的运行是经常碰到的事情如果用户已经进入了数据库使用SHUTDOWN IMMEDIATE 或SHUTDOWN ABORT命令来执行关闭数据库则用户将失去连接直到数据库重新启动经常关闭和启动会对数据库性能造成一定的影响当然也会影响到用户对数据库的使用本文从管理数据库的角度来分析在Oracle启动和关闭时经常遇到的问题并总结了在启动和关闭Oracle数据库中应该注意的问题和事项
启动常见问题
(一)在一个控制文件被损坏情况下如何正常启动?
系统环境
操作系统Windows Advanced Server
数据库Oracle i R () for NT 企业版
安装路径C:\ORACLE
错误现象
因硬盘有坏道一个控制文件损坏了或人工误删一个控制文件控制面板的Oracle相关服务可以启动成功但用SQL*Plus无法连接错误提示为ORA: ORACLE not available
解决方法
()在开始菜单中直接运行命令进入svrmgrl>提示符模式
()在svrmgrl>提示符下键入connect internal命令
()在svrmgrl>提示符下键入shutdown abort命令关闭数据库
()找到initora文件它一般位于C:\Oracle\admin\oradb\pfile目录下然后修改initora文件使无法使用的控制文件不在control_files参数中定义如C:\Oracle\oradata\oradb\controlctl可在initora中将其删除掉或者更换成其它可启动的控制文件中国公务网 ::
修改前
control_files=(C:\Oracle\oradata\oradb\controlctlC:\Oracle\oradata\oradb\controlctlC:\Oracle\oradata\oradb\controlctl)
修改后
control_files=(C:\Oracle\oradata\oradbcontrolctlC:\Oracle\oradata\oradb\controlctl)
()重新启动数据库实例即可解决问题
注意在控制文件中最少要有两个控制文件
(二)联机热备份失败后如何打开数据库?
系统环境
操作系统Windows Advanced Server
数据库Oracle i R () for NT 企业版
安装路径C:\ORACLE
错误现象
进行联机热备份时服务器发生故障(如掉电等)重新启动服务器后再启动数据库时无法打开数据库Oracle要求进行介质恢复因为表空间还处在热备份状态
解决方法
()先将数据库设置为归档模式
C:\>svrmgrl
svrmgrl>connect internal
svrmgrl>alter tablespace 表空间名 begin backup;
说明这是在表空间进行热备份模式没结束时就强行关闭数据库所造成的错误
svrmgrl>shutdown abort
svrmgrl>startup mount
()将此表空间的数据文件在没打开数据库时设置成end backup模式
svrmgrl>alter database datafile %表空间的数据文件名% end backup
()执行表空间介质恢复
svrmgrl>recover tablespace 表空间名
svrmgrl>alter database open
(三)Oracle启动时监听器不启动或打开出错?
错误现象
ORACLE启动时监听器不启动或打开出错服务器端用username/password登录正常但用username/password@alias登录不成功客户端用username/password@alias登录不成功
解决方法
()如果是因为修改了NT的机器名则把listenerora文件中的host参数全部改为新的NT机器名重新启动OracleTNSListener服务即可
例如:
LISTENER =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = NT_Name)(Port = ))
(ADDRESS=(PROTOCOL=TCP)(Host=NT_Name)(Port= ))
)
()使用监听器实用程序LSNRCTLexe
()检查监听器参数文件c:\orant\NET\admin\listeneroraWWWGONGWUCOMCN ::
()检查监听器日志文件c:\orant\NET\log\listenerlog
()Tnsnamesora文件配置错误重新配置
()检查client端 Tnsnamesora
(四)Oracle Enterprise Manager(OEM)工具中如何以SYSOPERSYSDBA方式登录?
软件环境
Windows NT+ORACLE
ORACLE安装路径为C:\ORANT
错误现象
在以Oracle Enterprise Manager(OEM)工具登录数据库时不论是sys用户system用户还是其他用户在Connect As栏中以sysdba或sysoper角色登录均遭拒绝报错Ora:invalid username/password;logon denied但以normal登录成功
出错分析
在Oracle数据库中有三种连接方式
()normal正常方式基本连接方式级别较低
()sysopr系统方式系统连接方式高一级
()sysdba管理员方式是数据库管理员连接方式级别最高WWWGONGWUCOMCN ::
Oracle中syssystem已经只是具有特权的普通用户而internal才是DBA所以在DBA进行管理数据时只能使用具有特权的internal连接方式才不会出错
解决方法
以internal/oracle方式连接即可
Oracle数据库的启动
启动实例
启动实例以使Oracle Server完成如下任务
◆ 读参数文件initora文件以决定如何初始化该实例
◆ 根据参数文件中提供的SGA大小来为SGA分配存贮空间
◆ 启动后台进程
◆ 打开后台跟蹤文件
实例启动分正常启动和约束启动所谓约束启动就是当数据库打开后只能使具有RESTRICTED SESSION系统特权的用户与其相连接而正常启动则允许所有用户与其相连接
实例启动有如下三种方式
◆ 只启动实例
◆ 启动实例并安装数据库但不打开数据库
◆ 启动实例并安装和打开数据库
数据库安装
数据库安装就是将指定的数据库与已启动的实例相联系被安装的数据库在打开之前保持关闭此时只有DBA能存取在安装数据库时实例查找参数文件中的CONTROLFiles参数所指定的控制文件并打开它从中取得数据库的数据文件名和日志文件名然后确认这些文件是否存在如果希望多个实例并发地安装同一个数据库则DBA可选择并行方式安装该数据库如果希望只有一个实例可安装该数据库则选择专用方式安装该数据库如果ORACLE版本不支持并行服务器选项则只能按专用方式安装数据库当选择并行方式安装数据库时并发安装同一个数据库的实例个数受预定义最大值的限制而且在参数文件中必须有命名的私用回滚段或可用的公用回滚段
打开数据库
在安装的数据库被打开之前所有合法的用户(除DBA)都不能对该数据库进行连接和存取只有被打开以后才能进行连接和存取在打开数据库的同时实例也打开在线的数据文件和在线日志文件如果数据库是由于实例的异常而中止或电源故障而被关闭时则下次打开它时会自动执行实例恢复在数据库被打开时实例试图获取一个或多个回滚段在分布事务中若当—个数据库因电源故障等突然被关闭此时若有一个或多个分布式事务还没提交或回滚则在该数据库被重新打开时继续完成实例恢复RECO后台进程将自动立即和一致地解决尚未提交或回滚的任何分布事务
常用打开数据库和实例命令方式
()startup nomount
非安装启动这种启动方式下可执行重建控制文件重建数据库和启动instance即启动SGA和后台进程这种启动只需要initora文件
()startup mount dbname
安装启动这种启动方式下可执行数据库日志归档数据库恢复和重新命名一些数据库文件
()startup open dbname
先执行nomount然后执行mount再打开包括Redolog文件在内的所有数据库文件这种方式下可访问数据库中的数据
()startup等于以下三个命令
startup nomount
alter database mount
alter database open
()startup restrict
约束方式启动这种方式能够启动数据库但只允许具有一定特权的用户访问非特权用户访问时会出现以下提示
ERROR
ORA: Oracle 只允许具有RESTRICTED SESSION权限的用户使用
()startup force
强制启动方式当不能关闭数据库时可以用startup force来完成数据库的关闭先关闭数据库再执行正常启动数据库命令
()startup pfile=参数文件名
带初始化参数文件的启动方式先读取参数文件再按参数文件中的设置启动数据库例startup pfile=E:\Oracle\admin\oradb\pfile\initora
()startup exclusive
SQL>conect internal
作为internal连接时connect命令不需要口令因为其授权是由操作系统隐式提供的Internal连接等价于sys连接它们都是拥有Oracle数据字典的用户
应用
在Unix下启动Oraclei其整个过程步骤如下
()telnet 主机IP或者是主机名
user***** password*****
()lsnrctl start
()svrmgrl
()svrmgrl>connect internal
()svrmgrl>startup
实例和数据库的关闭
关闭实例的步骤
关闭实例后SGA从内存撤消后台进程被停止关闭实例的步骤如下
()启动SQL*DBA
()作为INTERNAL用户与数据库相连接
()关闭实例
◆ 关闭数据库
◆ 卸下数据库
◆ 关闭实例
关闭数据库
数据库关闭时首先将SGA中的所有数据库数据和日志项数据写入相应的数据文件和日志文件然后关闭所有联机数据文件和日志文件在数据库关闭后和卸下之前控制文件仍保持打开此时如果需要打开时还可重新打开数据库
卸下数据库
卸下数据库就是切断实例与数据库的联系关闭数据库控制文件使内存仅保留实例
常用关闭数据库和实例命令
()shutdown normal(正常关闭数据库)
在正常关闭情况下Oracle在关闭数据库前等待所有与之相连接的用户正常结束其对话于是在下次启动数据库时就不需要恢复实例
()shutdown immediate(立即方式关闭数据库)
当选择Immediate关闭方式时即实现直接关闭在SVRMGRL中执行shutdown immediate数据库并不立即关闭 而是在Oracle执行某些清除工作后才关闭(终止会话释放会话资源)当使用shutdown不能关闭数据库时shutdown immediate可以完成数据库关闭的操作
该关闭方式主要用于下列情况
①马上停电
②Oracle正在非正规的运行数据库或一个数据库应用
该方式关闭数据库过程如下
①Oracle结束当前正在处理的SQL语句
②回滚未提交的事务
③Oracle不等待与之相连接的用户退出连接就直接中断他们使用这种关闭方式下次启动数据库时Oracle应自动执行实例恢复
()shutdown abort(撤消实例方式关闭数据库)
这是一种最快的关闭方式它主要用于下列情况
①一分钟后就要停电
②Oracle正在非正规的运行数据库或一个数据库应用并且其它的关闭方式失效
③启动一个数据库实例时碰到问题
该方式关闭数据库的过程如下
①Oracle不等待调用完成直接中断正在处理的SQL语句
②回滚未提交事物
使用这种关闭方式下次启动数据库时Oracle应自动执行实例恢复启动和关闭实例和数据库的操作需要connect internal系统特权安装和打开数据库的操作还要有alter database系统特权直接关闭数据库正在访问数据库的会话会被突然终止如果数据库中有大量操作正在执行这时执行shutdown abort后重新启动数据库需要很长时间
应用
在Unix中关闭Oraclei其具体步骤如下
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文件它被存储在指定的目录该路径由INITORA或CONFIGORA文件中的BACKGROUND_DUMP_DEST参数指定用户在数据库中遇到一个内部错误时也增加用户的TRACE文件该文件的位置由INITORA或CONFIGORA文件中的USER_DUMP_DEST参数指定TRACE文件的个数和名称形式由使用数据库的操作系统决定
在每次启动和关闭数据库时Oracle不会自动删除TRACE文件如果长期不删除这些无用文件它们将占据数据库中大量的自由空间数据库管理员应该很好的管理这些文件可以采取删除或者存档的策略来避免无用文件占用大量自由空间
SQL*NET也产生LOG文件一般叫LISTENERLOGLISTENERLOG文件大小也随着启动的次数不断的变大所以通过妥善管理它也能有效的利用空间查看该文件可以键入命令
lsnrctl status
在Oraclei中使用该命令其显示结果为
o % lsnrctl status
LSNRCTL for SGI IRIX: Version Production on APR ::
(c) Copyright Oracle Corporation All rights reserved
Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
STATUS of the LISTENER
Alias LISTENER
Version TNSLSNR for SGI IRIX: Version Production
Start Date MAR ::
Uptime days hr min sec
Trace Level off
Security OFF
SNMP OFF
Listener Log File /data/orai/OraHome/network/log/listenerlog
The listener supports no services
The command completed successfully
改名ALERT LOG文件
ALERT LOG文件也是用来记录INSTANCE的诊断信息的它的存放目录也通过BACKGROUND_DUMP_DEST参数来指定一般情况下ALERT LOG文件命名方式为ALERT_ LOGALTER LOG文件包括了一些数据库主要事件信息例如startup和shutdown及redolog的使用表空间的改变文件的改变内部错误信息和数据库备份状态的改变等
ALTER LOG在后续数据库的使用中其增长速度非常快如果一段时间后再查看它时其文件已经变得非常大所以查看它是非常的费劲一般来讲为了既能留下这些有用的信息同时不至于浪费很大的空间最好的管理办法就是给它改名可以在任何时候更改ALTER LOG文件名建议在SHUTDOWN/STARTUP数据库时更改名字