Oracle database启动过程分析
实例跟数据库的区别
实例(instance)是内存中的一块区域和一组后台进程的集合。它的作用是维护数据库文件的。而数据库(database)则是指存放数据的数据库文件。它是一系列格式化的数据的集合。它只有挂载到实例上,才能被访问,维护。
Oracle启动过程
要启动一个oracle数据库,首先需要启动一个实例,然后把数据库文件挂载到这个实例,最后把数据库设置成打开模式。这样就完成了一个数据库的启动过程。
首先,oracle根据环境变量中的ORACLE_SID确定要启动哪一个数据库,然后在$ORACLE_HOME/database/目录下找到初始化参数文件。根据初始化参数文件中的内容,分配系统内存,创建后台进程。这样实例就启动完成了。
然后根据参数文件中指定的控制文件路径,找到要挂载的数据库的控制文件,控制文件是个二进制文件,不可进行直接读写。实例根据控制文件内容,检查加载数据库文件,重做日志文件,这样,数据库就挂载到实例上了。最后将数据库至于打开状态。
从上面的过程可以看出,两个文件是非常重要的,他就是
初始化参数文件跟控制文件。初始化参数文件
原本oracle使用的pfile文件,是个文本文件。可直接用文件编辑器进行修改。后来,oracle在启动参数文件这部分引入了spfile文件,这是个二进制文件,不可以直接修改。但同时oracle也支持以文本格式的pfile文件为参数进行启动。启动之后可以根据现有的pfile文件对spfile文件进行重建。
以pfile参数文件启动的命令为
Startup nomount pfile=’/u01/initoracle.ora’
即使用pfile=‘’参数对启动参数文件进行指定。
启动实例后,可用
Create spfile from pfile=‘/u01/initoracle.ora’
对spfile文件进行重建。
当数据库的启动参数文件丢失的时候,可以直接把其他数据库的启动参数文件拷贝过来,然后以文本打开,对其中的参数进行调整,就可以直接使用了。
参数文件主要是用来启动实例的。它里面的主要参数主要设置了实例内存区各区域的大小。参数文件中另一个比较重要的参数就是控制文件位置。
当oracle实例启动后,若要挂载数据库,可使用命令
Alter database mount
命令对数据库文件进行挂载。这个命令主要是根据参数文件中的控制文件路径找到控制文件,然后根据控制文件的内容,把数据库文件,重做日志文件挂载到实例上。
控制文件
是个二进制文件,它里面主要记录了数据库文件的路径以及重做日志文件的路径,以及scn号等信息。因为这个文件很重要,一般数据库中留有这个文件的2-3个备份,并且数据库管理员应该物理的将这个文件备份至不同磁盘,甚至不同主机上。
一般参数文件中的控制文件路径会不止一个,当挂载数据库的时候,实例会检查所有路径下的参数文件的有效性并核对各个参数文件内容是否一致,若内容有差别或者某个路径下的参数文件失效,则实例会报错,并无法挂载数据库。
若只是数据库控制文件众多备份中的一个损坏了,那直接从备份的控制文件拷贝过来,并更改好文件名就可以直接使用了。
对于控制文件的备份还有一种方式,就是登陆数据库,使用命令
Alter database backup controlfile to trace;
这条命令就经控制文件中的内容备份到了trace文件中,可通过查看相应的trc文件来进行控制文件的恢复。当然,alert_log中会记录此备份语句的执行,并记录控制文件备份的trc文件的名字。
此命令对应的trace文件完整的告诉了你如何利用此文件中的信息进行控制文件恢复。首先包括两种方式,resetlog和noresetlog。Resetlog就是重置日志,当重做日志部分不可用或全部不可用的时候使用此方法。Nosetlog就是不重置日志,当日志文件全部可用的时候使用此选项托福答案 www.tfjy386.com
当然,如果控制文件完全丢失也没有备份,那么只有利用其它数据库中的trace文件中的信息,做一定的修改,然后重建控制文件。
Oracle database启动过程分析的更多相关文章
- Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
ORACLE集群概念和原理(二) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)
缓存融合技术和主要后台进程(四) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- Oracle Database 11g Express Editon介绍及安装
一.Oracle Database 11g Express版本介绍 公司项目开发中,使用的数据库是Oracle 10g和MySQL 5.5,最新因为开发需要,需要从后台读取一些数据.使用的客户端是PL ...
- Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)解决
环境:Windows 2008 R2 + Oracle 10.2.0.3 应用最新bundle patch后,扫描依然报出漏洞 Oracle Database Server 'TNS Listener ...
- Oracle Database 11g Release 2(11.2.0.3.0) RAC On Redhat Linux 5.8 Using Vmware Workstation 9.0
一,简介 二,配置虚拟机 1,创建虚拟机 (1)添加三块儿网卡: 主节点 二节点 eth0: 公网 192.168.1.20/24 NAT eth0: 公网 192.168.1 ...
- 【转】Oracle Database PSU/CPU
转自: http://www.cnblogs.com/ebs-blog/archive/2011/07/28/2167232.html 1. 什么是PSU/CPU?CPU: Critical Patc ...
- Linux环境下Oracle数据库启动停止命令
切换root至oracle数据库账号 su – oracle 查看数据库服务状态: ps -ef |grep oracle netstat –an|grep 1521 查看数据库监听状态: [orac ...
- Oracle Database 11g Express Edition学习笔记
修改字符集 使用用户system,通过sqlplus程序连接到Oracle数据库,输入以下命令,查看字符集: SQL> select userenv('language') from dual; ...
- Oracle Database 11g Express Edition 使用小结(windows)
如何启动oraclewindows系统服务中有一个服务叫:[OracleService[SID]]SID是你安装oracle xe时候的实例名,如果你没有改默认的是[XE], OracleServic ...
随机推荐
- 利用ordered hints优化SQL
SQL_ID 4g70n3k9bqc5v, child number 0 ------------------------------------- MERGE INTO YJBZH_GRXDFHZ ...
- 【数学】HDU 5761 Rower Bo
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5761 题目大意: 船在(0,a),船速v1,水速v2沿x轴正向,船头始终指向(0,0),问到达(0, ...
- oracle连接进程数设置
SQL> select count(*) from v$session #连接数SQL> Select count(*) from v$session where status='ACTI ...
- puppet report import
把Puppet报告导入Puppet Dashboard 现在Dashboard正在运行,而我们需要确保它能够获取Puppet报告.完成这项工作有几种方法,开始的时候都是用Rake任务导入旧报告.在/u ...
- 数据迁移sql
1.把数据库test中的表Table1中的数据插入到数据库test2中的表Table2:insert into test2.Table2(a,c,d) select a,c,5 from test.T ...
- [Java] Tcp/udp 简单通信
本文转自 我自己的博客guozeyiblog.cn 欢迎来訪 效果图: //UDP通信 import java.awt.*; import java.awt.event.ActionEvent; i ...
- HDU1007 Quoit Design 【分治】
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- [Redux] Writing a Todo List Reducer (Adding a Todo)
Learn how to implement adding a todo in a todo list application reducer. let todo = (state = [], act ...
- boost 相等与等价的区别
- HttpWebRequest get/post方法实现
get请求url #region GetHttp请求 /// <summary> /// GetHttp请求 /// </summary> /// <param name ...