Oracle0816

第五章 熟悉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
    
  2. 使用

    /* only female*/
    where sex = 'temale'
    
  3. 使用–

    --清除屏幕
    clear screen
    
5.2.4 运行命令
  1. 命令行方式

    在命令后面加分号(;)作为终止符来运行SQL命令的方式。

  2. SQL缓冲区方式

    SQL*Plus提供了RUN命令和斜杆(/)命令来以缓冲区方式执行SQL命令。其中,run命令的格式为:

    R[un]
    
    • run命令:列出并执行当前存储在缓冲区中的SQL命令或PL/SQL块,它可以显示缓冲区的命令并返回查询结果,并使缓冲区中的最后一行成为当前行。
    • 斜杠(/)命令:类似于run命令,它执行存储在缓冲区的SQL命令或PL/SQL块,但是不显示缓冲区内容,也不会是缓冲区的最后一行成为当前行。
  3. 命令文件方式

    以命令文件方式运行一个SQL命令或SQL*Plus命令或PL/SQL块,有两种方式:state命令和@命令。其中,state命令的格式为:

    statq file_name[.sql][arg1 arg2]
    
5.2.5 编写交互命令
  1. 定义用户变量

    define newstu = zhangsan;
    
  2. 在命令中代替值

    替代变量是在用户变量前加入一个或两个&符号的变量。当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;
    
  3. 使用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
    
  2. 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
    
  3. colsep

    用于设置在选定列之间的分隔符,默认为空格。

  4. 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语句
    • 任何未提交的事物均不被回退
    • 立即断开所有用户的连接,关闭、卸载数据库,并终止例程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值