ORACLE常用命令,oracle命令
一、ORACLE的啟動和關閉
1、在單機環境下
要想啟動或關閉ORACLE系統必須首先切換到ORACLE使用者,如下
su-oracle
a、啟動ORACLE系統
oracle>svrmgrl
SVRMGR>connectinternal
SVRMGR>startup
SVRMGR>quit
b、關閉ORACLE系統
oracle>svrmgrl
SVRMGR>connectinternal
SVRMGR>shutdown
SVRMGR>quit
啟動oracle9i資料庫命令:
$sqlplus/nolog
SQL*Plus:Release9.2.0.1.0-ProductiononFriOct3113:53:532003
Copyright(c)1982,2002,OracleCorporation.Allrightsreserved.
SQL>connect/assysdba
Connectedtoanidleinstance.
SQL>startup^C
SQL>startup
ORACLEinstancestarted.
2、在雙機環境下
要想啟動或關閉ORACLE系統必須首先切換到root使用者,如下
su-root
a、啟動ORACLE系統
hareg-yoracle
b、關閉ORACLE系統
hareg-noracle
Oracle資料庫有哪幾種啟動方式
說明:
有以下幾種啟動方式:
1、startupnomount
非安裝啟動,這種方式啟動下可執行:重建控制檔案、重建資料庫
讀取init.ora檔案,啟動instance,即啟動SGA和後台進程,這種啟動只需要init.ora檔案。
2、startupmountdbname
安裝啟動,這種方式啟動下可執行:
資料庫日誌歸檔、
資料庫介質恢複、
使資料檔案聯機或離線,
重新置放資料檔案、重做記錄檔。
執行“nomount”,然後開啟控制檔案,確認資料檔案和聯機記錄檔的位置,
但此時不對資料檔案和記錄檔進行校正檢查。
3、startupopendbname
先執行“nomount”,然後執行“mount”,再開啟包括Redolog檔案在內的所有資料庫檔案,
這種方式下可訪問資料庫中的資料。
4、startup,等於以下三個命令
startupnomount
alterdatabasemount
alterdatabaseopen
5、startuprestrict
約束方式啟動
這種方式能夠啟動資料庫,但只允許具有一定特權的使用者訪問
非特權使用者訪問時,會出現以下提示:
ERROR:
ORA-01035:ORACLE只允許具有RESTRICTEDSESSION許可權的使用者使用
6、startupforce
強制啟動方式
當不能關閉資料庫時,可以用startupforce來完成資料庫的關閉
先關閉資料庫,再執行正常啟動資料庫命令
7、startuppfile=參數檔案名稱
帶初始化參數檔案的啟動方式
先讀取參數檔案,再按參數檔案中的設定啟動資料庫
例:startuppfile=E:Oracleadminoradbpfileinit.ora
8、startupEXCLUSIVE
二、使用者如何有效地利用資料字典
ORACLE的資料字典是資料庫的重要組成部分之一,它隨著資料庫的產生而產生,隨著資料庫的變化而變化,
體現為sys使用者下的一些表和視圖。資料字典名稱是大寫的英文字元。
資料字典裡存有使用者資訊、使用者的許可權資訊、所有資料對象資訊、表的約束條件、統計分析資料庫的視圖等。
我們不能手工修改資料字典裡的資訊。
很多時候,一般的ORACLE使用者不知道如何有效地利用它。
dictionary 全部資料字典表的名稱和解釋,它有一個同義字dict
dict_column 全部資料字典表裡欄位名稱和解釋
如果我們想查詢跟索引有關的資料字典時,可以用下面這條SQL語句:
SQL>select*fromdictionarywhereinstr(comments,'index')>0;
如果我們想知道user_indexes表各欄位名稱的詳細含義,可以用下面這條SQL語句:
SQL>selectcolumn_name,commentsfromdict_columnswheretable_name='USER_INDEXES';
依此類推,就可以輕鬆知道資料字典的詳細名稱和解釋,不用查看ORACLE的其它文檔資料了。
下面按類別列出一些ORACLE使用者常用資料字典的查詢使用方法。
1、使用者
查看目前使用者的預設資料表空間
SQL>selectusername,default_tablespacefromuser_users;
查看目前使用者的角色
SQL>select*fromuser_role_privs;
查看目前使用者的系統許可權和表級許可權
SQL>select*fromuser_sys_privs;
SQL>select*fromuser_tab_privs;
2、表
查看使用者下所有的表
SQL>select*fromuser_tables;
查看名稱包含log字元的表
SQL>selectobject_name,object_idfromuser_objects
whereinstr(object_name,'LOG')>0;
查看某表的建立時間
SQL>selectobject_name,createdfromuser_objectswhereobject_name=upper('&table_name');
查看某表的大小
SQL>selectsum(bytes)/(1024*1024)as"size(M)"fromuser_segments
wheresegment_name=upper('&table_name');
查看放在ORACLE的記憶體區裡的表
SQL>selecttable_name,cachefromuser_tableswhereinstr(cache,'Y')>0;
3、索引
查看索引個數和類別
SQL>selectindex_name,index_type,table_namefromuser_indexesorderbytable_name;
查看索引被索引的欄位
SQL>select*fromuser_ind_columnswhereindex_name=upper('&index_name');
查看索引的大小
SQL>selectsum(bytes)/(1024*1024)as"size(M)"fromuser_segments
wheresegment_name=upper('&index_name');
4、序號
查看序號,last_number是當前值
SQL>select*fromuser_sequences;
5、視圖
查看視圖的名稱
SQL>selectview_namefromuser_views;
查看建立視圖的select語句
SQL>setview_name,text_lengthfromuser_views;
SQL>setlong2000;說明:可以根據視圖的text_length值設定setlong的大小
SQL>selecttextfromuser_viewswhereview_name=upper('&view_name');
6、同義字
查看同義字的名稱
SQL>select*fromuser_synonyms;
7、約束條件
查看某表的約束條件
SQL>selectconstraint_name,constraint_type,search_condition,r_constraint_name
fromuser_constraintswheretable_name=upper('&table_name');
SQL>selectc.constraint_name,c.constraint_type,cc.column_name
fromuser_constraintsc,user_cons_columnscc
wherec.owner=upper('&table_owner')andc.table_name=upper('&table_name')
andc.owner=cc.ownerandc.constraint_name=cc.constraint_name
orderbycc.position;
8、儲存函數和過程
查看函數和過程的狀態
SQL>selectobject_name,statusfromuser_objectswhereobject_type='FUNCTION';
SQL>selectobject_name,statusfromuser_objectswhereobject_type='PROCEDURE';
查看函數和過程的原始碼
SQL>selecttextfromall_sourcewhereowner=userandname=upper('&plsql_name');
三、查看資料庫的SQL
1、查看錶空間的名稱及大小
selectt.tablespace_name,round(sum(bytes/(1024*1024)),0)ts_size
fromdba_tablespacest,dba_data_filesd
wheret.tablespace_name=d.tablespace_name
groupbyt.tablespace_name;
2、查看錶空間物理檔案的名稱及大小
selecttablespace_name,file_id,file_name,
round(bytes/(1024*1024),0)total_space
fromdba_data_files
orderbytablespace_name;
3、查看復原段名稱及大小
selectsegment_name,tablespace_name,r.status,
(initial_extent/1024)InitialExtent,(next_extent/1024)NextExtent,
max_extents,v.curextCurExtent
Fromdba_rollback_segsr,v$rollstatv
Wherer.segment_id=v.usn(+)
orderbysegment_name;
4、查看控制檔案
selectnamefromv$controlfile;
5、查看記錄檔
selectmemberfromv$logfile;
6、查看錶空間的使用方式
selectsum(bytes)/(1024*1024)asfree_space,tablespace_name
fromdba_free_space
groupbytablespace_name;
SELECTA.TABLESPACE_NAME,A.BYTESTOTAL,B.BYTESUSED,C.BYTESFREE,
(B.BYTES*100)/A.BYTES"%USED",(C.BYTES*100)/A.BYTES"%FREE"
FROMSYS.SM$TS_AVAILA,SYS.SM$TS_USEDB,SYS.SM$TS_FREEC
WHEREA.TABLESPACE_NAME=B.TABLESPACE_NAMEANDA.TABLESPACE_NAME=C.TABLESPACE_NAME;
7、查看資料庫庫對象
selectowner,object_type,status,count(*)count#fromall_objectsgroupbyowner,object_type,status;
8、查看資料庫的版本
SelectversionFROMProduct_component_version
WhereSUBSTR(PRODUCT,1,6)='Oracle';
9、查看資料庫的建立日期和歸檔方式
SelectCreated,Log_Mode,Log_ModeFromV$Database;
四、ORACLE使用者串連的管理
用系統管理員,查看當前資料庫有幾個使用者串連:
SQL>selectusername,sid,serial#fromv$session;
如果要停某個串連用
SQL>altersystemkillsession'sid,serial#';
如果這命令不行,找它UNIX的進程數
SQL>selectpro.spidfromv$sessionses,v$processprowhereses.sid=21andses.paddr=pro.addr;
說明:21是某個串連的sid數
然後用kill命令殺此進程號。
五、SQL*PLUS使用
a、近入SQL*Plus
$sqlplus使用者名稱/密碼
退出SQL*Plus
SQL>exit
b、在sqlplus下得到協助資訊
列出全部SQL命令和SQL*Plus命令
SQL>help
列出某個特定的命令的資訊
SQL>help命令名
c、顯示表結構命令DESCRIBE
SQL>DESC表名
d、SQL*Plus中的編輯命令
顯示SQL緩衝區命令
SQL>L
修改SQL命令
首先要將待改正行變為當前行
SQL>n
用CHANGE命令修改內容
SQL>c/舊/新
重新確認是否已正確
SQL>L
使用INPUT命令可以在SQL緩衝區中增加一行或多行
SQL>i
SQL>輸入內容
e、調用外部系統編輯器
SQL>edit檔案名稱
可以使用DEFINE命令設定系統變數EDITOR來改變文字編輯器的類型,在login.sql檔案中定義如下一行
DEFINE_EDITOR=vi
f、運行命令檔案
SQL>STARTtest
SQL>@test
常用SQL*Plus語句
a、表的建立、修改、刪除
建立表的命令格式如下:
createtable表名(列說明列表);
為基表增加新列命令如下:
ALTERTABLE表名ADD(列說明列表)
例:為test表增加一列Age,用來存放年齡
sql>altertabletest
add(Agenumber(3));
修改基表列定義命令如下:
ALTERTABLE表名
MODIFY(列名資料類型)
例:將test表中的Count列寬度加長為10個字元
sql>alteratbletest
modify(Countychar(10));
b、將一張表刪除語句的格式如下:
DORPTABLE表名;
例:表刪除將同時刪除表的資料和表的定義
sql>droptabletest
c、資料表空間的建立、刪除
六、ORACLE邏輯備份的SH檔案
完全備份的SH檔案:exp_comp.sh
rq=`date+"%m%d"`
su-oracle-c"expsystem/managerfull=yinctype=completefile=/oracle/export/db_comp$rq.dmp"
累計備份的SH檔案:exp_cumu.sh
rq=`date+"%m%d"`
su-oracle-c"expsystem/managerfull=yinctype=cumulativefile=/oracle/export/db_cumu$rq.dmp"
增量備份的SH檔案:exp_incr.sh
rq=`date+"%m%d"`
su-oracle-c"expsystem/managerfull=yinctype=incrementalfile=/oracle/export/db_incr$rq.dmp"
root使用者crontab檔案
/var/spool/cron/crontabs/root增加以下內容
021**/oracle/exp_comp.sh
302**0-5/oracle/exp_incr.sh
452**6/oracle/exp_cumu.sh
當然這個時間表可以根據不同的需求來改變的,這隻是一個例子。
七、ORACLE常用的SQL文法和資料對象
一.資料控制語句(DML)部分
1.INSERT(往資料表裡插入記錄的語句)
INSERTINTO表名(欄位名1,欄位名2,……)VALUES(值1,值2,……);
INSERTINTO表名(欄位名1,欄位名2,……)SELECT(欄位名1,欄位名2,……)FROM另外的表名;
字串類型的欄位值必須用單引號括起來,例如:’GOODDAY’
如果欄位值裡包含單引號’需要進行字串轉換,我們把它替換成兩個單引號''.
字串類型的欄位值超過定義的長度會出錯,最好在插入前進行長度校正.
日期欄位的欄位值可以用當前資料庫的系統時間SYSDATE,精確到秒
或者用字串轉換成日期型函數TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)
TO_DATE()還有很多種日期格式,可以參看ORACLEDOC.
年-月-日小時:分鐘:秒的格式YYYY-MM-DDHH24:MI:SS
INSERT時最大可操作的字串長度小於等於4000個單位元組,如果要插入更長的字串,請考慮欄位用CLOB類型,
方法借用ORACLE裡內建的DBMS_LOB程式包.
INSERT時如果要用到從1開始自動成長的序號,應該先建立一個序號
CREATESEQUENCE序號的名稱(最好是表名+序號標記)INCREMENTBY1STARTWITH1
MAXVALUE99999CYCLENOCACHE;
其中最大的值按欄位的長度來定,如果定義的自動成長的序號NUMBER(6),最大值為999999
INSERT語句插入這個欄位值為:序號的名稱.NEXTVAL
2.DELETE(刪除資料表裡記錄的語句)
DELETEFROM表名WHERE條件;
注意:刪除記錄並不能釋放ORACLE裡被佔用的資料區塊資料表空間.它只把那些被刪除的資料區塊標成unused.
如果確實要刪除一個大表裡的全部記錄,可以用TRUNCATE命令,它可以釋放佔用的資料區塊資料表空間
TRUNCATETABLE表名;
此操作不可回退.
3.UPDATE(修改資料表裡記錄的語句)
UPDATE表名SET欄位名1=值1,欄位名2=值2,……WHERE條件;
如果修改的值N沒有賦值或定義時,將把原來的記錄內容清為NULL,最好在修改前進行非空校正;
值N超過定義的長度會出錯,最好在插入前進行長度校正..
注意事項:
A.以上SQL語句對錶都加上了行級鎖,
確認完成後,必須加上事物處理結束的命令COMMIT才能正式生效,
否則改變不一定寫入資料庫裡.
如果想撤回這些操作,可以用命令ROLLBACK複原.
B.在運行INSERT,DELETE和UPDATE語句前最好估算一下可能操作的記錄範圍,
應該把它限定在較小(一萬條記錄)範圍內,.否則ORACLE處理這個事物用到很大的回退段.
程式響應慢甚至失去響應.如果記錄數上十萬以上這些操作,可以把這些SQL語句分段分次完成,
其間加上COMMIT確認事物處理.
二.資料定義(DDL)部分
1.CREATE(建立表,索引,視圖,同義字,過程,函數,資料庫連結等)
ORACLE常用的欄位類型有
CHAR固定長度的字串
VARCHAR2可變長度的字串
NUMBER(M,N)數字型M是位元總長度,N是小數的長度
DATE日期類型
建立表時要把較小的不為空白的欄位放在前面,可能為空白的欄位放在後面
建立表時可以用中文的欄位名,但最好還是用英文的欄位名
建立表時可以給欄位加上預設值,例如DEFAULTSYSDATE
這樣每次插入和修改時,不用程式操作這個欄位都能得到動作的時間
建立表時可以給欄位加上約束條件
例如不允許重複UNIQUE,關鍵字PRIMARYKEY
2.ALTER(改變表,索引,視圖等)
改變表的名稱
ALTERTABLE表名1TO表名2;
在表的後面增加一個欄位
ALTERTABLE表名ADD欄位名欄位名描述;
修改表裡欄位的定義描述
ALTERTABLE表名MODIFY欄位名欄位名描述;
給表裡的欄位加上約束條件
ALTERTABLE表名ADDCONSTRAINT約束名PRIMARYKEY(欄位名);
ALTERTABLE表名ADDCONSTRAINT約束名UNIQUE(欄位名);
把表放在或取出資料庫的記憶體區
ALTERTABLE表名CACHE;
ALTERTABLE表名NOCACHE;
3.DROP(刪除表,索引,視圖,同義字,過程,函數,資料庫連結等)
刪除表和它所有的約束條件
DROPTABLE表名CASCADECONSTRAINTS;
4.TRUNCATE(清空表裡的所有記錄,保留表的結構)
TRUNCATE表名;
三.查詢語句(SELECT)部分
SELECT欄位名1,欄位名2,……FROM表名1,[表名2,……]WHERE條件;
欄位名可以帶入函數
例如:COUNT(*),MIN(欄位名),MAX(欄位名),AVG(欄位名),DISTINCT(欄位名),
TO_CHAR(DATE欄位名,'YYYY-MM-DDHH24:MI:SS')
NVL(EXPR1,EXPR2)函數
解釋:
IFEXPR1=NULL
RETURNEXPR2
ELSE
RETURNEXPR1
DECODE(AA,V1,R1,V2,R2....)函數
解釋:
IFAA=V1THENRETURNR1
IFAA=V2THENRETURNR2
..…
ELSE
RETURNNULL
LPAD(char1,n,char2)函數
解釋:
字元char1按制定的位元n顯示,不足的位元用char2字串替換左邊的空位
欄位名之間可以進行算術運算
例如:(欄位名1*欄位名1)/3
查詢語句可以嵌套
例如:SELECT……FROM
(SELECT……FROM表名1,[表名2,……]WHERE條件)WHERE條件2;
兩個查詢語句的結果可以做集合操作
例如:並集UNION(去掉重複記錄),並集UNIONALL(不去掉重複記錄),差集MINUS,交集INTERSECT
分組查詢
SELECT欄位名1,欄位名2,……FROM表名1,[表名2,……]GROUPBY欄位名1
[HAVING條件];
兩個以上表之間的串連查詢
SELECT欄位名1,欄位名2,……FROM表名1,[表名2,……]WHERE
表名1.欄位名=表名2.欄位名[AND……];
SELECT欄位名1,欄位名2,……FROM表名1,[表名2,……]WHERE
表名1.欄位名=表名2.欄位名(+)[AND……];
有(+)號的欄位位置自動補空值
查詢結果集的排序操作,預設的排序是升序ASC,降序是DESC
SELECT欄位名1,欄位名2,……FROM表名1,[表名2,……]
ORDERBY欄位名1,欄位名2DESC;
字串模糊比較的方法
INSTR(欄位名,‘字串’)>0
欄位名LIKE‘字串%’[‘%字串%’]
每個表都有一個隱含的欄位ROWID,它標記著記錄的唯一性.
四.ORACLE裡常用的資料對象(SCHEMA)
1.索引(INDEX)
CREATEINDEX索引名ON表名(欄位1,[欄位2,……]);
ALTERINDEX索引名REBUILD;
一個表的索引最好不要超過三個(特殊的大表除外),最好用單欄位索引,結合SQL語句的分析執行情況,
也可以建立多欄位的複合式索引和基於函數的索引
ORACLE8.1.7字串可以索引的最大長度為1578單位元組
ORACLE8.0.6字串可以索引的最大長度為758單位元組
2.視圖(VIEW)
CREATEVIEW視圖名ASSELECT….FROM…..;
ALTERVIEW視圖名COMPILE;
視圖僅是一個SQL查詢語句,它可以把表之間複雜的關係簡潔化.
3.同義字(SYNONMY)
CREATESYNONYM同義字名FOR表名;
CREATESYNONYM同義字名FOR表名@資料庫連結名;
4.資料庫連結(DATABASELINK)
CREATEDATABASELINK資料庫連結名CONNECTTO使用者名稱IDENTIFIEDBY密碼USING‘資料庫連接字串’;
資料庫連接字串可以用NET8EASYCONFIG或者直接修改TNSNAMES.ORA裡定義.
資料庫參數global_name=true時要求資料庫連結名稱跟遠端資料庫名稱一樣
資料庫全域名稱可以用以下命令查出
SELECT*FROMGLOBAL_NAME;
查詢遠端資料庫裡的表
SELECT……FROM表名@資料庫連結名;
五.許可權管理(DCL)語句
1.GRANT賦於許可權
常用的系統許可權集合有以下三個:
CONNECT(基本的串連),RESOURCE(程式開發),DBA(資料庫管理)
常用的資料對象許可權有以下五個:
ALLON資料對象名,SELECTON資料對象名,UPDATEON資料對象名,
DELETEON資料對象名,INSERTON資料對象名,ALTERON資料對象名
GRANTCONNECT,RESOURCETO使用者名稱;
GRANTSELECTON表名TO使用者名稱;
GRANTSELECT,INSERT,DELETEON表名TO使用者名稱1,使用者名稱2;
2.REVOKE回收許可權
REVOKECONNECT,RESOURCEFROM使用者名稱;
REVOKESELECTON表名FROM使用者名稱;
REVOKESELECT,INSERT,DELETEON表名FROM使用者名稱1,使用者名稱2;
查詢資料庫中第63號錯誤:
selectorgaddr,destaddrfromsm_histable0116whereerror_code='63';
查詢資料庫中開戶使用者最大提交和最大下發數:selectMSISDN,TCOS,OCOSfromms_usertable;
查詢資料庫中各種錯誤碼的總和:
selecterror_code,count(*)fromsm_histable0513groupbyerror_codeorder
byerror_code;
查詢報表資料庫中話單統計種類查詢。
selectsum(Successcount)fromtbl_MiddleMt0411whereServiceType2=111
selectsum(successcount),servicetypefromtbl_middlemt0411groupbyservicetype
oracle資料庫的常見命令
1、su – oracle 不是必需,適合於沒有DBA密碼時使用,可以不用密碼來進入sqlplus介面。
2、sqlplus /nolog 或sqlplus system/manager 或./sqlplus system/manager@ora9i;
3、SQL>connect / as sysdba ;(as sysoper)或
connect internal/oracle AS SYSDBA ;(scott/tiger)
conn sys/change_on_install as sysdba;
4、SQL>startup; 啟動資料庫執行個體
5、 查看當前的所有資料庫: select * from v$database;
select name from v$database;
desc v$databases; 查看資料庫結構欄位
7、怎樣查看哪些使用者擁有SYSDBA、SYSOPER許可權:
SQL>select * from V_$PWFILE_USERS;
Show user;查看當前資料庫連接使用者
8、進入test資料庫:database test;
9、查看所有的資料庫執行個體:select * from v$instance;
如:ora9i
10、查看當前庫的所有資料表:
SQL> select TABLE_NAME from all_tables;
select * from all_tables;
SQL> select table_name from all_tables where table_name like ‘u’;
TABLE_NAME———————————————default_auditing_options
11、查看錶結構:desc all_tables;
12、顯示CQI.T_BBS_XUSER的所有欄位結構:
desc CQI.T_BBS_XUSER;
13、獲得CQI.T_BBS_XUSER表中的記錄:
select * from CQI.T_BBS_XUSER;
14、增加資料庫使用者:(test11/test)
create user test11 identified by test default tablespace users Temporary TABLESPACE Temp;
15、使用者授權:
grant connect,resource,dba to test11;
grant sysdba to test11;
commit;
16、更改資料庫使用者的密碼:(將sys與system的密碼改為test.)
alter user sys indentified by test;
alter user system indentified by test;
oracle 常用命令
baike.baidu.com/view/1239908.htm
SQL Plus 的命令, 差不多都在上面這個網頁裡面了。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| sqldoc |
| test |
+--------------------+
4 rows in set (0.00 sec)
Oracle 一個執行個體,就是一個資料庫, 所以,沒有對應的 show databases 語句
mysql> show tables
-> ;
+----------------+
| Tables_in_test |
+----------------+
| sale_report |
| test_dysql |
| union_tab_1 |
| union_tab_2 |
| v_sale_report |
+----------------+
5 rows in set (0.00 sec)
Oracle 使用下面的語句實現
SQL> SELECT
2 table_name
3 FROM
4 all_tables
5 WHERE
6 ROWNUM < 10;
TABLE_NAME
------------------------------------------------------------
ICOL$
CON$
UNDO$
PROXY_ROLE_DATA$
FILE$
UET$
IND$
SEG$
COL$
9 rows selected.
mysql> desc sale_report;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| SALE_DATE | datetime | NO | | NULL | |
| SALE_ITEM | varchar(2) | NO | | NULL | |
| SALE_MONEY | decimal(10,2) | NO | | NULL | |
+------------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
Oracle
SQL> desc all_tab_columns
Name ......餘下全文>>