程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle如何關閉數據庫

Oracle如何關閉數據庫

編輯:Oracle數據庫基礎
 

總結了關於Oracle啟動過程中涉及的一些知識點,以及Oracle啟動的一些基本的原理知識。說完了啟動,那麼這篇文章就要說到關閉了。數據庫有關就有閉了,而這個關閉數據庫的操作,在工作中卻經常遇到,所以對於如何關閉Oracle數據庫,我就總結了這篇文章。

工作中為什麼要關閉數據庫呢?有的時候,進行上線任務,需要將當前生產數據庫切換到容災庫,切換完成以後,關閉生產數據庫,進行一系列的上線操作,上線完成以後,啟動生產數據庫,並從容災庫切換回來。這就是實際工作中遇到的場景,需要對數據庫進行啟、停操作。

關閉“三步走”

有了《Oracle學習筆記——數據庫啟動原理》這篇文章的鋪墊,大家都知道了數據庫的啟動分為三步;同理,對於數據庫的關閉,也分為三步,而這三步正好與啟動的三步是一一對應的關系:
1.關閉數據庫; (對應打開數據庫)
2.卸載數據庫; (對應加載數據庫)
3.關閉實例。 (對應啟動實例)

在關閉數據庫階段,Oracle首先把SGA中的數據寫到數據文件和重做日志中。然後,Oracle關閉所有的數據文件和重做日志文件。此時,不是管理員的你不再可以訪問數據庫了。

在成功關閉數據庫以後,就需要卸載數據庫,這一步只是將數據庫與實例接觸綁定關系,實例並沒有被關閉,接下來就需要關閉實例。

關閉實例也就是關閉所有的Oracle相關後台進程,以及釋放啟動實例時申請的內存。這一步成功完成以後,也就意味著數據庫成功的被關閉了。

以上是關閉數據庫的具體的三個步驟,但是從命令行操作的角度來說,對於Oracle數據庫的關閉方式有以下四種:
•NORMAL方式
•IMMEDIATE方式
•TRANSACTIONAL方式
•ABORT方式

下面就對這四種關閉數據庫的方式進行詳解。

NORMAL方式

這是一種最糟糕,使用最少(至少我幾乎不用)的一種關閉數據庫的方式。為什麼糟糕?由於這種方式實在是太慢了,導致使用者有的時候是無法忍受的,使用這種方法關閉數據庫時會進行以下的操作:
•允許新的連接請求;
關閉數據庫時,當你敲出命令,按下回車;在你按下回車到數據庫真正關閉這段時間內,如果還有用戶連接數據庫,Oracle是允許你連接的。這就好比,我的店要打烊了,但是我還允許顧客進來購物,這就有可能你的店永遠不能打烊;
•由於允許新的連接請求,這就決定了不能輕易的斷開用戶的連接請求;需要等到所有用戶自動退出以後,Oracle才會被關閉。如果你不阻止顧客的光臨,你的小店可能需要7*24*365服務了。

如果有用戶就是不關閉連接。使用這種方式時,你永遠也無法關閉數據庫。輸入以下命令,就是以NORMAL方式關閉Oracle數據庫:
SHUTDOWN NORMAL;

-- 你也可以直接SHUTDOWN
SHUTDOWN;

IMMEDIATE方式

這種關閉數據庫的方式在工作中是使用頻率最高的一種方式,使用這種方法關閉數據庫時會進行以下的操作:
•新的連接請求都不會被允許;
關閉數據庫時,當你敲出命令,按下回車,數據庫不會再一瞬間就會被關閉的;在你按下回車到數據庫真正關閉這段時間內,如果還有用戶連接數據庫,此時是不會連接成功的;
•未提交的事務將會被回滾;
當按下回車,發出關閉數據庫的指令時,以前一直保持連接的用戶,可能存在著一些未提交的事務,而在IMMEDIATE方式下,這些未提交的事務都會進行回滾,所以不會發生數據的不一致性;
•直接干掉所有連接的用戶;
當按下回車,發出關閉數據庫的指令時,而在IMMEDIATE方式下,Oracle沒有耐心去等待所有保持連接的用戶主動退出,而是會單方面直接切斷用戶的連接。

使用這種方式關閉數據庫的好處是——安全,所有未提交的事務都回滾了,當再次啟動數據庫時不需要進行實例恢復。輸入以下命令,就是以IMMEDIATE方式關閉Oracle數據庫:
SHUTDOWN IMMEDIATE;

TRANSACTIONAL方式

這種方式雖然很慢,但是很人性化,為什麼說它人性化呢,你看看它做的事情就知道了:
•不允許新的用戶連接數據庫;
•不允許建立新的事務;
•所有的事務完成以後才關閉數據庫;(你的數據有保障)
•一個會話執行完手裡的事務後將被強行斷開與數據庫的連接。

這種方式很安全,你的數據肯定是不會被丟失的;但是很慢,你要等到所有的事務完成以後,才會關掉。

ABORT方式

這是最粗魯、最野蠻的關閉方式。當你需要使用這種方式時,順便祈禱一下數據庫不要出現問題,使用這種方式,看看都會進行以下的操作:
•不允許新的連接和新的事務;
•客戶端的SQL語句立刻被終止;
•未提交的事務不被回滾(哦,你的數據!!!不一致性)
•Oracle終止所有連接;

看到了麼?都是強制手段,Oracle單方面撕毀所有“合同”;一般使用這種方式關閉數據庫時,應該是出現什麼問題了。

當我們使用以下命令重啟數據庫時,就意味著,背後在使用ABORT方式關閉數據庫:
STARTUP FORCE;

打個比方

關閉Oracle數據庫就好比超市晚上打烊。
•對於NORMAL方式來說,超市永遠都不會拒絕客人,來一位就接待一位,來兩位就接待兩位;同時也永遠不會趕客人,不會出現“我們要下班了,你們立刻出去,我們不做生意了”這種情況;顧客是上帝,只有所有的顧客都滿意的離開超市以後,才會打烊;
•對於IMMEDIATE方式來說,到了打烊的點了,立馬不接待新的顧客;而超市現有的沒結賬的顧客,需要將選購的物品再放回貨架,然後將這些顧客通通趕出去,然後說一句:我們打烊了,明天再來吧。
•對於TRANSACTIONAL方式來說,到了打烊的點了,新的顧客就不會被接待了,而超市現有沒結賬的顧客還可以繼續選購自己的貨物,直到你付賬離開;當所有的顧客都離開以後,超市就可以打烊了;
•對於ABORT方式來說,到了打烊的點,新的顧客就不會被接待了,而超市現有沒結賬的顧客會要求立刻結賬,不允許再選購物品了,然後就關門大吉。

這就是關閉Oracle數據庫的幾種方式,你清楚了嗎?

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved