一個剛開始學習Oracle數據庫的朋友寫的一篇教程,簡單介紹了Oracle數據庫的啟動與關閉。 首先談談數據庫實例和數據庫的區別。根據我的初步了解,數據庫實例是指的進程和內存(SGA)的統稱,沒有持久的數據文件;數據庫則是靜態存在的,實際上磁盤上存儲的物理文件。
接著簡單的說一下數據庫關閉的四種方式,第一 shutdown(正常關閉方式),這是最安全的關閉方式,他一直等待到最後一個用戶自己斷開與數據庫的連接,但是這種方式存在一個弊病,如果一個用戶一直連接在那裡,卻又沒做什麼操作,那麼數據庫將一直處於不能被關閉的狀態。第二種 shutdown immediate方式,這種一直等待到當前的SQL語句執行完以後就關閉,即使用戶沒有斷開與數據庫的連接。第三種 shutdown transaction ,這種一直等待到當前事務處理完後關閉。第四種 shutdown abort ,這是最暴力的一種關閉方式,直接強制關閉,可能會造成數據的丟失,但是當再次啟動還是會從分析日志文件進行回滾或是重做。最後這四種方式執行過程中,都不允許用戶增加新的連接。
接著就是真正說到數據庫實例數據庫的啟動和關閉了。首先是啟動,一般步驟是 1.啟動實例,2加載數據庫,3打開數據庫。
SQL>startup mount
這裡貌似還要設置什麼日志歸檔模式,還不熟悉。
SQL>alter database open;
然後是關閉數據庫 就是剛才說的那四種方式
我這裡用 shutdown immediate
但是我在實踐的時候直接用sys身份去執行shutdown正常關閉時,貌似就一直卡在那裡了,我猜想是由於我這個sys用戶沒有與數據庫斷開而導致關閉命令一直在等待的原因。但我們又要需要一個用戶去執行這個關閉命令,這時該怎麼辦呢?我想可能是用觸發器吧(歡迎讀者給我答案)
我們現在打開數據庫和關閉數據庫的最基本的完成了,然後我談談對打開數據庫為什麼是那三個步驟的理解:因為我們的數據庫文件是存在磁盤上的,我們要操作肯定是要先load到內存,所以我們就先啟動一個實例,實際上就是進程+內存區域,然後我們將數據庫mount到實例裡面(注意這裡不能用startup nomount),為了接下來使用數據庫裡面的文件,於是就打開數據庫 alter database open。
最後談談自己中間遇到的幾個問題
1>當我們沒有啟動實例,或是關閉了實例,用戶連接的時候就是提示connected to an idle instance(連接到一個空例程,感覺這翻譯不好)。
2>ORA-01507:如果我們沒有加載數據庫就alter database open
3>ORA-01031: insufficient privlIEges 翻譯過來就是權限不足
還有一些其他的常見錯誤,但那幾個感覺都聽容易解決的。在此就不羅列了
總結:Oracle很復雜,自己現在還是了解皮毛,要克制浮躁,沉下心來學習!