oracle启动的四个状态

1.oracle启动文件的优先顺序

1:spfileSID.ora

2:Default SPFILE -->spfile.ora
3: initSID.ora
4: DEFAULT PFILE-->

 

2.如何指定启动spfile文件

oracle只有启动pfile文件命令,如果想手动启动spfile文件。
可以通过以下设置:
在pfile文件中使用
spifle=$ORACLE_HOME/dbs/spfileabc.ora这个命令
ex: 有一个文件为:abc123.ora
在abc123.ora中有 有
spifle=$ORACLE_HOME/dbs/spfileabc.ora这个命令


然后我们启动时候使用:
startup pfile=$ORACLE_HOME/dbs/abc123.ora
这样oracle能够正常启动,启动时候会读取
pfile中的文件,因为:abc123.ora中有
spifle=$ORACLE_HOME/dbs/spfileabc.ora这个命令
所以还是启动spfile文件 即: spfileabc.ora


question: 谁能够启动oracle数据库:
如果你是操作系统的管理员,你能够启动和关闭数据库。
oracle是口令认证的,如果一个认证的用户具有了
SYSDBA,和 SYSOPER 权限 可以启动和关闭数据库。

3.oracle数据库的四种状态

 

shutdown状态: oracle数据库没有启动
NOMOUNT状态: SGA和后台进程已经启动
MOUNT状态: 通过参数读取了控制文件  ,拥有sysdba权限的可以进行一些数据的备份和恢复操作,其他用户还不能访问
OPEN状态; 其他用户正常访问

一.SHUTDOWN -->NOMOUNT   

一个数据库实例是开始:
首先从spfile或者pfile中读取数据库参数文件:
然后分配SGA和创建后台进程。
相当于生产线和工人都到位了
但是没有开始生产,生产线上没有产品。

这个时候一些参数可以查到了:
show parameter db_name;
show parameter db_block_size;

SQL> startup nomount
ORACLE 例程已经启动。
 
Total System Global Area  431038464 bytes
Fixed Size                  1333676 bytes
Variable Size             276825684 bytes
Database Buffers          146800640 bytes
Redo Buffers                6078464 bytes

一些参数查询:

SQL> show parameter db_name;
 
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_name                              string
orcl
 
SQL> show parameter db_block_size;
 
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_block_size                        integer
8192

二.NOMOUNT---->MOUNT

就相当于把 数据库和实例建立关系。
首先根据初始化参数文件中的CONTROL_FILE参数找到相应的控制文件然后打开它们。
在控制文件中包含了数据库的数据文件和redo log文件信息。


这个时候数据库还没有打开,仍然处于关闭状态,这个时候普通的用户还不能
连接到数据库,只有数据库管理员可以进行一些备份恢复等工作。

三.MOUNT ----> OPEN

通过控制文件信息找到 联机数据文件和redo log 文件,
如果没有以上两个文件,数据库就会报错。如果这两个文件坏了,
数据库无法打开,这个时候可以通过sysdba权限进入mount挂载状态后,对
这两个数据文件进行恢复操作后再打开数据库。

数据库从nomount变成 mount状态语句:
ALTER DATABASE db_name MOUNT

STARTUP命令官方解释

startup RESTRICT 对不同用户权限的用户连接到oracle上进行了限制,

ALTER SYSTEM ENABLE RESTRICTED SESSION;

这样 没有 RESTRICT权限的用户就无法连接进来了。

所有登录的session都是在V$session表中可以查询到。

select saddr,sid,serial#,username from v$session;
可以看到连接进来的用户。

alter system kill session  'SID,SERIAL#';

这样可以杀死远程连接进来的用户。

数据库还有一种READ-ONLY模式:
可以使用以下命令让数据库变成只读模式:
STARTUP MOUNT
ALTER DATABASE OPEN READ ONLY;

4.如何关闭数据库

A = ABORT 
I = IMMEDIATE
T = TRANSACTIONAL
N = NORMAL

如何关闭数据库:
关闭数据库有几个阶段:

 
1:close database:
首先把SGA中数据写到磁盘数据文件中,保持数据的完整性
然后,把联机的数据文件,一些datafiles和redo log文件都关闭掉。
但是控制文件依然是打开的,可以被管理员所使用。

2:Unmount database:
oracle把控制文件关闭掉,但是数据库实例 instance还是存在

3:shut down an instance
把对应的资源释放掉;

SHUTDOWN 命令有以下模式:

A = ABORT 
I = IMMEDIATE
T = TRANSACTIONAL
N = NORMAL

 

abort的时候会有脏数据,其他三个都不会有脏数据。
shutdown immediate 是用的比较多的,因为能够快速关闭数据库而且没有脏数据。

关于关闭数据库的补充:
SHUTDOWN NORMAL
SHUTDOWN TRANSACTIONAL
SHUTDOWN IMMEDIATE

这三种关闭数据的操作的步骤都要做如下操作:

1:把数据库的缓存写到数据文件中--> data files中
2:把没有提交的数据回滚掉
3:释放资源
所以以上三种关闭是 clean database 干净的关闭,
所以在下次数据库启动的时候,不需要数据库instance recovery

 

关于数据库的关闭可以做个实验。

对于一些关闭不掉的数据库的时候可以使用:
SHUTDOWN ABORT  或者 Instance Failure  或者 START FORCE
这三种情况成为 Inconsistent 数据库, 脏数据的数据库:

 

如果出现以上三种情况 :
修改的缓存不被写入到数据文件中 -->data files
没有提交的改变的数据不回滚

 

在关闭的时候:
联机redo log文件被用于重新改变。
Undo segments 被用于回滚没有提交的数据的改变,
释放资源.

 

本文转自:https://blog.csdn.net/topwqp/article/details/9079063

posted @ 2021-03-22 22:01  八戒不爱吃西瓜  阅读(144)  评论(0)    收藏  举报