第五章 熟悉SQL*Plus—Oracle数据库环境

5.2.2 保存命令
  1. SAVE命令
    格式:save file_name
    使用save命令可以直接将缓冲区的SQL语句保存到当前路径或指定路径下指定的文件中,扩展名是.SQL,说明是一个SQL查询文件。
  2. INPUT命令
    可以将input和save命令结合使用,使用input命令将SQL*Plus命令输入到缓冲区中,然后可以使用save命令保存到文件中
  3. EDIT命令
    可以直接使用edit命令创建文件
5.2.3 加入注释
  1. 使用REMARK命令
    使用remake命令在一个命令文件的一行加上注释,
remake creatreport.sql
  1. 使用
/* only female*/
where sex = 'temale'
  1. 使用–
--清除屏幕
clear screen
5.2.4 运行命令
  1. 命令行方式
    在命令后面加分号(;)作为终止符来运行SQL命令的方式。
  2. SQL缓冲区方式
    SQL*Plus提供了RUN命令和斜杆(/)命令来以缓冲区方式执行SQL命令。其中,run命令的格式为:
R[un]
  • run命令:列出并执行当前存储在缓冲区中的SQL命令或PL/SQL块,它可以显示缓冲区的命令并返回查询结果,并使缓冲区中的最后一行成为当前行。
  • 斜杠(/)命令:类似于run命令,它执行存储在缓冲区的SQL命令或PL/SQL块,但是不显示缓冲区内容,也不会是缓冲区的最后一行成为当前行。
  1. 命令文件方式
    以命令文件方式运行一个SQL命令或SQL*Plus命令或PL/SQL块,有两种方式:state命令和@命令。其中,state命令的格式为:
statq file_name[.sql][arg1 arg2]
5.2.5 编写交互命令
  1. 定义用户变量
define newstu = zhangsan;
  1. 在命令中代替值
    替代变量是在用户变量前加入一个或两个&符号的变量。当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;
  1. 使用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] ...
  1. arraysize
    用于设置从数据库中一次提取的行数,默认值为15。
show arraysize
arraysize 15
  1. 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
  1. colsep
    用于设置在选定列之间的分隔符,默认为空格。
  2. 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语句将以正常方式关闭数据库。
    步骤:
  1. 阻止任何用户建立新的连接
  2. 等待当前所有正在连接的用户主动断开连接。正在连接的用户能够继续他们当前的工作,甚至能够提交新的事物。
  3. 一旦所有的用户都断开连接,才能进行关闭 、卸载数据库,并终止例程。
  • TRANSACTINONAL(事务处理)选项
    Oracle将等待所有当前未提交的事务完成后再关闭数据库。
    Oracle将执行如下操作:
  • 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事物
  • 等待所有当前未提交的活动事物提交完毕,然后立即断开用户的连接
  • 一旦所有的用户都断开连接,才进行关闭、卸载数据库,并终止例程。
  • IMMEDIATE(立即)选项
    在尽可能短的时间内关闭数据库
    在如下几种情况需要IMMEDIATE选项来关闭数据库
  • 即将发生电力中断
  • 即将启动自动数据备份操作
  • 数据库本身或耨个数据库应用程序发生异常,并且这时无法通知用户主动断开连接,或用户根本无法执行断开操作。

用IMMEDIATE选项关闭数据库时,Oracle将执行如下操作:

  • 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事物
  • 任何的当前未提交的事物均被回退
  • Oracle不再等待用户主动断开连接,而是直接关闭、卸载数据库,并终止例程。
  • 以上三种都不行,用ABORT选项来关闭Oracles数据库
    以下几种情况,使用ABORT选项
  • 数据库本身或某个数据库应用程序发生异常,并且使用其它选项均无效时。
  • 出现紧急情况,需要立即关闭数据库(停电)
  • 启动数据库例程的过程中产生错误

Oracle将执行如下操作:

  • 阻止任何用户建立新的连接,同时组织当前连接的用户开始任何新的事物
  • 立即结束当前正在执行的SQL语句
  • 任何未提交的事物均不被回退
  • 立即断开所有用户的连接,关闭、卸载数据库,并终止例程。