0

0

一文掌握oracle启动过程

WBOY

WBOY

发布时间:2022-07-08 15:03:31

|

2767人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了关于oracle的相关知识,其中主要整理了启动过程的相关问题,其中包括了nomount状态、mount状态和open状态等等内容,下面一起来看一下,希望对大家有帮助。

一文掌握oracle启动过程

推荐教程:《Oracle视频教程

深入理解ORACLE启动过程

ORACLE SERVER由实例(Instance,应用程序)数据库(database,数据库文件)组成,而实例是由一组后台进程和一块共享内存区域(sga)组成,而后台进程是数据库和操作系统进行交互的通道,后台进程的命名由ORACLE_SID决定,ORACLE根据ORACLE_SID来寻找参数文件启动实例。数据库是指存储在磁盘上的一组物理文件。

ORACLE启动分3个过程:

NOMOUNT状态:启动实例MOUNT状态:打开控制文件OPEN状态:打开控制文件中描述的文件

NOMOUNT状态:

ORACLE需要寻找SPFILE(System Parameter File)(oracle 10g默认,pfile(Parameter File)也可以)文件,来创建实例和分配内存。

MOUNT状态:

在此状态需要打开控制文件,而控制文件中包含日志文件,数据文件的位置信息,检查点信息等重要信息。

在ORACLE9i中,丢失口令文件会报错,可以通过orapw工具重建。在oracle 10g不会报错,通过v$pwfile_users视图查询。

lk_文件在数据库启动时创建,用于操作系统对数据库的锁定。(lock)

口令文件存在$ORACLE_HOME/dbs

alter system set controlfile='控制文件路径' scope=spfile;
alter system set lock_name_space=orcl  scope=spfile;

重建控制文件:

SQL>startup nomount;
SQL>create controlfile reuse database "orcl" noresetlogs archivelog
maxlogfiles 5
maxlogmembers 3
maxdatafiles 100
maxinstances 1
maxloghistory 1134

logfile
group 3 '/data/app/oracle/oradata/orcl/redo03.log' size 10m,
group 4 '/data/app/oracle/oradata/orcl/redo04.log' size 10m,
group 5 '/data/app/oracle/oradata/orcl/redo05.log' size 10m

datafile
'/data/app/oracle/oradata/orcl/system01.dbf',
'/data/app/oracle/oradata/orcl/undotbs01.dbf',
'/data/app/oracle/oradata/orcl/sysaux01.dbf'
character set zhs16gbk;

OPEN状态

首先会检查数据文件头中检查点计数与控制文件中检查点计数是否一致。其次检查数据文件头的开始SCN和控制文件中记录该文件的结束SCN是否一致,如果控制文件中结束的SCN等于数据文件头中开始的SCN,说明不需要恢复。

SQL>show parameter backgroud_dump_dest;

如果数据库中的某个文件丢失,那么在MOUNT阶段不会在前台显示告警日志,会记录在alter_.log中。

oracle的启动和关闭

一、sql*plus方式:

用sql*plus来连接到Oracle

Sqlplus /nolog 是以不连接数据库的方式启动sql*plus

Connect /as sysdba 是以DBA身份连接到oracle       

.  启动

Startup就可以启动了。

不过oracle启动模式有3种:

   l         Startup nomount  (nomount模式)启动实例不加载数据库。

   l         Startup mount (mount模式)启动实例加载数据库但不打开数据库

   l         Startup (open 模式)启动实例加载并打开数据库,就是我们上面所用的命令

Nomount模式中oracle仅为实例创建各种内存结构和服务进程,不会打开任何数据库文件,

所以说:

   1)  创建新数据库

   2)  重建控制文件

这2种操作都必须在这个模式下进行。

Mount模式中oracle只装载数据库但不打开数据库,所以说:

     1)     重命名数据文件

     2)     添加、删除和重命名重做日志文件

     3)     执行数据库完全恢复操作

     4)     改变数据库的归档模式

这4种操作都必须在这个模式下进行

Open模式(就是我们上面的startup不带任何参数的)正常启动。

当然这3种模式之间可以转换:

Alter database mount(nomount模式)—〉alter database open(mount 模式)—〉(open模式)

当然还有其它一些情况,在我们open模式下可以将数据库设置为非受限状态和受限状态

在受限状态下,只有DBA才能访问数据库,所以说:

1)  执行数据导入导出

2)  使用sql*loader提取外部数据

3)  需要暂时拒绝普通用户访问数据库

4)  进行数据库移植或者升级操作

这4种操作都必须在这个状态下进行

在打开数据库时使用startup restrict命令即进入受限状态。

使用alter system disable restricted session命令即可以将受限状态改变为非受限状态。

使用alter system enable restricted session命令可以将非受限状态变为受限状态                        

使用alter database open read only可以使数据库进入只读状态。

使用alter database open read write 可以使数据库进入读写状态。

当然在某些情况下可能是用上述各种启动方式都无法成功启动数据库,这个时候就要使用startup force命令来强行启动数据库。当然谁都不想碰到这种情况:)

c.关闭数据库
   1)正常关闭 shutdown
   2) 立即关闭 shutdown immediate
   3) 关闭事务 shutdown transactional
   4) 强行关闭 shutdown abort,当然谁都不想碰到这种情况。

二、OEM为例

Oracle Enterprise Management(OEM), 

跟第一小节讲的Sqlplus /nolog ,Connect /as sysdba 这2个命令差不多的操作如图:

按照上面的一步步操作就能够连接到数据库。

下面是如何启动和关闭数据库:

点击我们前几章创建的ORADB01这个数据库树中的配置选项,这个里面的:

1)已启动 对应 Nomount模式

2)已转载 对应 mount模式

3)打开   对应 open模式

Imagine By Magic Studio
Imagine By Magic Studio

AI图片生成器,用文字制作图片

下载

当你点击应有按钮之后就会进入如下对话框

1)正常 对应 正常关闭 shutdown

2) 立即 对应 立即关闭 shutdown immediate

3) 事务处理 对应 关闭事务 shutdown transactional

4) 中止 对应 强行关闭 shutdown abort

确定之后出现如下对话框

限制对数据库访问 对应 alter system disable restricted session

alter system enable restricted session

只读模式 对应  alter database open read only

alter database open read write

简单吧,sql*plus的一大堆命令到OEM中变成了几个按钮罢了。

 3.windows控制台

这个熟悉吧:
oracle ***********Agent 用于OEM管理结构
oracle************HTTPSERVER  oracle Web服务器
oracle ***********ManagementServer 用于OEM管理结构
oracle ***********TNSListener oracle网络结构的服务器端进程
oracle ***********OEMREP 资料档案库文件
oracle ***********ORADB001 用户创建的数据库
我一般都把所有的服务全部选成手动启动,如果全开,内存要用掉700M..............

提示:建议关闭数据库服务前先shutdown,否则可能会丢失数据。

如果是windows系统,关系不大,会自动提交未提交的DML。但是在unix或者linux系统的话,最好先shutdown immediate,在检查一下是否还有oracle进程,最后在关闭服务器。

Oracle启动的整个过程

1.启动选项

在发出startup命令启动数据库时,oracle将在默认位置$ORACLE_HOME/dbs(UNIX/Linux)中查找初始化参数文件。Oracle将以下面的顺序在其中寻找合适的初始化文件:

Spfile$ORACLE_SID.ora

Spfile.ora

Init$ORACLE_SID.ora

可以用几种方式启动oracle数据库。不同方式启动将影响启动数据库的程度。启动状态由nomount(数据库未装载)——>mount(数据库完成装载)——>open(数据库打开)

1.1 STARTUP NOMOUNT命令

SQL> startup nomount;ORACLE instance started.

Total System Global Area  167387136 bytes
Fixed Size                  1343668 bytes
Variable Size             150998860 bytes
Database Buffers           12582912 bytes
Redo Buffers                2461696 bytes

--Oracle读参数文件(里面有控制文件目录),打开实例,启动Oracle后台进程,给Oracle分配SGA。此时数据库状态为未装载。

可以在SQL*Plus会话中使用STARTUP NOMOUNT命令启动实例,这样启动仅有实例运行。如果以这种方式启动,将不读控制文件,而且数据文件也不打开。操作系统启动Oracle后台进程,并且给oracle分配SGA。事实上,只有实例本身在运行。

1.2 STARTUP MOUNT命令

SQL> startup mount;ORACLE instance started.

Total System Global Area  167387136 bytes
Fixed Size                  1343668 bytes
Variable Size             150998860 bytes
Database Buffers           12582912 bytes
Redo Buffers                2461696 bytesDatabase mounted.

--Oracle 打开并读取控制文件(里面有数据文件和日志文件的目录),获取数据文件和重做日志文件的名称和位置。此时数据库完成装载。

在启动过程中,oracle把实例与数据库关联。Oracle打开并读取控制文件,获取数据文件和重做日志文件的名称和位置。在进行诸如全数据库恢复、更改数据库的归档日志模式或重命名数据文件这一类的活动时,通常需要以安装模式启动数据库。请注意,这三种操作都要求oracle访问数据文件,但不提供对文件的用户操作。

1.3 STARTUP [OPEN]命令

SQL> startup openORACLE instance started.

Total System Global Area  167387136 bytes
Fixed Size                  1343668 bytes
Variable Size             150998860 bytes
Database Buffers           12582912 bytes
Redo Buffers                2461696 bytesDatabase mounted.
Database opened.

--Oracle打开数据文件和重做日志文件,才能对外(所有有效用户)提供数据库服务。

启动过程的最后一步是打开数据库。当数据库以打开模式启动时,所有有效用户可以连接到数据库,执行数据库操作。在此步骤之前,一般用户根本就不能连接到数据库。通过发布下面的命令让数据库出于打开模式。

Oracle  的启动需要经历四个状态,SHUTDOWN 、NOMOUNT 、MOUNT 、OPEN。

SHUTDOWN状态                                    

第一状态没什么好解释的,oracle的所有文件都静静的躺在磁盘里,一切都还未开始,属于关机状态

NOMOUNT状态                            

Starting the instance (nomount)
*  Reading the initialization file from $ORACLE_HOME/dbs in the following order:
-first  spfileSID.ora
-if not found then, spfile.ora
-if not found then, initSID.ora
Specifying the PFILE parameter with STARTUP overrides the default behavior.
*  Allocating the SGA
*  Starting the background processes 
*  Opening the alertSID.log file and the trace files
The  database must be named with the DB_NAME parameter either in the initialization 
Parameter file or in the STARTUP command.
-----------------------------------------------------------------------
* 读取环境变量下dbs目录下的参数文件(spfile/pfile)
 [ora10@localhost dbs]$ pwd
/ora10/product/10.2.0/db_1/dbs
[ora10@localhost dbs]$ ll
-rw-r----- 1 ora10 dba  3584 07-19 22:07 spfilechongshi.ora
-rw-r----- 1 ora10 dba  3584 07-23 22:00 spfile.ora
-rw-r--r-- 1 ora10 dba  1106 07-19 21:47 initchongshi.ora

查找参数文件的顺序如上面列表的,读取优先级

spfilechongshi.ora > spfile.ora>initchongshi.ora  

如果三个文件都找不到的话,那么将启动失败。

* 启动算法,分配内存

* 启动后台进程

* 开放alertSID.log文件和跟踪文件

[ora10@localhost dbs]$ sqlplus 
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jul 24 22:33:54 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Enter user-name: /as sysdba
Connected to an idle instance.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area  205520896 bytes
Fixed Size                  1218532 bytes
Variable Size              79693852 bytes 
Database Buffers          121634816 bytes 
Redo Buffers                2973696 bytes

现在就处在一个nomount状态。

 mount状态                                                  

Mounting a database includes the following tasks: 
* Associating a database with  a previously started instance 
* Locating and opening the control files specified in the parameter file 
* Reading the control files to obtain the names and status of the data files and online redo log files.However,no checks are performed to verify the existence of the data files and online redo log files at this time. 
---------------------------------------------------------------------------------

* 把一个数据库和启动的实例关联起来 

在参数文件(spfile/pfile)中找到控制文件进行读取 

查看参数文件: 

[ora10@localhost dbs]$ strings spfileora10.ora | more 
......
*.control_files='/ora10/product/oradata/ora10/control01.ctl','/ora10/product/ora 
data/ora10/control02.ctl','/ora10/product/oradata/ora10/control03.ctl' 
.......

控制文件: 

[ora10@localhost ~]$ cd /ora10/product/oradata/ora10/ 
[ora10@localhost ora10]$ ll 
总计 954196 
-rw-r----- 1 ora10 dba   7061504 07-23 23:01 control01.ctl 
-rw-r----- 1 ora10 dba   7061504 07-23 23:01 control02.ctl 
-rw-r----- 1 ora10 dba   7061504 07-23 23:01 control03.ctl

* 读取控制文件,获得的数据文件和联机重做日志文件,然而,在这个时候没有进行检查以验证存在的数据文件和联机重做日志文件 

[ora10@localhost dbs]$ sqlplus 
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jul 24 23:02:28 2012 
Copyright (c) 1982, 2005, Oracle.  All rights reserved. 
Enter user-name: /as sysdba 
Connected to an idle instance. 
SQL> startup mount; 
ORACLE instance started. 
Total System Global Area  205520896 bytes 
Fixed Size                  1218532 bytes 
Variable Size              79693852 bytes 
Database Buffers          121634816 bytes 
Redo Buffers                2973696 bytes 
Database mounted.

现在进入了数据库的mount状态,我们通过mount启动的时候,下面会多一句提示“Database mounted.” 数据库准备就绪。

open状态                                                 

opening the database includes the following tasks 
opening the online data log files 
opening the onling redo log files 
   If any of the datafiles or noline redo log files are not present when you attempt to open the database ,the oracle server returns an error.   During this final stage,the oracle server verfies that all the data files and online redo log files can be opened and checks the consistency of the database . If necessary , the SMON  background process initiates instance recovery.
-----------------------------------------------------------------------------------------

打开数据库包括下列任务: 

打开在线数据日志文件 

打开联机重做日志文件 

    如果任何数据文件或非线性重做日志文件不存在,当您试图打开的数据库,服务器返回错误。 

在这最后阶段,该服务器验证所有数据文件和联机重做日志文件可以打开并检查数据库的一致性。如果需要,该系统监控进程开始实例恢复。

[ora10@localhost dbs]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jul 25 21:50:55 2012
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
  
Total System Global Area  205520896 bytes
Fixed Size                  1218532 bytes
Variable Size              79693852 bytes
Database Buffers          121634816 bytes
Redo Buffers                2973696 bytes
Database mounted.
  
Database opened.

   在上面的命令中,startup后面不加其它信息的话,系统会为我们直接启动到第4个状态。

数据库关闭的三种方式                                          

1、shutdown normal  
正常方式关闭数据库。 

发出该命令后,任何新的连接都将再不允许连接到数据库。在数据库关闭之前,Oracle将等待目前连接的所有用户都从数据库中退出后才开始关闭数据库。采 用这种方式关闭数据库,在下一次启动时不需要进行任何的实例恢复。但需要注意一点的是,采用这种方式,也许关闭一个数据库需要几天时间,也许更长。


2、shutdown immediate  
立即方式关闭数据库。  
在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,  
而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),  
当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。 

这是我们常用的一种关闭数据库的方式,想很快地关闭数据库,但又想让数据库干净的关闭,常采用这种方式。 
当前正在被Oracle处理的SQL语句立即中断,系统中任何没有提交的事务全部回滚。如果系统中存在一个很长的未提交的事务,采用这种方式关闭数据 库也需要一段时间(该事务回滚时间)。系统不等待连接到数据库的所有用户退出系统,强行回滚当前所有的活动事务,然后断开所有的连接用户。
3、shutdown abort  
直接关闭数据库,正在访问数据库的会话会被突然终止,  (相当于直接关闭后台实例服务进程)
如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。

4、在Windows中shutdown之后需重启后台实例服务进程,否则会报ora-12514错误。重启实例服务后数据库自动执行了startup至open状态。

推荐教程:《Oracle视频教程

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 4.3万人学习

Java 教程
Java 教程

共578课时 | 81万人学习

oracle知识库
oracle知识库

共0课时 | 0.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号