Chinaunix首页 | 论坛 | 博客
  • 博客访问: 259660
  • 博文数量: 70
  • 博客积分: 2120
  • 博客等级: 大尉
  • 技术积分: 820
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 10:52
文章分类

全部博文(70)

文章存档

2012年(2)

2011年(53)

2010年(6)

2009年(1)

2008年(8)

我的朋友

分类: Oracle

2008-06-25 17:11:36

SQLPLUS 使用的一些技巧

在ORACLE的维护过程中,目前ORACLE有很多易用的客户端工具,如plsql、delveloer、TOAD,但作为数据库管理员也需要经常和SQLPLUS 打交道,一些常用的操作往往需要在SQLPLUS完成,如果SQLPLUS不熟悉也在很大程度上降低我们的维护效率,本文主要介绍一些在管理数据库过程中比较有用的的SQLPLUS技巧。

技巧一:修改SQLPLUS的提示符

1  问题描述:

ORACLE的SQLPLUS默认情况下是没有系统提示符的,由于在日常维护操作中经常要在SQLPLUS下做一些高危险的操作如shutdown之类的操作,如果操作的对象错误将导致设备事故。

2  解决办法:

通过修改SQLPLUS提示符号,可以明确地标识所要操作的数据库,避免操作错误;

3  处理过程:

SQLPLUS程序在启动情况下可以通过设置相关参数,让其执行login.sql,然后通过修改login.sql脚本可以定义一些语句,达到修改SQLPLUS的提示符的目的,便于识别,login.sql的文件路径需要通过操作系统环境变量SQLPATH进行设置:

WINDOWS环境下,通过修改注册表项目在SQLPATH(位置一般在ORACLE-HOME下)在注册表中,可以设置为D:\oracle\ora92\dbs

UNIX的可以直接在ORACLE用户的profile文件中加入SQLPATH环境变量,可以设置export SQLPATH=/home/oracle/app/oracle/product/9.2/dbs;具体的login.sql,如下所示,可以根据需要实际修改:

set serveroutput on size 1000000

column old_name new_value pname

set termout off

select lower(user) || ||instance_name old_name from v$INSTANCE;

set sqlprompt '&pname> '

set termout on

通过这样修改每次通过SQLPLUS登陆系统的时候会显示>更好地识别所要连接的数据库。注意:连接用户必须要有查看v$INSTANCE的权限。

技巧二:在SQLPLUS 下执行操作系统命令

在使用SQLPLUS的过程中,经常要执行一些操作系统方面的命令,可以通过两种方法:

1)在SQLPLUS命令行下执行host命令,可以切换到操作系统命令行下,执行完后exit可以切换回SQLPLUS命令行下。

2)直接在SQLPLUS 下执行敲一个”!”后面跟上具体的命令行(但在windows下不支持)。

技巧三:在SQLPLUS修改sql语句:

使用SQLPLUS的过程中也经常需要修改sql语句,但是SQLPLUS下的修改sql语句的命令过于烦琐不好记忆,可以通过定义相关变量达到很好的效果。

1)在UNIX 下可以定义define_editor=vi,如果需要修改sql语句,直接在命令行下用edit就可以进入vi环境,和vi操作功能一样,方便操作,设置办法直接在sqlplus的命令行下敲:
Define_editor=vi;

在windows下可以定义define_editor=notepad,如果需要修改sql语句,直接在命令行下用edit就可以进入notepad编写环境,windows下操作就方便多了;

技巧四:在SQLPLUS下查看sql语句的执行时间情况

1)可以通过直接在sqlplus命令行下执行命令set time on(打开sql语句的执行时间显示);

2)在sqlplus命令行下执行命令 set timing on(统计sql语句的执行时间);

技巧五:在sqlplus 下查看SQL语句的执行计划

在业务维护过程中,经常需要查看某个sql语句执行计划,看是否使用到合适的索引等,可以通过下操作来完成

set autotrace traceonly exp

select * from cncdlp114.t_unit where unitcode='hwjsgs';

set autotrace off

执行完成后可以看到语句的执行计划:

注意:执行操作前的前提该用户下有plan_table表(一般都有),如果没有可以通

过语句来建立

-- Create table
create table PLAN_TABLE
(
  STATEMENT_ID      VARCHAR2(30),
  PLAN_ID           NUMBER,
  TIMESTAMP         DATE,
  REMARKS           VARCHAR2(4000),
  OPERATION         VARCHAR2(30),
  OPTIONS           VARCHAR2(255),
  OBJECT_NODE       VARCHAR2(128),
  OBJECT_OWNER      VARCHAR2(30),
  OBJECT_NAME       VARCHAR2(30),
  OBJECT_ALIAS      VARCHAR2(65),
  OBJECT_INSTANCE   INTEGER,
  OBJECT_TYPE       VARCHAR2(30),
  OPTIMIZER         VARCHAR2(255),
  SEARCH_COLUMNS    NUMBER,
  ID                INTEGER,
  PARENT_ID         INTEGER,
  DEPTH             INTEGER,
  POSITION          INTEGER,
  COST              INTEGER,
  CARDINALITY       INTEGER,
  BYTES             INTEGER,
  OTHER_TAG         VARCHAR2(255),
  PARTITION_START   VARCHAR2(255),
  PARTITION_STOP    VARCHAR2(255),
  PARTITION_ID      INTEGER,
  OTHER             LONG,
  DISTRIBUTION      VARCHAR2(30),
  CPU_COST          INTEGER,
  IO_COST           INTEGER,
  TEMP_SPACE        INTEGER,
  ACCESS_PREDICATES VARCHAR2(4000),
  FILTER_PREDICATES VARCHAR2(4000),
  PROJECTION        VARCHAR2(4000),
  TIME              INTEGER,
  QBLOCK_NAME       VARCHAR2(30)
)

结束语:

其实ORACLE的SQLPLUS功能是很强大的,如果想研究其它的一些功能可以参考

ORACLE的相关文档,提高维护技能

阅读(1506) | 评论(0) | 转发(0) |
0

上一篇:在线添加表空间

下一篇:重建临时标空间

给主人留下些什么吧!~~