第五章 熟悉SQL*Plus—Oracle数据库环境
5.2.2 保存命令
- SAVE命令
格式:save file_name
使用save命令可以直接将缓冲区的SQL语句保存到当前路径或指定路径下指定的文件中,扩展名是.SQL,说明是一个SQL查询文件。 - INPUT命令
可以将input和save命令结合使用,使用input命令将SQL*Plus命令输入到缓冲区中,然后可以使用save命令保存到文件中 - EDIT命令
可以直接使用edit命令创建文件
5.2.3 加入注释
- 使用REMARK命令
使用remake命令在一个命令文件的一行加上注释,
remake creatreport.sql
- 使用
/* only female*/
where sex = 'temale'
- 使用–
--清除屏幕
clear screen
5.2.4 运行命令
- 命令行方式
在命令后面加分号(;)作为终止符来运行SQL命令的方式。 - SQL缓冲区方式
SQL*Plus提供了RUN命令和斜杆(/)命令来以缓冲区方式执行SQL命令。其中,run命令的格式为:
R[un]
- run命令:列出并执行当前存储在缓冲区中的SQL命令或PL/SQL块,它可以显示缓冲区的命令并返回查询结果,并使缓冲区中的最后一行成为当前行。
- 斜杠(/)命令:类似于run命令,它执行存储在缓冲区的SQL命令或PL/SQL块,但是不显示缓冲区内容,也不会是缓冲区的最后一行成为当前行。
- 命令文件方式
以命令文件方式运行一个SQL命令或SQL*Plus命令或PL/SQL块,有两种方式:state命令和@命令。其中,state命令的格式为:
statq file_name[.sql][arg1 arg2]
5.2.5 编写交互命令
- 定义用户变量
define newstu = zhangsan;
- 在命令中代替值
替代变量是在用户变量前加入一个或两个&符号的变量。当SQL*Plus晕倒一个替代变量是,执行命令,好像它包含替代变量的值一样。
变量sortcol包含值tea_id,变量mytable包含值tea_view,则
select &sortcol, salary
from &mytable
where salary > 15000;
等价于
select tea_id, salary
from tea_view
where salary > 15000;
- 使用start命令提供值
在编写SQL*Plus命令时,可以使用start命令将命令文件的参数值传递给替代变量这时需要将&符号值域命令文件数字面前,替换替代变量。当每次运行该命令文件时,start使用第一个值替换&1,使用第二个值替换&2,以此类推。
select * from tea_view
where tea_id = '&1'
and salary = '&2'
执行如下的start命令
start myfile pu_cleark 2000
--使用pu_cleark替换&1,用2000替换&2。
5.3 设置SQL*Plus环境
5.3.1 show命令
显示当前SQL*Plus环境中的系统变量,还可以显示错误信息、初始化参数、当前用户等信息。该命令的格式:
sho[w] option
5.3.2 set命令
set命令用于设置系统变量的值
set system_variablel valuel [system_variable value2] ...
- arraysize
用于设置从数据库中一次提取的行数,默认值为15。
show arraysize
arraysize 15
- autocommit
用于在执行DML语句时设置是否自动提交,默认值为off。当设置为on并设置n时,表示成功执行n条SQL语句或PL/SQL块后自动提交。
SQL> show arraysize
arraysize 15
SQL> show autocommit
autocommit OFF
SQL> set autocommit 5
SQL> show autocommit
AUTOCOMMIT ON for every 5 DML statements
- colsep
用于设置在选定列之间的分隔符,默认为空格。 - echo
在用start命令执行一个脚本文件时,echo命令用于控制是否显示脚本文件中正在执行的SQL语句。默认值为off。
第六章 Oracle的基本操作
6.1 Oracle的启动与关闭
6.1.1 启动Oracle数据库
- 每个启动的数据库至少对应有一个例程,例程是Oracle用来管理数据库的一个实体。
- 在服务器中,例程是由一组逻辑内存结构和一系列后台服务进程组成的。
- 启动Oracle数据库需执行三个操作步骤
- 启动例程
- 装载数据库
- 打开数据库
1. 一般启动
(1)启动例程
当启动例程时,这些内存结构和服务进程得到分配、初始化和启动。但是,此时的例程还没有与一个确定的数据库相联系,或者说数据库是否存在对例程的启动并没有影响,即没有装载数据库。
启动例程包括执行如下几个任务:
- 读取初始化参数文件,默认时读取spfile服务器参数文件,或读取由pfile选项指定的文件参数文本。
- 根据该初始化参数文件中有关SCA区、PGA区的参数及其设置值,在内存中共分配相应的空间。
- 根据该初始参数文件中有关后台进程的参数及其设置值,启动相应的后台进程。
- 打开跟踪文件、预警文件。
如果使用startup nomount命令启动例程(但不打开控制文件,也不装载数据库)。通常,使用数据库的这种状态来创建一个新的数据库,或创建一个新的控制文件。
(2)装载数据库
装载数据库是,例程将打开数据库的控制文件,根据初始化参数control_files的设置,找到控制文件,并从中获取数据库物理文件(即数据文件、重做日志文件)的位置和名称等关于数据库物理结构的信息,为下一步打开数据库做好准备。
在装载阶段,例程并不会打开数据库的物理文件,所以数据库仍然处于关闭状态,仅数据库管理权可以通过部分命令修改数据库,用户无法与数据库建立连接或会话,因此无法使用数据库。如果控制文件损坏或是不存在,例程将无法加载数据库。
在执行下列任务时,需要数据库处于装载状态,但无须打开数据库:
- 重新命名、增加、删除数据文件和重做日志文件。
- 执行数据库的完全恢复。
- 改变数据库的归档模式。
使用startup mount命令启动例程并装载数据库。
(3)打开数据库
在启动数据库的过程中,文件的的使用顺序是参数文件、控制文件、数据文件和重做日志文件,只有这些文件都被正常读取和使用后,数据库才完全启动,用户才能使用数据库。
2. Windows服务窗口启动
3. SQL*Plus启动
数据库有3种启动模式,可以分别代表数据库的3个步骤。当数据库管理员使用startup命令时,可以指定不同的选项来决定数据库的启动推进到那个启动模式。在进入某个模式后,可以使用alterdatabase命令来将数据库提升到更高的启动模式,但不能使数据库降低到前面的启动模式。
启动模式 | 说明 | SQL*Plus中提示信息 |
NOMOUNT | 启动例程,不装载数据库 | Oracle例程已经启动 |
MOUNT | 启动例程、装载数据库、不打开数据库 | Oracle例程已经启动,数据库装载完毕 |
OPEN | 启动例程、装载数据库并打开数据库 | Oracle例程已经启动,数据库装载完毕,数据库已经打开 |
- NOMOUNT模式:启动例程,但不装载数据库,即只完成启动步骤的第一步,
提示:Oracle例程已经启动 - MOUNT模式:启动例程、装载数据库,但不打开数据库,即只完成启动步骤的第一步和第二步,
提示:Oracle例程已经启动,数据库装载完毕 - OPEN模式:启动例程、装载数据库、打开数据库,即完成全部的3个启动步骤
提示:Oracle例程已经启动,数据库装载完毕,数据库已经打开。 - 启动数据库的语法如下:
startup [NOMOUNT|MOUNT|OPEN|FORCE] [RESTRICT][PFILE = 'pfile_name'];
- NOMOUNT选项
startup nomount
结果没有权限,待解决
如果要执行下列维护工作,就必须用NOMOUNT选项启动数据库
- 运行一个创建数据库的脚本
- 重建控制文件
- MOUNT选项
Oracle读取控制文件,并从中获取数据库名称、数据文件的位置和名称等关于数据库物理结构的信息,为下一步打开数据库做好准备。
如果要执行下列维护工作,就必须用MOUNT选项启动数据库
- 重新命名、增加、删除数据库和重做日志文件
- 执行数据库的完全恢复
- 改变数据库的归档模式。
- OPEN选项
- FORCE选项
force选项首先异常关闭数据库,然后重新启动它,而不需要事先用SHUTDOWN语句关闭数据库。 - RESTRICT选项
- 用restrict选项启动数据库时,会将数据库启动到open模式,但此时只有拥有restricted session权限的用户才能访问数据库。
- 如果需要在数据库处于open模式下维护任务,又要保证此时其他用户不能在数据库上建立连接和执行任务,则需要使用restrict选项来打开数据库,以便完成如下任务:
- 执行数据库数据的导出和导入操作
- 执行数据装载操作(用SQL*Loader)
- 暂时阻止一般的用户使用数据
- 进行数据库迁移或升级
- RFILE选项
4. OEM控制台启动
6.1.2 关闭Oracle数据库
当执行数据库的定期冷备份、数据库软件的升级时,常需要关闭数据库。
- 关闭数据库
关闭数据库时,Oracle将重做日志高速缓存中的内容写入重做日志文件,并将数据库高速缓存中被改动过的数据写入数据文件,在数据文件中执行一个检查点,即记录下数据库关闭的时间,然后再关闭所有的数据文件和重做日志文件。这时数据库的控制文件仍然处于打开状态,但是由于数据库已经处于关闭状态,所以用户将无法访问数据库。 - 卸载数据库
- 终止数据库
1. 在OEM中关闭
2. 关闭服务
3. SQL*Plus关闭
SQL*Plus关闭数据库的语法如下
shutdown [normal|transactional|immediate|abort];
normal(正常)选项
- normal(正常)选项
对关闭数据库的时间没有限制
shutdown和shutdown normal作用相同。
使用带有normal选项的shutdown语句将以正常方式关闭数据库。
步骤:
- 阻止任何用户建立新的连接
- 等待当前所有正在连接的用户主动断开连接。正在连接的用户能够继续他们当前的工作,甚至能够提交新的事物。
- 一旦所有的用户都断开连接,才能进行关闭 、卸载数据库,并终止例程。
- TRANSACTINONAL(事务处理)选项
Oracle将等待所有当前未提交的事务完成后再关闭数据库。
Oracle将执行如下操作:
- 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事物
- 等待所有当前未提交的活动事物提交完毕,然后立即断开用户的连接
- 一旦所有的用户都断开连接,才进行关闭、卸载数据库,并终止例程。
- IMMEDIATE(立即)选项
在尽可能短的时间内关闭数据库
在如下几种情况需要IMMEDIATE选项来关闭数据库
- 即将发生电力中断
- 即将启动自动数据备份操作
- 数据库本身或耨个数据库应用程序发生异常,并且这时无法通知用户主动断开连接,或用户根本无法执行断开操作。
用IMMEDIATE选项关闭数据库时,Oracle将执行如下操作:
- 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事物
- 任何的当前未提交的事物均被回退
- Oracle不再等待用户主动断开连接,而是直接关闭、卸载数据库,并终止例程。
- 以上三种都不行,用ABORT选项来关闭Oracles数据库
以下几种情况,使用ABORT选项
- 数据库本身或某个数据库应用程序发生异常,并且使用其它选项均无效时。
- 出现紧急情况,需要立即关闭数据库(停电)
- 启动数据库例程的过程中产生错误
Oracle将执行如下操作:
- 阻止任何用户建立新的连接,同时组织当前连接的用户开始任何新的事物
- 立即结束当前正在执行的SQL语句
- 任何未提交的事物均不被回退
- 立即断开所有用户的连接,关闭、卸载数据库,并终止例程。