sqlplus 配置方法及相關命令


sqlplus 配置方法及相關命令

1.配置文件

1.1 全局模式
什么叫全局模式呢:當我們配置完sqlplus工具加載配置文件后,無論在哪個目錄下登陸數據庫,您設置【sqlplus提示符樣子,在任何目錄下進入sqlplus工具都會加載此提示符樣子】的效果都可以呈現出來
1.glogin.sql 配置文件的位置
答:$ORACLE_HOME/sqlplus/admin/glogin.sql
     vim $ORACLE_HOME/sqlplus/admin/glogin.sql
2.添加的字符串,取默認變量
定位到這個文件的最后一行,回車另起一行的開頭添加如下字符串
set sqlprompt "_user‘@‘_connect_identifier> "
或者 set sqlprompt ‘_user@&_connect_identifier> ‘
含義:_user 代表當前登陸用戶名,_connect_identifier 代表當前數據庫連接串名,在glogin.sql中設置全局sqlplus提示符樣子user和connect identifier是sqlplus的默認變量
注:此時設置的是在所有目錄下登陸sqlplus工具都會生效,@替換成【¥/#/&都可以】,從別的目錄進入sqlplus也加載提示符變量
3.保存&退出
4.sqlplus / as sysdba
看現在的sqlplus提示符已經變化了,sys表示當前登錄的是管理員用戶,mdsoss是我的數據庫連接串名,這樣的話我們就可以在登錄若干個數據庫的時候不會發生混淆的情況了。
sys@mdsoss>

 

1.2 局部模式
什么叫局部模式呢:只在當前目錄有效,例如我們在當前目錄下配置login.sql文件,那么就在當前目錄下進入sqlplus工具會加載login.sql文件提示符會生效,其他目錄下登陸不生效
1.在當前目錄下創建login.sql文件
例子 vim /home/oracle/login.sql
2.編輯login.sql文件,添加一行字符串
set sqlprompt "_user‘@‘_connect_identifier> "
或者 set sqlprompt ‘_user@&_connect_identifier> ‘
含義:_user 代表當前登陸用戶名,_connect_identifier 代表當前數據庫連接串名,在glogin.sql中設置全局sqlplus提示符樣子user和connect identifier是sqlplus的默認變量
注:此時設置的是在當前目錄下登陸sqlplus工具提示符生效,@替換成【¥/#/&都可以】,從別的目錄進入sqlplus不加載提示符變量
3.保存&退出
4.sqlplus / as sysdba
sys@mdsoss>
5.局部生效測試版
如果我們在其他目錄下登錄sqlplus,這是我們已經發現了不同點,恢復到原始狀態
sqlplus / as sysdba
SQL>

1.3 指定用戶名和實例名方法
1.編輯glogin.sql和login.sql文件,在最后面添加如下內容
set term off
define user_name=""
define instance_name=""
column user_name new_value user_name
column instance_name new_value instance_name
select lower(user) user_name, instance_name instance_name from v$instance;
set sqlprompt ‘&user_name@&instance_name>‘     
注釋:--user_name 代表當前登陸的用戶名,instance_name 代表當前登陸的實例名
sys@mdsoss> @可替換【¥/#/&都可以】
2.使用sqlplus登錄數據庫
這種方式在登陸和切換用戶的時候,可指定用戶名和實例名
enter value for user: liusheng
enter value for instance_name:leonarding
liusheng@leonarding>
小結:使用上述方法可以讓我們在數據庫海洋里游刃有余,平時練習的時候也可以加上,形成習慣,這樣在連接不同的數據庫時就不會導致不知道連接的是哪個庫了。

2. 幫助
2.1. sqlplus命令程序幫助
sqlplus -V 顯示版本信息
sqlplus -help 
一個有意思的選項是-S,這個選項設置無提示模式, 該模式隱藏 命令的 SQL*Plus 標幟, 提示和回顯的顯示。這個選項在報表輸出或者spool的時候特別有用,不顯示sqlplus的banner之類的信息。
2.2. sqlplus命令行幫助
help index 顯示全部幫助主題,4列顯示。
help topics 顯示全部幫助主題。
help show  顯示show命令幫助主題。

 

3. 顯示系統變量(SET變量)
當你需要查看當前使用的SET設置的變量情況的時候,比如show pagesize顯示當前的頁面大小設置。

 

4. 語句、腳本的執行
4.1. 可以運行的腳本
sqlplus一共可以運行一下3類命令:
sql、plsql語句塊和sqlplus程序的命令(設置sqlplus,編輯和保存sql和plsql語句)。
執行過的命令將被保存到緩存區當中,但是不保存sqlplus命令和執行命令的斜號和分號。
4.2 執行命令的結束符
也有3個結束符
分號";",任何你想結束輸入並運行語句的地方。
斜號"/",只能在結束輸入后,另起的單獨一行輸入以運行語句。
空格" ",結束輸入,但是不運行語句。
點號".",用於結束plsql語句塊輸入並執行。
"/"和"run",用於執行緩存區當中的最新的腳本或者語句。
4.3 執行外部腳本
@ file 
運行指定的腳本,可以是本地也可以是url上的腳本。
@@ file
運行指定的腳本,可以是本地也可以是url上的腳本,與@的區別,常常用於腳本當中,遞歸調用相同目錄下的腳本。
start
同@ file
4.4. 在啟動sqlplus的時候執行腳本

 

5. 執行操作系統命令
可以在sqlplus當中執行操作系統命令,這個功能非常使用,比如在系統診斷做個trace的時候,需要查看相應的文件,需要退出sqlplus到操作系統當中查看,這個就非常麻煩了低效了。其實這類情況下我們可以直接在sqlplus當中執行相應的操作系統命令,只要在命令前使用 host 或者 !都可以。
[oracle@gtlions ~]$ sqlplus store/store

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 7月 31 21:34:22 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


連接到: 
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

store@TEST11G> select count(*) from dual;

  COUNT(*)
----------
         1

store@TEST11G> ! cat 1.sql
select * from emp;
@@2&3

store@TEST11G> host cat 2.sql
select * from dept;

store@TEST11G> host pwd
/home/oracle

store@TEST11G> 
注意在這里執行的任何操作系統環境變量設置都不會影響當前會話。

 

6. 使用腳本
6.1. 設置和使用編輯器
創建和執行腳本是基本的操作,sqlplus會調用默認的操作系統的文本編輯器來編輯腳本。windows當中默認是notepad,linuxm默認是vi,可以設置在操作系統環境變量、sqlplus配置參數中。
檢查默認的編輯器
store@TEST11G> define
DEFINE _DATE           = "31-7月 -11" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "TEST11G" (CHAR)
DEFINE _USER           = "STORE" (CHAR)
DEFINE _PRIVILEGE      = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR)
DEFINE _EDITOR         = "vi" (CHAR)
方法1,通過設置操作系統環境變量
sys@TEST11G> ! cat .bash_profile
# .bash_profile
.。。省略N行

export EDITOR=vi #設置sqlplus默認編輯器為vi
方法2,設置登錄腳本
define_editor=D:\Program Files\Green\Notepad++\ansi\notepad++.exe
我們可以在sqlplus中使用edit 1來啟動編輯器編輯腳本,默認會在當前路徑下創建一個1.sql文件,sql是默認擴展名。
注意:每條sql語句必須使用分號結束;可以在腳本中使用多條sql語句;可以在腳本中編寫plsql語句塊,測試中,使用2塊語句的時候只執行了最后一個語句塊。

 

7. 緩存區

7.1. list 
列出緩存區的命令,可用簡寫l
store@TEST11G> list 列出緩存區所有行
  1  select
  2  ename,empno
  3  from emp
  4  where 1=1
  5  and 2=2
  6* and 3=3
store@TEST11G> list 5 列出第5行
  5* and 2=2
store@TEST11G> list 2 4 列出第2-4行
  2  ename,empno
  3  from emp
  4* where 1=1
store@TEST11G> list * 列出當前行
  4* where 1=1
store@TEST11G> list 1 * 列出第1行到當前行
  1  select
  2  ename,empno
  3  from emp
  4* where 1=1
store@TEST11G> list * 5 列出當前行到第5行
  4  where 1=1
  5* and 2=2
store@TEST11G> list * last 列出當前行到最后一行
  5  and 2=2
  6* and 3=3
store@TEST11G> list last 列出最后一行
  6* and 3=3
7.2. append
向當前行追加,可用簡寫a。
7.3. change
修改當前行,可用簡寫c。
store@TEST11G> list
  1  select
  2  ename,empno
  3  from emp
  4  where 1=1
  5  and 2=2
  6* and 3=3
store@TEST11G> list 4
  4* where 1=1
store@TEST11G> append  1 --注意在第1個空格之后就是你要追加的內容,如果你追加的內容需要空格的時候就會注意到這點
  4* where 1=1 1
store@TEST11G> append =1
  4* where 1=1 1=1
store@TEST11G> change /1=1 1=1/1=1 and 1=1/
  4* where 1=1 and 1=1
store@TEST11G> change / and 1=1/--注意如果沒有新增的話就變成的輸出指定文本的功能
  4* where 1=1
change查找第1次匹配到的字符並修改。  
7.3.1. 快速修改當前行
可以輸入要行號加空格接着輸入要替換本行的內容。
7.4. del
刪除當前行,這個命令還有與list一樣的參數。
7.5. input
在當前行之后添加行,可用簡寫i。有2種方式:i text,這個方式只是追加,並不會執行追加后的腳本;i 回車 text,如果以分號作為輸入結束,這個情況下會追加並執行最終版本的腳本,如果不想要執行追加后的版本,使用回車(2個)結束輸入。
store@TEST11G> l
  1  select
  2  ename,empno
  3  from emp
  4  where 1=1
  5  and 2=2
  6* and 3=3
store@TEST11G> input 
  7  and 4=5;

未選定行

store@TEST11G> input and 5=5
store@TEST11G> l
  1  select
  2  ename,empno
  3  from emp
  4  where 1=1
  5  and 2=2
  6  and 3=3
  7  and 4=5
  8* and 5=5
store@TEST11G> input and 1=1;
store@TEST11G> l
  1  select
  2  ename,empno
  3  from emp
  4  where 1=1
  5  and 2=2
  6  and 3=3
  7  and 4=5
  8  and 5=5
  9* and 1=1
store@TEST11G> list 2
  2* ename,empno
store@TEST11G> input 3=7
store@TEST11G> l
  1  select
  2  ename,empno
  3  3=7
  4  from emp
  5  where 1=1
  6  and 2=2
  7  and 3=3
  8  and 4=5
  9  and 5=5
 10* and 1=1
添加成第1行
store@TEST11G> l
  1  select
  2  ename,empno
  3  3=7
  4  from emp
  5  where 1=1
  6  and 2=2
  7  and 3=3
  8  and 4=5
  9  and 5=5
 10  and 1=1
 11  and 1=1
 12* change /3/
store@TEST11G> 0 select 
store@TEST11G> l
  1  select
  2  select
  3  ename,empno
  4  3=7
  5  from emp
  6  where 1=1
  7  and 2=2
  8  and 3=3
  9  and 4=5
 10  and 5=5
 11  and 1=1
 12  and 1=1
 13* change /3/
7.6. 注意
除了帶參數的list和del,其他的命令只對當前行生效。
7.7. 如何決定當前行
list n,則當前行為第n行。
list列出和run執行當前緩存區命令,則當前行為最后一行。注意使用"/"執行腳本的時候,不會改變當前行。
出現錯誤,則當前行為錯誤所在的行,這樣是為了方便編輯錯誤行的內容。
8. 注釋
注釋有3種方式:remark、/**/、--。
store@TEST11G> edit 1

remark 注釋1
remark 注釋1
remark 不能跨行,不能用在單個sql語句之間
/* 注意在"/*"之后要有一個空格,可以跨
行,但是不能被嵌套,可以用在任何行上。
*/
-- 單獨行的注釋,可以用在任何行上。
remark 注釋1
select * from
dual
/* 注釋
2*/
where --注釋3
1=1;
remark 注釋4

store@TEST11G> @1

DUM
---
X


store@TEST11G> l
  1  select * from
  2  dual
  3  /* 注釋
  4  2*/
  5  where --注釋3
  6* 1=1

9. 使用交互式命令

9.1. 定義用戶變量 define
store@TEST11G> define df1
SP2-0135: 符號 df1 未定義
store@TEST11G> define df1=1
store@TEST11G> define
DEFINE _DATE           = "02-8月 -11" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "TEST11G" (CHAR)
DEFINE _USER           = "STORE" (CHAR)
DEFINE _PRIVILEGE      = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR)
DEFINE _EDITOR         = "vi" (CHAR)
DEFINE _O_VERSION      = "Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE      = "1102000100" (CHAR)
DEFINE GNAME           = "store@TEST11G" (CHAR)
DEFINE DF1             = "1" (CHAR)
store@TEST11G> select * from dual where 1=&df1;
原值    1: select * from dual where 1=&df1
新值    1: select * from dual where 1=1

DUM
---
X
使用define可以查看所有的define變量,注意define和variable的區別。另外在引用的時候不管是使用&還是&&都無需再次輸入值。
如果要附加字符,用點號:
store@TEST11G> select * from dual where 100=&x.0;
輸入 x 的值:  10
原值    1: select * from dual where 100=&x.0
新值    1: select * from dual where 100=100

DUM
---
X

9.2 定義用戶變量 variable
store@TEST11G> variable v1 number;
store@TEST11G> exec :v1:=1;

PL/SQL 過程已成功完成。

store@TEST11G> print v1

        V1
----------
         1

store@TEST11G> select :v1 from dual;

       :V1
----------
         1

store@TEST11G> declare
  2  begin
  3  select 23 into :v1 from dual;
  4  end;
  5  /

PL/SQL 過程已成功完成。

store@TEST11G> print v1

        V1
----------
        23

define相當於定義一個字符常量,通過define定義之后,在通過&或者&&引用的時候不需要輸入了。oracle在執行的時候自動用值進行了替換;
variable定義的是綁定變量。
9.3 &和&&
&在當前sql語句生效,每次執行的時候都需要提示用戶輸入新值;&&在當前session當中一直有效,無需每次輸入。
9.4 替換變量相關的系統變量
set define 替換變量的字符,默認是&
set esacpe 轉移字符,默認是\
set verify on 是否列出替換變量的前后提示行
set concat 與變量連接的字符,默認是.
9.5 使用START命令提供值
store@TEST11G> l
  1* select * from dba_tables  where owner  in (‘&1‘, ‘&2‘)
store@TEST11G> start 1.sql sys system
原值    1: select * from dba_tables  where owner  in (‘&1‘, ‘&2‘)
新值    1: select * from dba_tables  where owner  in (‘sys‘, ‘system‘)
可以在start filename 之后帶上參數值,注意匹配數量。
9.6 交互輸入
prompt和accept,prompt主要用於提示用戶輸入一個值,而accept用於接收prompt定義的用戶的輸入值。
store@TEST11G> edit 1

prompt 請輸入報表名稱
accept rptitle prompt ‘報表名稱:‘
TTITLE rptitle skip 2
accept empnonew prompt ‘請輸入要過濾的EMPNO值:‘
select empno,ename from emp where empno>&empnonew;
store@TEST11G> @1
請輸入報表名稱
報表名稱:職員表
請輸入要過濾的EMPNO值:7000
原值    1: select empno,ename from emp where empno>&empnonew
新值    1: select empno,ename from emp where empno>7000

職員表

     EMPNO ENAME
---------- ------------------------------
      7369 SMITH
      7499 ALLEN

 

10. 使用綁定變量
store@TEST11G> var ref1 refcursor
store@TEST11G> declare
  2  begin
  3  open :ref1 for select empno,ename from emp where rownum<5;
  4  end;
  5  /

PL/SQL 過程已成功完成。

store@TEST11G> print ref1;

職員表

     EMPNO ENAME
---------- ------------------------------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES

store@TEST11G> var v1 number;
store@TEST11G> exec :v1:=100;

PL/SQL 過程已成功完成。

store@TEST11G> print v1

職員表

        V1
----------
       100

store@TEST11G> 

 

11. 格式化sqlplus
11.1. 格式化列
store@TEST11G> column empno heading ‘emp|id number‘--可以用|來換行
store@TEST11G> column ename heading ‘emp name‘
store@TEST11G> select empno,ename from emp where rownum<3;

職員表

       emp
 id number emp name
---------- ------------------------------
      7369 SMITH
store@TEST11G> !cat 1.sql
set linesize 120
--設置被換行之后使用-標記
set recsep wrapped
set recsepchar "-"
--定義列標題
column dname heading ‘所在部門‘
column empno heading ‘員工編號‘
column ename heading ‘員工名稱‘
column sal heading ‘收入情況‘
--定義列格式
column dname format a9 word_wrapped
column sal format $99999.990
--復制dname的列格式
column loc like dname heading ‘部門所在|城市‘
select a.dname,a.loc,b.empno,b.ename,b.sal from dept a,emp b where a.deptno=b.deptno;
--column【列名】顯示列格式定義,column【列名】clear清除列格式定義

store@TEST11G> @1.sql

          部門所在
所在部門  城市        員工編號 員工名稱                          收入情況
--------- --------- ---------- ------------------------------ -----------
ACCOUNTIN NEW YORK        7782 CLARK                            $2450.000
G
------------------------------------------------------------------------------------------------------------------------
ACCOUNTIN NEW YORK        7839 KING                             $5000.000
G
------------------------------------------------------------------------------------------------------------------------
ACCOUNTIN NEW YORK        7934 MILLER                           $1300.000
G
------------------------------------------------------------------------------------------------------------------------
RESEARCH  DALLAS          7566 JONES                            $2975.000
RESEARCH  DALLAS          7902 FORD                             $3000.000
RESEARCH  DALLAS          7876 ADAMS                            $1100.000
RESEARCH  DALLAS          7369 SMITH                             $800.000
RESEARCH  DALLAS          7788 SCOTT                            $3000.000
SALES     CHICAGO         7521 WARD                             $1250.000
SALES     CHICAGO         7844 TURNER                           $1500.000
SALES     CHICAGO         7499 ALLEN                            $1600.000
SALES     CHICAGO         7900 JAMES                             $950.000
SALES     CHICAGO         7698 BLAKE                            $2850.000
SALES     CHICAGO         7654 MARTIN                           $1250.000

已選擇14行。
11.2. 中斷和合計
11.2.1. 中斷break和計算compute
--第1行是設置deptno和job,當遇到相同值的時候中斷另起一行;另外設置了report中斷
--第2-4行是設置上述3個中斷的合計值,注意必須要有break之后才能compute【sum maxinum mininum avg count number std variance】
--break顯示所有的中斷設置,break 列名 顯示指定列的中斷設置,clear breaks清除中斷設置;compute一樣的語法
store@TEST11G> break on deptno skip 1 on job skip 1 on report
store@TEST11G> compute sum label deptsal of sal on deptno
store@TEST11G> compute sum label jobsal of sal on job
store@TEST11G> compute sum label totalsal of sal on report
store@TEST11G> select deptno,job,ename,sal from emp order by 1,2;

    DEPTNO JOB                         ENAME                                 SAL
---------- --------------------------- ------------------------------ ----------
        10 CLERK                       MILLER                               1300
           ***************************                                ----------
           jobsal                                                           1300

           MANAGER                     CLARK                                2450
           ***************************                                ----------
           jobsal                                                           2450

           PRESIDENT                   KING                                 5000
           ***************************                                ----------
           jobsal                                                           5000

**********                                                            ----------
deptsal                                                                     8750

        20 ANALYST                     SCOTT                                3000
                                       FORD                                 3000
           ***************************                                ----------
           jobsal                                                           6000

           CLERK                       ADAMS                                1100
                                       SMITH                                 800
           ***************************                                ----------
           jobsal                                                           1900

           MANAGER                     JONES                                2975
           ***************************                                ----------
           jobsal                                                           2975

**********                                                            ----------
deptsal                                                                    10875

        30 CLERK                       JAMES                                 950
           ***************************                                ----------
           jobsal                                                            950

           MANAGER                     BLAKE                                2850
           ***************************                                ----------
           jobsal                                                           2850

           SALESMAN                    MARTIN                               1250
                                       WARD                                 1250
                                       ALLEN                                1600
                                       TURNER                               1500
           ***************************                                ----------
           jobsal                                                           5600

**********                                                            ----------
deptsal                                                                     9400

                                                                      ----------
totalsal                                                                   29025

已選擇14行。
11.3. 定義頁報表標題 
store@TEST11G> ttitle left "員工報表頁頭" SQL.PNO
store@TEST11G> btitle skip 1 left "員工報表頁尾"
store@TEST11G> repheader center "報表頭" skip 1 center "小標題"
store@TEST11G> repfooter "報表尾"

store@TEST11G> ttitle off
store@TEST11G> btitle off
store@TEST11G> repheader off
store@TEST11G> repfooter off

 

12. sqlplus調優
12.1. 跟蹤執行計划
store@TEST11G> set autotrace autotrace
用法: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

SET AUTOTRACE OFF  不生成 AUTOTRACE報告。這是默認值。 
SET AUTOTRACE ON  AUTOTRACE報告中即包括優化器執行路徑也包括SQL語句執行統計。 
SET AUTOTRACE ON EXPLAIN  AUTOTRACE報告中只顯示優化器執行路徑。 
SET AUTOTRACE ON STATISTICS AUTOTRACE報告中只顯示SQL語句執行統計。 
SET AUTOTRACE TRACEONLY  類似於 SET AUTOTRACE ON,但禁止顯示用戶的查詢輸出(如果有的話)。如果啟用 STATISTICS 的話,仍然會提取數據但並不打印。
set autot trace stat 組合使用
12.2. 顯示時間
set timing on 在每次執行輸出結果之后顯示本次執行時間
timing start t1
       show
       stop 這種方式可以嵌入到腳本當中根據需要顯示時間

 

13. sqlplus調優
主要涉及到幾個參數的配置,比如禁用輸出等等可以提夠性能。

 

14. sqlplus安全

使用PUP(product_user_profile)可以配置用戶在訪問本地數據庫的時候限制使用的命令。

-The End-

 

 

轉自:http://blog.csdn.net/gtlions/article/details/6661519

http://blog.itpub.net/26686207/viewspace-719737/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM