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
Keywords and Parameters
If you do not specify any options, then RMAN mounts and opens the database with the default server parameter file.
Syntax Element | Description |
---|---|
STARTUP | If you specify only STARTUP with no other options, then the instance starts, then mounts and open the database. |
DBA | Restricts access to users with the RESTRICTED SESSION privilege. |
FORCE | If the database is open, then FORCE shuts down the database with a SHUTDOWN ABORT statement before re-opening it.If the database is closed, then FORCE opens the database. |
MOUNT | Starts the instance, then mounts the database without opening it |
NOMOUNT | Starts the instance without mounting the database. If no parameter file exists, then RMAN starts the instance with a "dummy" parameter file. You can then run RESTORE SPFILE to restore a backup server parameter file. |
PFILE = 'filename' | Specifies the filename of the init.ora file for the target database. If this parameter is not specified, then the default init.ora filename is used. |
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:如何关闭数据库
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 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 被用于回滚没有提交的数据的改变,
释放资源.