一 启动数据 $sqlplus "sys/pass as sysdba" sql>startup
二 启动监听器 数据库启动后 如果未启动监听进程 则客户端无法与数据库连接 监听进程的启动方法为 $lsnrctl start 在widnows中 可以从服务列表中启动监听器 监听里程配置文件为listener ora 位于目录/home/app/oracle/product/ /db /neork/admin/ 此配置文件分为两部分 一部分为监听程序本身的配置 包括协议 地址 端口号等 另一部分为监听程序所连接的数据库的实例信息 包括 实例名 全局数据库名 oracle主目录等 监听器可以利用oracle net config 向导来配置 要显示监听器的运行状态 $lsnrctl status要停止监听器 $lsnrctl stop
三 数据库的启动过程 分为三个阶段 启动实例 包括以下 *** 作 ) 读取参数文件 ) 分配SGA ) 启动后台进程 2.装载数据库 装载数据库是将数据库与已启动的实例相联系 数据库装载后 数据库保持关闭状态 3.打开数据库 此步骤使用数据库可以进行正常的 *** 作的处理 主要是打开控制文件 数据库文件和日志文件
四 数据库启动参数 NOMOUNT:只启动实例 不装载数据库 sql>startup nomount MOUNT:启动实例 并装载数据 但不打开数据库 sql>startup mount READ ONLY:将数据库置为只读 sql>startup mount sql>alter database open read only READ WRITE:以可读写方式打开数据 这是默认方式 sql>startup mount sql>alter database open read write OPEN:打开数据库 这是默认方式 sql>startup mount sql>alter database openRESTRICT:以受限方式打开 只有具有RESTRICTED SESSION权限的用户才可以连接数据库 sql>startup restrict PFILE:启时指定参数文件 sql>startup pfile=/u /user/mypfile ora FORCE:以强制方式启动数据库 sql>startup pfile=/u /user/mypfile ora open restrict force
五 数据库的关闭 与启动过程相对应 关闭包括三个过程 1).关闭数据库 2).卸载数据库 3).关闭数据库实例
1.NORMAL关闭方式 NORMAL关闭方式是正常关闭方式 是默认关闭方式 在这种关机方式下 数据库服务器必须等待所有客户端从Oracle中正常退出时 才可以关闭数据库 SQL>SHUTDOWN NORMAL 2.IMMEDIATE关闭方式 使用这种方式关闭数据库时 系统将连接到数据库的所有用户尚未提交的事务全部回退 中断连接 然后关闭数据库 SQL>SHUTDOWN IMMEDIATE 3.ABORT关闭方式 ABORT关闭方式为异常方式 使用这种方式关闭数据库时 系统立即将数据库实例关闭 对事务膛数据完整性不作检查 是最快的关机方式 sql>shutdown abort4.TRANSACTIONAL关闭方式 在这种关机方式中 数据库必须等待所有的客户运行的事务结束 提交或回退 sql>shutdown transactional
sql>startup force 强制启动
lishixinzhi/Article/program/Oracle/201311/19075如果想正常关闭,那么最好是:先手动断开所有数据库连接(外部链接,比如访问等),关闭监听(防止再次产生外部链接),然后杀掉所有正在执行的数据库进程(数据库内部的一些,比如正在执行的执行计划等,主进程别杀啊),然后关闭外围服务,最后再用immediate关闭数据库。这样能快一些,而且相对而言数据库会正常,不会因为断开外部链接,等待进程结束等问题等待时间超长。,当然也只是快一些而已,如果数据库很大,那么还是会很慢。
其他的shutdown abort,也是一个关闭数据库的方法,不过oracle本身也不推荐,因为每次abort后数据库可能会有这样那样的问题。
再baoli一些的,就是直接关机器,关电源了。
问题分析:由于之前出现过由于数据库的监听突然挂掉,导致连接异常,虽然那时通过PL/SQL工具连接时报的异常不是这个,但是为了排除这方面的原因,还是检查了下数据库的监听情况。
通过命令lsnrctl status,查看到数据库的监听是正常的。
因为无法通过PL/SQL连接工具连接数据库,所有就想通过DBA系统用户,连接数据库,进行检查。在数据库服务器上,执行“sqlplus / as sysdba”命令后,出现如下图异常:
wKioL1XeeKHTbgXgAADmmjMnc8k351.jpg
看到这个ERROR,才明白,是数据库的连接数被占用完了,导致连接关闭的错误了。
问题解决:
马上让开发那边的同事,关掉连接这个数据库测试用户,释放一些连接。然后通过PL/SQL工具,连接上数据库,查看当前数据库服务器所占用的连接数。
select username,count(username) ,machine from v$session group by username,machine
wKiom1XedpqRSh1PAAD2Gpruo2E911.jpg
发现某个机器的连接数巨大,检查对应服务器的后台日志,发现这些连接数都是由于程序中没有及时释放导致。
联系开发人员,优化代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)