SQL> ALTER USER username IDENTIFIED BY password ACCOUNT UNLOCK
SQL> CREATE USER yzq IDENTIFIED BY "yezhuangqiao" ACCOUNT UNLOCK
這種啟動(dòng)模式只創(chuàng)建實(shí)例,并不加載數(shù)據(jù)庫(kù),Oracle僅為實(shí)例創(chuàng)建各種內(nèi)存結(jié)構(gòu)和服務(wù)進(jìn)程,不會(huì)打開任何數(shù)據(jù)庫(kù)文件。
這是正常啟動(dòng)模式。普通數(shù)據(jù)庫(kù)用戶要對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,比如連接數(shù)據(jù)庫(kù)并進(jìn)行查詢,數(shù)據(jù)庫(kù)必須處于OPEN啟動(dòng)模式
其中username/password必須是一個(gè)具有SYSOPER或SYSDBA權(quán)限的數(shù)據(jù)庫(kù)用戶賬戶,比如SYS或SYSTEM。
在執(zhí)行一些特殊的管理維護(hù)操作時(shí),需要進(jìn)入NOMOUNT啟動(dòng)模式。在完成操作后,可以使用如下語句為實(shí)例加載數(shù)據(jù)庫(kù),切換到MOUNT啟動(dòng)模式:
為實(shí)例加載數(shù)據(jù)庫(kù)后,數(shù)據(jù)庫(kù)可能仍然處于關(guān)閉狀態(tài)。為了使用戶能夠訪問數(shù)據(jù)庫(kù),可以使用如下語句打開數(shù)據(jù)庫(kù),切換到OPEN啟動(dòng)模式:
在正常啟動(dòng)模式下,即OPEN啟動(dòng)模式下,可以選擇將數(shù)據(jù)庫(kù)設(shè)置為非受限狀態(tài)或受限狀態(tài)。
在受限狀態(tài)下,只有具有管理權(quán)限的用戶(DBA)才能夠訪問數(shù)據(jù)庫(kù)。當(dāng)需要進(jìn)行如下數(shù)據(jù)庫(kù)維護(hù)操作時(shí),必須將數(shù)據(jù)庫(kù)置于受限狀態(tài)下:
a、執(zhí)行數(shù)據(jù)導(dǎo)入或?qū)С霾僮鳌?/div>
b、使用SQL*Loader提取外部數(shù)據(jù)庫(kù)。
c、需要暫時(shí)拒絕普通用戶訪問數(shù)據(jù)庫(kù)。
d、進(jìn)行數(shù)據(jù)庫(kù)移植或者升級(jí)操作。
使用下面的語句啟動(dòng)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)將進(jìn)入受限狀態(tài)的OPEN模式:
STARTUP RESTRICT
如果在完成管理操作后需要將數(shù)據(jù)庫(kù)恢復(fù)為非受限狀態(tài),可以使用ALTER SYSTEM語句來改變數(shù)據(jù)庫(kù)的狀態(tài),執(zhí)行該語句的用戶必須具有ALTER SYSTEM系統(tǒng)權(quán)限。比如:
ALTER SYSTEM DISABLE RESTRICTED SESSION;
如果需要在數(shù)據(jù)庫(kù)運(yùn)行過程中由非受限狀態(tài)切換到受限狀態(tài),同樣可以通過ALTER SYSTEM語句來實(shí)現(xiàn)。比如:
ALTER SYSTEM ENBALE RESTRICTED SESSION;
2、只讀狀態(tài)
當(dāng)數(shù)據(jù)庫(kù)處于只讀狀態(tài)時(shí),用戶只能查詢數(shù)據(jù)庫(kù),但是不能以任何方式對(duì)數(shù)據(jù)庫(kù)對(duì)象進(jìn)行修改。
可以使用ALTER DATABASE語句在數(shù)據(jù)庫(kù)運(yùn)行過程中切換為只讀模式,執(zhí)行該語句的用戶必須具有ALTER DATABASE系統(tǒng)權(quán)限。比如:
ALTER DATABASE OPEN READ ONLY;
同樣可以利用ALTER DATABASE語句重新將數(shù)據(jù)庫(kù)設(shè)置為讀寫狀態(tài),比如:
ALTER DATABASE OPEN READ WRITE;
4.1.8 強(qiáng)行啟動(dòng)數(shù)據(jù)庫(kù)
在某些情況下,使用上述各種啟動(dòng)模式可能都無法成功啟動(dòng)數(shù)據(jù)庫(kù),這時(shí)需要強(qiáng)行啟動(dòng)數(shù)據(jù)庫(kù)。在如下幾種情況下需要強(qiáng)行啟動(dòng)數(shù)據(jù)庫(kù):
a、無法使用SHUTDOWN NORMAL、SHUTDOWN IMMEDIATE或者SHUTDOWN TRANSACTIONAL語句關(guān)閉數(shù)據(jù)庫(kù)實(shí)例。
b、在啟動(dòng)實(shí)例時(shí)出現(xiàn)無法恢復(fù)的錯(cuò)誤。
出現(xiàn)上述情況時(shí),可以通過強(qiáng)行方式來重新啟動(dòng)一個(gè)新的數(shù)據(jù)庫(kù)實(shí)例,以便進(jìn)行故障查找和排除操作。強(qiáng)行啟動(dòng)數(shù)據(jù)庫(kù)需要使用帶有FORCE子句的STARTUP語句,比如:
STARTUP FORCE;
4.2.2 正常關(guān)閉方式(NORMAL)
如果對(duì)關(guān)閉數(shù)據(jù)庫(kù)的時(shí)間沒有限制,通常會(huì)使用正常方式來關(guān)閉數(shù)據(jù)庫(kù)。使用帶有NORMAL子句的SHUTDOWN語句將以正常方式關(guān)閉數(shù)據(jù)庫(kù)。下面顯示了在SQL*Plus中以正常方式關(guān)閉過程:
SQL> SHUTDOWN NORMAL;
正常方式關(guān)閉數(shù)據(jù)庫(kù)時(shí),Oracle將執(zhí)行如下操作:
a、阻止任何用戶建立新的連接。
b、等待當(dāng)前所有正在連接的用戶主動(dòng)斷開連接。正在連接的用戶能夠繼續(xù)他們當(dāng)前的工作,甚至能夠提交新的事務(wù)。
c、一旦所有用戶都斷開連接,立刻關(guān)閉、卸載數(shù)據(jù)庫(kù),并終止實(shí)例。
4.2.3 立即關(guān)閉方式(IMMEDIATE)
立即方式能夠在盡可能短的時(shí)間內(nèi)關(guān)閉數(shù)據(jù)庫(kù)。通常在如下幾種情況下需要使用立即方式來關(guān)閉數(shù)據(jù)庫(kù):
a、即將啟動(dòng)自動(dòng)數(shù)據(jù)備份操作。
b、即將發(fā)生電力供應(yīng)中斷。
c、當(dāng)數(shù)據(jù)庫(kù)本身或某個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序發(fā)生異常,并且這時(shí)無法通知用戶主動(dòng)斷開連接,或者用戶根本無法執(zhí)行斷開操作。
使用帶有IMMEDIATE子句的SHUTDOWN語句將以立即方式關(guān)閉數(shù)據(jù)庫(kù),比如:
SHUTDOWN IMMEDIATE
立即方式關(guān)閉數(shù)據(jù)庫(kù)時(shí),Oracle將執(zhí)行如下操作:
a、阻止任何用戶建立新的連接,同時(shí)阻止當(dāng)前連接的用戶開始任何新的事務(wù)。
b、任何未提交的事務(wù)均被回退。
c、Oracle不再等待用戶主動(dòng)斷開連接,直接關(guān)閉、卸載數(shù)據(jù)庫(kù),并終止實(shí)例。
4.2.4 事務(wù)關(guān)閉方式(TRANSACTIONAL)
事務(wù)方式介于正常方式與立即方式之間,它能夠使用盡可能短的時(shí)間關(guān)閉數(shù)據(jù)庫(kù),但是所有能保證當(dāng)前所有的活動(dòng)事務(wù)都可以被提交。使用事務(wù)方式關(guān)閉數(shù)據(jù)庫(kù)時(shí),Oracle將等待所有未提交的事務(wù)完成后再關(guān)閉數(shù)據(jù)庫(kù)。
使用帶有TRANSACTIONAL子句的SHUTDOWN語句將以事務(wù)方式關(guān)閉數(shù)據(jù)庫(kù),比如:
SHUTDOWN TRANSACTIONAL
事務(wù)方式關(guān)閉數(shù)據(jù)庫(kù)時(shí),Oracle將執(zhí)行如下操作:
a、阻止任何用戶建立新的連接,同時(shí)阻止當(dāng)前連接的用戶開始任何新的事務(wù)。
b、等待所有未提交的活動(dòng)事務(wù)提交完畢,然后立即斷開用戶的連接。
c、關(guān)閉、卸載數(shù)據(jù)庫(kù),并終止實(shí)例。
提示:事務(wù)關(guān)閉方式既能保證用戶不會(huì)丟失當(dāng)前工作的信息,又可以盡可能快地關(guān)閉數(shù)據(jù)庫(kù)。事務(wù)關(guān)閉方式也是最常用的數(shù)據(jù)庫(kù)關(guān)閉方式。如果以事務(wù)方式關(guān)閉數(shù)據(jù)庫(kù),在下次啟動(dòng)數(shù)據(jù)庫(kù)時(shí)不需要進(jìn)行任何恢復(fù)操作。
4.2.5 終止關(guān)閉方式(ABORT)
如果上述三種關(guān)閉方式都無法成功關(guān)閉數(shù)據(jù)庫(kù),說明數(shù)據(jù)庫(kù)產(chǎn)生了嚴(yán)重的錯(cuò)誤。這時(shí)只能使用終止方式來關(guān)閉數(shù)據(jù)庫(kù)。終止關(guān)閉方式將丟失一部分?jǐn)?shù)據(jù)信息,會(huì)對(duì)數(shù)據(jù)庫(kù)的完整性造成損害,需要在下一次啟動(dòng)數(shù)據(jù)庫(kù)時(shí)進(jìn)行恢復(fù),因此應(yīng)當(dāng)盡量避免使用終止方式來關(guān)閉數(shù)據(jù)庫(kù)。
在如下幾種特殊情況中,應(yīng)當(dāng)使用終止關(guān)閉方式:
a、數(shù)據(jù)庫(kù)本身或某個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序發(fā)生異常,并且使用其他關(guān)閉方式均無效時(shí)。
b、出現(xiàn)緊急情況,需要立刻關(guān)閉數(shù)據(jù)庫(kù)(比如得到通知將在一分鐘內(nèi)發(fā)生電力供應(yīng)中斷)。
c、在啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例的過程中產(chǎn)生錯(cuò)誤。
使用帶有ABORT子句的SHUTDOWN語句將以終止方式關(guān)閉數(shù)據(jù)庫(kù),比如:
SHUTDOWN ABORT
終止方式關(guān)閉數(shù)據(jù)庫(kù)時(shí),Oracle將執(zhí)行如下操作:
a、阻止任何用戶建立新的連接,同時(shí)阻止當(dāng)前連接的用戶開始任何新的事務(wù)。
b、立即終止當(dāng)前正在執(zhí)行的SQL語句。
c、任何未提交的事務(wù)均不被回退。
d、立即斷開所有用戶的連接,關(guān)閉、卸載數(shù)據(jù)庫(kù),并終止實(shí)例。
如果以終止方式關(guān)閉數(shù)據(jù)庫(kù),由于當(dāng)前未完成的事務(wù)并不會(huì)被回退,所以當(dāng)下次啟動(dòng)數(shù)據(jù)庫(kù)時(shí)需要進(jìn)行數(shù)據(jù)庫(kù)恢復(fù)。
4.3.1 靜默狀態(tài)
1、靜默狀態(tài)的特點(diǎn)
有時(shí)DBA會(huì)需要將數(shù)據(jù)庫(kù)置于靜默狀態(tài)。在靜默狀態(tài)下,只有具有DBA權(quán)限的用戶能夠在數(shù)據(jù)庫(kù)中執(zhí)行查詢、更新操作,運(yùn)行PL/SQL程序,任何非DBA用戶都不能在數(shù)據(jù)庫(kù)中執(zhí)行任何操作。
DBA在執(zhí)行某些操作時(shí),必須排除其他用戶的活動(dòng)。這類操作包括如下兩類:
a、某些操作在執(zhí)行過程中,如果有其他用戶訪問操作的對(duì)象,該操作將會(huì)失敗。比如,當(dāng)DBA在某個(gè)表添加一個(gè)新的字段時(shí),如果有用戶恰好正在使用這個(gè)表,添加字段的操作將失敗。
b、某些操作在執(zhí)行過程中產(chǎn)生的中間結(jié)果不應(yīng)當(dāng)被其他用戶看到。比如,假設(shè)DBA要執(zhí)行一項(xiàng)分為多個(gè)步驟的操作:首先要導(dǎo)出一個(gè)表的數(shù)據(jù),然后刪除這個(gè)表,最后再重新導(dǎo)入數(shù)據(jù)庫(kù)建立新的表,以達(dá)到重建該表的目的。而如果有某個(gè)用戶在刪除表之后,重建表之前訪問這個(gè)表,將會(huì)得到錯(cuò)誤的結(jié)果。
如果沒有靜默功能,要保證成功完成上述類型的操作必須首先關(guān)閉數(shù)據(jù)庫(kù),然后再使用受限模式打開數(shù)據(jù)庫(kù)。這樣做的代價(jià)是很大的,尤其是在必須保證數(shù)據(jù)庫(kù)不間斷運(yùn)行的環(huán)境中(7×24系統(tǒng))。而使數(shù)據(jù)庫(kù)進(jìn)入靜默狀態(tài)可以快速達(dá)到相同的目的,但是卻并不需要中斷數(shù)據(jù)庫(kù)的運(yùn)行。
注意:在Oracle9i中,處于靜默狀態(tài)時(shí)只允許SYS和SYSTEM兩個(gè)DBA用戶執(zhí)行操作,其他用戶即使被授予DBA角色或SYSDBA權(quán)限,也不能夠在靜默狀態(tài)的數(shù)據(jù)庫(kù)中進(jìn)行操作。因此,靜默狀態(tài)是比受限狀態(tài)更為“干凈”的狀態(tài)。
2、進(jìn)入靜默狀態(tài)
在數(shù)據(jù)庫(kù)運(yùn)行過程中,執(zhí)行如下語句將進(jìn)入靜默狀態(tài):
ALTER SYSTEM QUIESCE RESTRICTED;
注意:只有SYS和SYSTEM用戶有權(quán)限執(zhí)行ALTER SYSTEM QUIESCE RESTRICTED語句,具有DBA權(quán)限的其他用戶不能將數(shù)據(jù)庫(kù)置為靜默狀態(tài)。
在靜默狀態(tài)中,即使某個(gè)非DBA用戶試圖執(zhí)行一條SQL語句強(qiáng)行激活某個(gè)會(huì)話,該SQL語句也會(huì)被掛起。當(dāng)數(shù)據(jù)庫(kù)從靜默狀態(tài)中恢復(fù)時(shí),停止的會(huì)話將繼續(xù)執(zhí)行,前面被掛起的SQL語句也會(huì)繼續(xù)執(zhí)行。
由于等待所有的非DBA用戶會(huì)話都被終止可能會(huì)要很長(zhǎng)一段時(shí)間,在這個(gè)過程中如果執(zhí)行ALTER SYSTEM語句的會(huì)話被意外終止,進(jìn)入靜默狀態(tài)的操作將被撤銷,已經(jīng)暫停的會(huì)話將被恢復(fù)。
3、退出靜默狀態(tài)
如果數(shù)據(jù)庫(kù)正處于靜默狀態(tài),執(zhí)行如下語句將從靜默狀態(tài)恢復(fù)為正常狀態(tài):
ALTER SYSTEM UNQUIESCE;
4、查詢靜默狀態(tài)
可以通過使用動(dòng)態(tài)性能試圖V$INSTANCE來查詢當(dāng)前數(shù)據(jù)庫(kù)是否處于靜默狀態(tài)。V$INSTANCE視圖中的ACTIVE_STATUS字段顯示了數(shù)據(jù)庫(kù)當(dāng)前的活動(dòng)狀態(tài):
a、NORMAL 正常狀態(tài)(非靜默狀態(tài))。
b、QUIESCING 正在進(jìn)入靜默狀態(tài)(仍然存在活動(dòng)的非DBA用戶會(huì)話)。
c、QUIESCED 靜默狀態(tài)(已經(jīng)沒有活動(dòng)的非DBA用戶會(huì)話)。
在下面的示例中顯示了如何改變和查詢數(shù)據(jù)庫(kù)的靜默狀態(tài):
SQL> ALTER SYSTEM QUIESCE RESTRICTED;
系統(tǒng)已更改。
SQL> SELECT ACTIVE_STATE FROM V$INSTANCE;
ACTIVE_ST
---------
QUIESCED
SQL> ALTER SYSTEM UNQUIESCE;
系統(tǒng)已更改。
SQL> SELECT ACTIVE_STATE FROM V$INSTANCE;
ACTIVE_ST
---------
NORMAL
4.3.2 掛起狀態(tài)
1、掛起狀態(tài)的特點(diǎn)
當(dāng)數(shù)據(jù)庫(kù)處于掛起狀態(tài)時(shí),數(shù)據(jù)庫(kù)所有的物理文件(控制文件、數(shù)據(jù)文件以及重做日志文件)的I/O操作都被暫停。這樣就能保證數(shù)據(jù)庫(kù)在沒有任何I/O操作的情況下進(jìn)行物理備份。掛起狀態(tài)與靜默狀態(tài)的區(qū)別是:它并不禁止非DBA用戶進(jìn)行數(shù)據(jù)庫(kù)操作,只是暫時(shí)停止所有用戶的I/O操作。
當(dāng)數(shù)據(jù)庫(kù)處于掛起狀態(tài)時(shí),可以首先為數(shù)據(jù)庫(kù)創(chuàng)建硬盤鏡像,然后再?gòu)溺R像中分離出備份文件,這樣就提供了一種進(jìn)行數(shù)據(jù)庫(kù)備份和恢復(fù)的替代辦法。比如,數(shù)據(jù)庫(kù)原本運(yùn)行在一個(gè)具有硬盤鏡像的系統(tǒng)中,但是在存在硬盤I/O操作的情況下,無法將鏡像文件分離出來。這時(shí)可以先將數(shù)據(jù)庫(kù)置為掛起狀態(tài),然后在停止所有I/O操作的狀態(tài)下進(jìn)行分離操作。
在數(shù)據(jù)庫(kù)進(jìn)入掛起狀態(tài)時(shí),當(dāng)前的所有I/O操作能夠繼續(xù)進(jìn)行,但是所有新提交的I/O操作不會(huì)執(zhí)行,而是被放入一個(gè)等待隊(duì)列中。一旦數(shù)據(jù)庫(kù)恢復(fù)到正常狀態(tài),這些I/O操作將從隊(duì)列中取出并繼續(xù)執(zhí)行。
2、進(jìn)入掛起狀態(tài)
掛起數(shù)據(jù)庫(kù)操作可以通過ALTER SYSTEM語句完成,執(zhí)行該語句的用戶必須具有ALTER SYSTEM系統(tǒng)權(quán)限。比如:
ALTER SYSTEM SUSPEND;
3、退出掛起狀態(tài)
如果要將數(shù)據(jù)庫(kù)從掛起狀態(tài)中恢復(fù),可以使用如下語句:
ALTER SYSTEM RESUME;
4、查詢掛起狀態(tài)
可以通過使用動(dòng)態(tài)性能視圖V$INSTANCE來查詢當(dāng)前數(shù)據(jù)庫(kù)是否處于掛起狀態(tài)。V$INSTANCE視圖中的DATABASE_STATUS字段顯示了數(shù)據(jù)庫(kù)當(dāng)前的活動(dòng)狀態(tài):
a、SUSPENDED 掛起狀態(tài)。
b、ACTIVED 正常狀態(tài)(非掛起狀態(tài))。
下面的示例顯示了如何改變和查詢數(shù)據(jù)庫(kù)的掛起狀態(tài):
SQL> ALTER SYSTEM SUSPEND;
系統(tǒng)已更改。
SQL> SELECT DATABASE_STATUS FROM V$INSTANCE;
DATABASE_STATUS
-----------------
SUSPENDED
SQL> ALTER SYSTEM RESUME;
系統(tǒng)已更改。
SQL> SELECT DATABASE_STATUS FROM V$INSTANCE;
DATABASE_STATUS
-----------------
ACTIVE