下面是工作中對Oracle日常管理操作的一些總結,都是一些基本的oracle操作和SQL語句寫法,在此梳理成手冊,希望能幫助到初學者(如有梳理不準確之處,希望指出)。
一、資料庫的啟動和關閉
1.1 資料庫的正常啟動步驟 要想啟動或關閉ORACLE系統必須首先切換到ORACLE使用者 [root@kevin ~]# su - oracle 以DBA的身份登入資料庫(oracle使用者下執行) [oracle@kevin ~]$ sqlplus "/as sysdba" 執行啟動資料庫命令 SQL> startup ORACLE instance started. Total System Global Area 285212672 bytes Fixed Size 1218968 bytes Variable Size 88082024 bytes Database Buffers 188743680 bytes Redo Buffers 7168000 bytes Database mounted. Database opened. 啟動和關閉監聽(oracle使用者下執行) [oracle@kevin ~]$ lsnrctl start [oracle@kevin ~]$ lsnrctl stop 1.2 資料庫的正常關閉步驟 同樣以DBA的身份登入資料庫 [oracle@kevin ~]$ sqlplus "/as sysdba" 執行資料庫關閉命令 SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down.
1.3 幾種關閉資料庫方法對比 shutdown有四個引數:normal、transactional、immediate、abort。預設不帶任何引數時表示是normal。 shutdown normal: 不允許新的連線、等待會話結束、等待事務結束、做一個檢查點並關閉資料檔案。啟動時不需要例項恢復,這種方法往往不能關閉資料庫或等待很長時間。 shutdown transactional: 不允許新的連線、不等待會話結束、等待事務結束、做一個檢查點並關閉資料檔案。啟動時不需要例項恢復。 shutdown immediate: 不允許新的連線、不等待會話結束、不等待事務結束、做一個檢查點並關閉資料檔案。沒有結束的事務是自動rollback的。啟動時不需要例項恢復。最常用的方法。 shutdown abort: 不允許新的連線、不等待會話結束、不等待事務結束、不做檢查點且沒有關閉資料檔案。啟動時自動進行例項恢復。一般不推薦採用,只有在資料庫無法關閉時使用,可能造成資料庫的不一致。
----------------------------------------------------------------------------------------------------------
Oracle資料庫的啟動關閉的幾種方式
--> 啟動資料庫
Oracle啟動過程涉及幾種模式,這些模式涉及不同的檔案,每個狀態下資料庫做不同的事情,同時這些模式適用於不同的維護需求,主要的模式有三種:NOMOUNT、MOUNT、OPEN。
NOMOUNT:啟動資料庫例項, 此時讀取引數檔案,但是不載入資料庫;
MOUNT:啟動資料庫例項,載入資料庫,但是資料庫處於關閉狀態;
OPEN:啟動資料庫例項,載入並開啟資料庫;
FORCE:終止例項並重啟資料庫,這種模式在資料庫關閉或者啟動遇到問題時使用,這種方式不到萬不得已時不要使用,會有資料丟失;
1)NOMOUNT
這種模式只會建立例項(建立Oracle例項的各種記憶體結構與服務程式,其中有5個程式必須啟動, DBWR、LGWR、SMON、PMON、CKPT),並不載入資料庫,也不會開啟任何資料檔案。
先關閉資料庫
SQL> start nomount;
資料庫的啟動過程記錄在警告追蹤檔案中,該警告追蹤檔案中包括資料庫啟動資訊,它存放在引數BACKGOUND_DUMP_DEST定義的目錄下,警告日誌的名字為alert_orcl.log
進入到目錄檢視警告日誌關於startup nomount過程記錄
測試在nomount狀態時資料字典是否打的開,下圖說明資料庫字典在nomount狀態下是無法訪問的,因為資料字典需要從控制檔案獲取檔案的資訊,而此時控制檔案沒有開啟所以無法檢視。
但是在nomount下可以通過引數檔案獲得控制檔案的位置,因為此時引數檔案已經開啟
2)MOUNT
這種模式將啟動例項,載入資料庫並保持資料庫關閉狀態。資料庫啟動到MOUNT狀態有兩種方式,一是可以直接啟動資料庫到MOUNT,二是如果資料庫已經啟動到NOMOUNT狀態,使用alter database mount把資料庫切換到MOUNT狀態;
SQL> alert database mount;
SQL> startup mount
此時我們可以檢視資料字典,因為控制檔案已經開啟
但是此時不能訪問資料庫的資料檔案(表,檢視),檔案此時資料檔案沒有開啟。
3)OPEN
這種模式將啟動例項,載入並開啟資料庫,這是常規的啟動模式,使用者想要對資料庫進行多種操作就必須使用OPEN模式啟動資料庫,啟動到OPEN狀態,有兩種方式,一是直接啟動到OPEN狀態(使用startup或者startup open),二是如果資料庫處於NOMOUNT或者MOUNT狀態,可以通過alter database open切換到OPEN狀態。
此時可以訪問資料檔案了
4)FORCE
這種模式將終止例項並重啟資料庫,這是一種強制性啟動模式,只有在啟動或者關閉出現問題時才使用,並且有一定的風險,會丟失資料,造成意外的問題。
--> 關閉資料庫
與啟動資料庫順序相反,也分三個步驟:關閉資料庫(CLOSE 關閉資料檔案),解除安裝資料庫(關閉控制檔案 DISMOUNT),關閉Oracle例項(SHUTDOWN)。同時關閉模式也有多種常見的有:
1)NORMAL
正常的關閉方式,如果對於關閉資料庫的時間沒有限制,通常採用這種方式,以NORMAL方式關閉資料庫,Oracle將執行如下操作:
- 阻止任何使用者建立新的連線;
- 等待當前所有正在連線的使用者主動斷開連線;
- 當前所有使用者的都斷開連線後,將立即關閉資料庫;
2)TRANSACTION
事務關閉方式,它的首要任務是保證當前所有活動的事務都可以被提交,並在儘可能短的時間內關閉資料庫。以事務方式關閉,Oracle將執行如下操作:
- 阻止使用者建立新連線和開始新事務;
- 等待所有活動事務提交後,再斷開使用者連線;
- 當所有活動事務提交完畢,使用者斷開連線後,關閉資料庫;
3)IMMEDIATE
立即關閉方式,可以較快且安全的關閉資料庫,是DBA經常採用的關閉資料庫的方式,立即關閉方式,Oracle執行如下操作:
- 阻止使用者建立新的連線和開始新的事務;
- 中斷當前事務,回滾未提交事務;
- 強制斷開所有使用者連線和執行檢查點把髒資料寫到資料檔案中;
- 關閉資料庫
----------------------------------------------------------------------------------------------------------
oracle幾種啟動方式說明 ----------------------------------------------------------------------------- 1)startup nomount 非安裝啟動,這種方式啟動下可執行:重建控制檔案、重建資料庫 讀取init.ora檔案,啟動instance,即啟動SGA和後臺程式,這種啟動只需要init.ora檔案。 2)startup mount dbname 安裝啟動,這種方式啟動下可執行: 資料庫日誌歸檔、 資料庫介質恢復、 使資料檔案聯機或離線, 重新定位資料檔案、重做日誌檔案。 執行“nomount”,然後開啟控制檔案,確認資料檔案和聯機日誌檔案的位置, 但此時不對資料檔案和日誌檔案進行校驗檢查。 3)startup open dbname 先執行“nomount”,然後執行“mount”,再開啟包括Redo log檔案在內的所有資料庫檔案, 這種方式下可訪問資料庫中的資料。 4)startup,等於以下三個命令 startup nomount alter database mount alter database open 5)startup restrict 約束方式啟動 這種方式能夠啟動資料庫,但只允許具有一定特權的使用者訪問 非特權使用者訪問時,會出現以下提示: ERROR: ORA-01035: ORACLE 只允許具有 RESTRICTED SESSION 許可權的使用者使用 6)startup force 強制啟動方式 當不能關閉資料庫時,可以用startup force來完成資料庫的關閉 先關閉資料庫,再執行正常啟動資料庫命令 7)startup pfile=引數檔名 帶初始化引數檔案的啟動方式 先讀取引數檔案,再按引數檔案中的設定啟動資料庫 例:startup pfile=E:\Oracle\admin\oradb\pfile\init.ora 8)startup EXCLUSIVE oracle幾種關閉方式說明 ----------------------------------------------------------------------------- 有三種關閉方式: 1)shutdown normal 正常方式關閉資料庫。 2)shutdown immediate 立即方式關閉資料庫。 在SVRMGRL中執行shutdown immediate,資料庫並不立即關閉, 而是在Oracle執行某些清除工作後才關閉(終止會話、釋放會話資源), 當使用shutdown不能關閉資料庫時,shutdown immediate可以完成資料庫關閉的操作。 3)shutdown abort 直接關閉資料庫,正在訪問資料庫的會話會被突然終止, 如果資料庫中有大量操作正在執行,這時執行shutdown abort後,重新啟動資料庫需要很長時間。 oracle關閉過程和啟動相反,經歷了close、dismount、shutdown。可以分步關閉,也可以直接關閉。 分步關閉: 1)close資料庫:關閉資料檔案、日誌檔案等。 SQL> alter database close; 資料庫已更改。 2)dismount資料庫:關閉控制檔案。 SQL> alter database dismount; 資料庫已更改。 3)shutdown資料庫:關閉例項。 shutdown有4個引數:shutdown normal(預設)、shutdown immediate(推薦)、shutdown transactional、shutdown abort SQL> shutdown 資料庫已經關閉。 已經解除安裝資料庫。 ORACLE 例程已經關閉。 oracle這幾種啟動和關閉方式之間的區別以及它們各自不同的功能 ----------------------------------------------------------------------------- 1)啟動和關閉Oracle資料庫 對於大多數Oracle DBA來說,啟動和關閉Oracle資料庫最常用的方式就是在命令列方式下的Server Manager。從Oracle 8i以後,系統將Server Manager的所有功能都集中到了SQL*Plus中,也就是說從8i以後對於資料庫 的啟動和關閉可以直接通過SQL*Plus來完成,而不再另外需要Server Manager,但系統為了保持向下相容,依舊保留了Server Manager工具。另外也可通過圖形使用者工具(GUI)的Oracle Enterprise Manager來完成系統 的啟動和關閉,圖形使用者介面Instance Manager非常簡單,這裡不再詳述。要啟動和關閉資料庫,必須要以具有Oracle 治理員許可權的使用者登陸,通常也就是以具有SYSDBA許可權的使用者登陸。一般我們常用INTERNAL使用者來啟動和 關閉資料庫(INTERNAL使用者實際上是SYS使用者以SYSDBA連線的同義詞)。Oracle資料庫的新版本將逐步淘汰INTERNAL這個內部使用者,所以我們最好還是設定DBA使用者具有SYSDBA許可權。 2)資料庫的啟動(STARTUP) 啟動一個資料庫需要三個步驟: -> 建立一個Oracle例項(非安裝階段) -> 由例項安裝資料庫(安裝階段) -> 開啟資料庫(開啟階段) 在Startup命令中,可以通過不同的選項來控制資料庫的不同啟動步驟。 1)STARTUP NOMOUNT NONOUNT選項僅僅建立一個Oracle例項。讀取init.ora初始化引數檔案、啟動後臺程式、初始化系統全域性區(SGA)。Init.ora 檔案定義了例項的配置,包括記憶體結構的大小和啟動後臺程式的數量和型別等。例項名根據 Oracle_SID設定,不一定要與開啟的資料庫名稱相同。當例項開啟後,系統將顯示一個SGA記憶體結構和大小的列表,如下所示: SQL> startup nomount; ORACLE 例程已經啟動。 Total System Global Area 35431692 bytes Fixed Size 70924 bytes Variable Size 18505728 bytes Database Buffers 16777216 bytes Redo Buffers 77824 bytes 2)STARTUP MOUNT 該命令建立例項並且安裝資料庫,但沒有開啟資料庫。Oracle系統讀取控制檔案中關於資料檔案和重作日誌檔案的內容,但並不開啟該檔案。這種開啟方式常在資料庫維護操作中使用,如對資料檔案的更名、改變重作日誌以及 開啟歸檔方式等。在這種開啟方式下,除了可以看到SGA系統列表以外,系統還會給出\"資料庫裝載完畢\"的提示。 3)STARTUP 該命令完成建立例項、安裝例項和開啟資料庫的所有三個步驟。此時資料庫使資料檔案和重作日誌檔案線上,通常還會請求一個或者是多個回滾段。這時系統除了可以看到前面Startup Mount方式下的所有提示外,還會給出一 個\"資料庫已經開啟\"的提示。此時,資料庫系統處於正常工作狀態,可以接受使用者請求。假如採用STARTUP NOMOUNT或者是STARTUP MOUNT的資料庫開啟命令方式,必須採用ALTER DATABASE命令來執行開啟資料庫的操作。 例如,假如你以STARTUP NOMOUNT方式開啟資料庫,也就是說例項已經建立,但是資料庫沒有安裝和開啟。這是必須執行下面的兩條命令,資料庫才能正確啟動。 SQL> ALTER DATABASE MOUNT; SQL> ALTER DATABASE OPEN; 而假如以STARTUP MOUNT方式啟動資料庫,只需要執行下面一條命令即可以開啟資料庫: SQL> ALTER DATABASE OPEN. 4)其他開啟方式 除了前面介紹的三種資料庫開啟方式選項外,還有另外其他的一些選項。 STARTUP RESTRICT 這種方式下,資料庫將被成功開啟,但僅僅答應一些特權使用者(具有DBA角色的使用者)才可以使用資料庫。這種方式常用來對資料庫進行維護,如資料的匯入/匯出操作時不希望有其他使用者連線到資料庫運算元據。 STARTUP FORCE 該命令其實是強行關閉資料庫(shutdown abort)和啟動資料庫(startup)兩條命令的一個綜合。該命令僅在關閉資料庫碰到問題不能關閉資料庫時採用。 ALTER DATABASE OPEN READ ONLY; 該命令在建立例項以及安裝資料庫後,以只讀方式開啟資料庫。對於那些僅僅提供查詢功能的產品資料庫可以採用這種方式開啟。
二、建立資料庫使用者
2.1 以DBA使用者登入資料庫(如system,sys) SQL> conn system/oracle@orcl 注:如果在本地伺服器登入@orcl可以去掉 2.2 用create user語法建立使用者 SQL> CREATE USER user_name IDENTIFIED BY user_passwordDefaultTablespace tbs_users; user_name為資料庫使用者的使用者名稱 user_password為資料庫使用者的密碼 tbs_users為使用者使用的表空間,預設是users表空間。 例如: SQL> CREATE USER cmsuser IDENTIFIED BY passwordDefaultTablespace users; 2.3 賦表空間使用許可權 SQL> alter user user_name quota unlimited on user_tablespace quota unlimited on user_tablespace; 2.4 給使用者賦許可權 SQL> GRANT connect, resource TO cmsuser; Connect使用者能登入資料庫的許可權 Resource使用者能建立一些資料庫對像的許可權,表、檢視,儲存過程,一般是授予開發人員的 2.5 刪除使用者 SQL> DropUser cmsuser Cascade; 使用cascade引數可以刪除該使用者的全部objects