1. spool命令用法
SPOOL是SQLPLUS的命令,不是SQL语法里面的东西。
spool常用的设置
set colsep ' ||'; //设置域输出分隔符为||,可换为自己喜欢的分隔符
set echo off; //显示start启动的脚本中的每个sql命令,缺省为on
set feedback off; //回显本次sql命令处理的记录条数,缺省为on
set heading off; //输出域标题,缺省为on
set pagesize 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。
set termout off; //显示脚本中的命令的执行结果,缺省为on
set trimout on; //去除标准输出每行的拖尾空格,缺省为off
set trimspool on; //去除重定向(spool)输出每行的拖尾空格,缺省为off
set linesize n; //设置数据行长度为n
例如:sql> conn system/sys as sysdba;
sql> spool c:\param;
sql> show parameter;
sql> spool off
执行完将在c盘新建param.lst的文件,里面内容就是数据库参数设置
2. 启动数据库: startup命令启动数据库有4种模式:
startup [force] [restrict] [pfile=文件名]
[open [RECOVER] [database]
|unmount
|mount]
A.NoMount 模式(启动实例不加载数据库)
命令:startup nomount
讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,打开报警文件和追踪文件,不会打开任何数据文件。在NoMount模式下,只能访问那些与SGA区相关的数据字典视图,包括V$PARAMETER、V$SGA、V$PROCESS 和 V$SESSION等,这些视图中的信息都是从SGA区中获取的,与数据库无关。
模式用途:
(1)创建新数据库;
(2)重建控制文件。
B.Mount模式(加载数据库但不打开数据库)
命令:startup mount
讲解:这种启动模式将为实例加载数据库,但保持数据库为关闭状态。因为加载数据库时需要打开数据库控制文件,但数据文件和重做日志文件都都无法进行读写,所以用户还无法对数据库进行操作。 在Mount模式下,只能访问那些与控制文件相关的数据字典视图,包括V$THREAD、V$CONTROLFILE、V$DATABASE、V$DATAFILE 和 V$LOGFILE等,这些视图都是从控制文件中获取的。
模式用途:
(1)重命名数据文件;
(2)添加、删除或重命名重做日志文件;
(3)执行数据库完全恢复操作;
(4)改变数据库的归档模式。
C.Open模式(正常打开数据库)
命令:startup [open]
讲解:正常按启动实例-->加载数据库-->打开数据库3个步骤启动数据库。
模式用途:平时不对数据库做什么维护,像只做应用开发,用这个模式就好了。
D.强制启动模式
命令:startup force
用途&讲解:在某些情况下,使用前面的各种模式都无法成功启动数据库时,可以尝试强制启动模式。
E.限制模式
命令:startup restrict
使用Alter Database语句,还可以在各启动模式间切换。并且,还可以对数据库设置不同的状态用于不同的操作,如受/非受限抽状态、只读。只读状态主要为待机(standby)数据库设计。
从NoMount模式切换到Mount模式(没有从mount切换到nomount的): ALTER DATABASE MOUNT;
从Mount模式切换到Open模式: ALTER DATABASE OPEN;
当数据库状态为关闭时,切换到Open模式: ALTER DATABASE OPEN;
在OPEN模式下将数据库状态置为只读: ALTER DATABASE OPEN READ ONLY;
从只读状态恢复读写状态: ALTER DATABASE READ WRITE;
将运行数据库置为限制模式:ALTER SYSTEM ENABLE RESTRICTED SESSSION;
关闭数据库与实例
与数据库启动一下,关闭数据库与实例也分为3步:关闭数据库-->实例卸载数据库--->终止实例。
a .Nomal(正常关闭方式)
命令:shutdown nomal
讲解:正常方式关闭数据时,Oracle执行如下操作:
(1)阻止任何用户建立新的连接。
(2)等待当前所有正在连接的用户主动断开连接(此方式下Oracle不会立即断掉当前用户的连接,这些用户仍然操作相关的操作)
(3)一旦所有的用户都断开连接,则立即关闭、卸载数据库,并终止实例。(所以,一般以正常方式关闭数据库时,应该通知所有在线的用户尽快断开连接)
b.Immediate(立即关闭方式)
命令:shutdown immediate
讲解:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)Oracle不等待在线用户主动断开连接,强制终止用户的当前事务,将任何未提交的事务回退。(如果存在太多未提交的事务,此方式将会耗费很长时间终止和回退事务)
(3)直接关闭、卸载数据库,并终止实例。
c.Transactional(事务关闭方式)
命令:shutdown transactional
讲解:这种方式介于正常关闭方式跟立即关闭方式之间,响应时间会比较快,处理也将比较得当。执行过程如下:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)等待所有未提交的活动事务提交完毕,然后立即断开用户的连接。
(3)直接关闭、卸载数据库,并终止实例。
d.Abort(终止关闭方式)
命令:shutdown abort
讲解:这是比较粗暴的一种关闭方式,当前面3种方式都无法关闭时,可以尝试使用终止方式来关闭数据库。但是以这种方式关闭数据库将会丢失一部份数据信息,当重新启动实例并打开数据库时,后台进程SMON会执行实例恢复操作。一般情况下,应当尽量避免使用这种方式来关闭数据库。执行过程如下:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)立即终止当前正在执行的SQL语句。
(3)任何未提交的事务均不被退名。
(4)直接断开所有用户的连接,关闭、卸载数据库,并终止实例。