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
$sqlplususername/password
退出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,keywordPRIMARYKEY
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數據庫鏈接名CONNECTTOusernameIDENTIFIEDBYpasswordUSING‘數據庫連接字符串’;
數據庫連接字符串能夠用NET8EASYCONFIG或者直接改動TNSNAMES.ORA里定義.
數據庫參數global_name=true時要求數據庫鏈接名稱跟遠端數據庫名稱一樣
數據庫全局名稱能夠用下面命令查出
SELECT*FROMGLOBAL_NAME;
查詢遠端數據庫里的表
SELECT……FROM表名@數據庫鏈接名;
五.權限管理(DCL)語句
1.GRANT賦于權限
經常使用的系統權限集合有下面三個:
CONNECT(主要的連接),RESOURCE(程序開發),DBA(數據庫管理)
經常使用的數據對象權限有下面五個:
ALLON數據對象名,SELECTON數據對象名,UPDATEON數據對象名,
DELETEON數據對象名,INSERTON數據對象名,ALTERON數據對象名
GRANTCONNECT,RESOURCETOusername;
GRANTSELECTON表名TOusername;
GRANTSELECT,INSERT,DELETEON表名TOusername1,username2;
2.REVOKE回收權限
REVOKECONNECT,RESOURCEFROMusername;
REVOKESELECTON表名FROMusername;
REVOKESELECT,INSERT,DELETEON表名FROMusername1,username2;
查詢數據庫中第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
版權聲明:本文博客原創文章。博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/mengfanrong/p/4641414.html
總結
以上是生活随笔為你收集整理的ORACLE经常使用的命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net学习笔记----2015-07-
- 下一篇: nginx中的try_files指令解释