数据库的启动与关闭(startup和shutdown)以及开机自启
一、启动数据库实例
数据库有四个状态,①shutdown;②nomount;③mount;④open
select open_mode from v$database; //查看数据库的状态 //NOMOUNTED状态,shutdown、nomount阶段不可以使用该条sql;MOUNT状态;READ WRITE 是open阶段。 select instance_name,status from v$instance; //也可以通过v$instance查看实例状态
启动数据库从状态①开始
1、nomount阶段
从①shutdown状态到达②nomount状态使用startup nomount,这个阶段读取spfile/pfile文件中的参数,启动数据库实例。
从②状态到达③mount状态使用alter database mount;
从②状态到达④open状态使用 alter database mount; alter database open;
不可直接从③mount或④open状态直接到②nomount状态,要先经过shutdown关闭数据库,再startup nomount;
查看v$database会出现错误,但是从v$instance看出实例处于started状态
2、mount阶段
从①shutdown状态到达③mount状态使用startup mount,会自动启动nomount,这个阶段读取控制文件,验证控制文件;这个阶段数据库的基本结构都能查询了,但是不能查询用户表的内容;
从③mount状态到④open状态使用alter database open;不可直接从④open状态到②nomount状态或③mount状态,要先经过shutdown关闭数据库,重新开始
不可以查询user_users表。
3、open阶段
从①shutdown状态到达④open状态使用startup open,这个阶段打开数据文件和联机重做日志文件
可以查询user_users表。
二、关闭数据库实例
数据库实例关闭顺序是closed->dismounted->shut down
数据库关闭方式有四种①abort;②immediate;③transaction;④normal
abort模拟突然断电,内存被清空,没有检查点,没有写入数据文件(第四个NO);事务被中断(第三个NO),没有提交也没有回滚;会话被中断(第二个NO),当前会话界面关闭;不允许连接(第一个NO)。
immediate强制中断正在运行的事务,有检查点,写入数据文件(第四个YES);事务被中断(第三个NO),回滚;会话被中断(第二个NO),当前会话界面关闭;不允许连接(第一个NO)。
transactional等待正在运行的事务,有检查点,写入数据文件(第四个YES);等待事务结束(第三个YES),一直等到提交和回滚;等事务主动结束后,强行中断结束当前会话结束(第二个NO);不允许连接(第一个NO)。
normal等事务主动提交或回滚,等用户主动断开连接,有检查点,写入数据文件(第四个YES);等待事务结束(第三个YES);等用户主动断开连接结束当前会话(第二个YES);不允许连接(第一个NO)。
startup force=shutdown abort+startup;
三、设置数据库服务的开机自启
1、配置/etc/oratab文件,将后面的N改成Y,这里只设置chenmu开机重启,orclcdb和MDM19c没有设置开机重启。实例名和数据库名不一定要一样,实例名和存储结构、后台进程相关,实例名区分大小写;数据库名和物理文件存储路径相关。
2、修改$ORACLE_HOME/bin/dbstart,将ORACLE_HOME_LISTNER=$1改为ORACLE_HOME_LISTNER=$ORACLE_HOME
3、配置/etc/rc.d/rc.local文件,将监听和数据库启动设置成开机启动,以root用户身份修改
-lc是切换用户时也切换目录,c表示执行指令后恢复原来的身份
#####oracle auto start########## su - oracle -lc "/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start" su - oracle -lc "/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart"
4、测试。将数据库关闭后重启服务器
shutdown immediate; //关闭chenmu、orclcdb、mdm19c三个实例 reboot; //重启服务器,要到root用户下才能重启