1. 程式人生 > >Oracle 11g數據庫詳解

Oracle 11g數據庫詳解

adding 查看端口 linu oci 資料 標記 錯誤 urn locate

常見異常:

ORA-14025:不能為實體化視圖或實體化視圖日誌指定PARTITION

ORA-14026:PARTITION和CLUSTER子句互相排斥

ORA-14027:僅可以指定一個PARTITION子句

ORA-14028:缺少AT或VALUES關鍵字

ORA-14029:GLOBAL分區索引必須加上前綴

ORA-14030:CREATETABLE語句中有不存在的分區列

ORA-14031:分區列的類型不可以是LONG或LONGRAW

ORA-14032:分區編號的分區界限過高

ORA-14033:ctchvl:未預期的strdef類型

ORA-14034:ctchvl:未預期的操作數類型

ORA-14035:ctchvl:未預期的字符串數據類型

ORA-14036:列的分區界限值過大

ORA-14037:分區""的分區界限過高

ORA-14038:GLOBAL分區索引必須加上前綴

ORA-14039:分區列必須構成UNIQUE索引的關鍵字列子集

ORA-14040:傳遞給TABLE$OR$INDEX$PART$NUM的參數個數不當

ORA-14041:可能沒有為結果分區指定分區界限

ORA-14042:可能沒有為要移動,修改或重建的分區指定分區界限

ORA-14043:僅可以添加一個分區

ORA-14044:僅可以移動一個分區

ORA-14045:僅可以修改一個分區

ORA-14046:分區可以剛好分成兩個新的分區

ORA-14047:ALTERTABLE|INDEXRENAME不可以與其它分區組合

ORA-14048:分區維護操作不可以與其它操作組合

ORA-14049:無效的ALTERTABLEMODIFYPARTITION選項

ORA-14050:無效的ALTERINDEXMODIFYPARTITION選項

ORA-14051:ALTERMATERIALIZEDVIEW選項無效

ORA-14052:此上下文中不允許分區擴展表名稱語法

ORA-14053:非法嘗試修改(在語句中)

ORA-14054:無效的ALTERTABLETRUNCATEPARTITION選項

ORA-14055:ALTERINDEXREBUILD中的關鍵字REBUILD必須緊跟索引名稱

ORA-14056:分區編號:PCTUSED和PCTFREE的總和不可以超過100

ORA-14057:分區"":PCTUSED和PCTFREE的總和不可以超過100

ORA-14058:分區編號:INITRANS值必須小於MAXTRANS值

ORA-14059:分區"":INITRANS值必須小於MAXTRANS值

ORA-14060:不可以更改表分區列的數據類型或長度

ORA-14061:不可以更改索引分區列的數據類型或長度

ORA-14062:一個或多個表分區駐留在只讀表空間中

ORA-14063:唯一/主約束條件關鍵字中存在無用索引

ORA-14064:唯一/主約束條件關鍵字中存在無用分區的索引

ORA-14065:不可以指定分區表的ALLOCATESTORAGE

ORA-14066:按索引組織的未分區表的選項非法

ORA-14067:重復的TABLESPACE_NUMBER說明

ORA-14068:不可以同時指定TABLESPACE和TABLESPACE_NUMBER

ORA-14069:無效的TABLESPACE_NUMBER值

ORA-14070:僅可以指定分區索引或包含REBUILD的選項

ORA-14071:用於強制約束條件的索引選項無效

ORA-14072:不可以截斷固定表

ORA-14073:不可以截斷引導程序表或群集

ORA-14074:分區界限必須調整為高於最後一個分區界限

ORA-14075:分區維護操作僅可以對分區索引執行

ORA-14076:DROP/SPLITPARTITION不可以應用到LOCAL索引分區

ORA-14078:您不可以刪除GLOBAL索引的最高分區

ORA-14079:標記為無用索引的分區選項非法

ORA-14080:無法按指定的上限來分割分區

ORA-14081:新分區名必須與舊分區名不同

ORA-14082:新分區名必須與對象的任何其它分區名不同

ORA-14083:無法刪除分區表的唯一分區

ORA-14084:您僅可以指定LOCAL索引的TABLESPACEDEFAULT

ORA-14085:分區表不能具有LONG數據類型的列

ORA-14086:不可以將區索引作為整體重建

一般權限用戶的登錄驗證都是第三種方式,即數據庫驗證,因為用戶名和密碼都是存儲在數據庫當中的。然而,SYS用戶(具有SYSDBA和SYSOPER權限的用戶)卻不是數據庫驗證。在oracle數據沒有啟動的時候,SYS用戶就可以連接到數據庫,並對其進行啟動等操作,所以不可能是數據庫驗證。SYS用戶采用的是第一種和第二種驗證方式。

1 sqlplus /nolog,conn /as sysdba 之所以能夠登錄,在於oracle登錄時的身份認證方式。可以試一下這個:sqlplus /nolog,conn abcd/sss as sysdba,你發現也能夠登錄成功。2 oracle在登錄時,有三種身份認證方式:操作系統身份認證、密碼文件認證、數據庫認證。而conn /as sysdba是屬於操作系統認證。 為什麽這樣說呢?你當前電腦開機時登錄的用戶,也就是進入操作系統的用戶,例如是gooooal,它在你電腦的ora_dba組中。可以在我的電腦單擊右鍵,找到管理,選擇本地用戶和組,發現有一個組叫ora_dba,雙擊它,看到成員列表中有gooooal。 也就是在conn /as sysdba,oracle會進行操作系統驗證,發現你當前登錄的用戶就屬於ora_dba組,因此才可以登錄成功。 你可以把ora_dba組中的gooooal用戶刪除,再conn /as sysdba,就發現進不去了。3 密碼文件驗證可以查閱相關資料,百度oracle的身份驗證方式,就可以查到相關資料。4 其實在linux或unix環境下,安裝oracle是要設置很多東西的,比如用戶和用戶組的設置等,不像在windows下,安裝傻瓜化了。5 關於安全性,如果將oracle安裝在本地,其實你本地就是oracle服務器,所以權限高一些。你用哪個用戶來啟動oracle實例?哪個用戶來mount數據庫?哪個用戶來打開數據庫?從而才能進行之後的select等sql操作? 在oracle實例等還沒有啟動的時候,oracle數據庫裏面建的用戶肯定是不能使用的。所以才會有操作系統身份驗證。用這個用戶,來啟動oracle實例、轉載數據庫等。之後才能做oracle表的增刪改查。

3.2 Sql*Plus

3.2.1 Windows操作系統

3.2.1.1 連接數據庫

3.2.1.2 斷開數據庫

3.2.2 Linux操作系統

3.2.2.1 連接數據庫

連接遠程數據庫:

1) 輸入Shell命令:sqlplus 用戶名/密碼@連接描述符。例如:sqlplus test/test@orcl,表示使用test用戶名和test密碼通過orcl連接描述符連接數據庫。

2) 操作系統會自動根據$PATH環境變量去運行$ORACLE_HOME/bin/sqlplus可執行文件。如果$PATH環境變量或$ORACLE_HOME環境變量不對,會導致無法執行sqlplus命令。

3) sqlplus會自動去找$ORACLE_HOME/network/admin/tnsnames.ora文件裏配置的連接描述符。

4) sqlplus會自動使用指定的用戶名、密碼和連接描述符連接遠程數據庫,連接成功後會出現SQL命令的交互界面SQL。

註意:如果連接失敗,檢查遠程的數據庫是否已經啟動,遠程的監聽服務是否已經啟動,連接描述符配置文件tnsnames.ora是否有讀取權限,連接描述符是否配置正確,用戶名和密碼是否正確,密碼是否過期,用戶是否具有connect權限等。

連接本機數據庫:

1) 在命令行下輸入:sqlplus / as sysdba

2) 操作系統會自動根據$PATH環境變量去運行$ORACLE_HOME/bin/sqlplus可執行文件。

3) 連接成功後會出現SQL 交互界面。

提示:本機數據庫可以在關閉狀態下用此方法連接,但如果用連接遠程數據庫的方法來連接本機數據庫,要求數據庫必須已經啟動。

3.2.2.2 斷開數據庫

輸入SQL命令:exit或quit,表示斷開並退出sqlplus。

輸入SQL命令:disconnect,表示只斷開、但不退出sqlplus。

3.3 OEM

3.3.1 連接數據庫

用瀏覽器打開OEM的URL地址,輸入數據庫用戶名和密碼,點擊登錄即可完成連接。

查看OEM的URL地址:查看$ORACLE_HOME\install下的readme.txt

3.3.2 斷開數據庫

點擊網頁的右上角的註銷按鈕,即可斷開數據庫。斷開後可以再次登錄,或關閉瀏覽器。

3.4 OCILIB

3.4.1 連接及斷開數據庫

#include stdio.h

#include "ocilib.h"

int main (int argc, char ** argv)

{

if (OCI_Initialize (NULL, NULL, OCI_ENV_DEFAULT) == 0)//如果初始化OCILIB庫失敗,就報錯

{

return -1;

}

OCI_Connection * ociConn;

ociConn = OCI_ConnectionCreate ("192.168.227.128", "test", "test", OCI_SESSION_DEFAULT);//連接數據庫

if (ociConn == 0)//如果連接數據庫失敗,就報錯

{

return -1;

}

OCI_ConnectionFree (ociConn);//斷開數據庫

return 0;

}

3.5 tnsnames.ora連接描述符配置文件說明

3.5.1 TNS簡介

TNS全稱Transparence Network Substrate,直譯為透明網絡底層,也稱連接描述符。

Oracle數據庫客戶端就是通過連接描述符來知道如何連接數據庫服務器的。

3.5.2 配置文件路徑

本配置文件在Oracle數據庫安裝路徑下的network下的admin下的tnsnames.ora

3.5.3 文件格式說明

表示一個空格,一個都不能少,也不能多

表示連接描述符的名字,不區分大小寫

表示數據庫服務器的IP地址

表示數據庫服務器的端口號,一般不用改

表示直連方式連接數據庫服務器,一般不用改

表示數據庫服務名,使用SQL show parameter service_name;命令查看

註意:配置多個連接描述符時,每一個之間間隔一空行。

3.6 sqlnet.ora連接方式配置文件說明

3.6.1 簡介

本配置文件主要是配置數據庫客戶端如何連接數據庫服務端。例如配置連接超時時間、接收數據超時時間、發送數據超時時間、服務器查找方式等。

3.6.2 配置文件路徑

本配置文件在Oracle數據庫安裝路徑下的network下的admin下的sqlnet.ora

3.6.3 文件格式說明

SQLNET.RECV_TIMEOUT = 1 //配置接收數據超時時間,單位秒

SQLNET.SEND_TIMEOUT = 1 //配置發送數據超時時間,單位秒

SQLNET.INBOUND_CONNECT_TIMEOUT = 1 //配置連接超時時間,單位秒

SQLNET_ALLOWED_LOGON_VERSIONS = (11,10,9,8) //允許連接的數據庫服務端版本號

3.7 listener.ora監聽服務配置文件說明

3.7.1 簡介

本配置文件主要是配置數據庫服務端的監聽服務。

3.7.2 配置文件路徑

本配置文件在Oracle數據庫安裝路徑下的network下的admin下的listener.ora

3.7.3 文件格式說明

暫無。

3.8 設置Windows下ODBC訪問Oracle數據庫

假如Oracle 數據庫安裝在IP 為 192.168.0.20 的服務器上,實例名為"MyTestInstance",並添加用戶mytestuser 和密碼 password1,以備下文作為範例使用。服務器上可以配置多個實例,每個實例就是一個邏輯上獨立的數據庫。

客戶端是指需要訪問服務端的Oracle數據庫的計算機,它可以與服務器是同一臺機器,它也可以是網絡能夠訪問到該服務器的任何其它計算機。

下面討論如何在Windows客戶端機上配置 Oracle 9i ODBC 來訪問遠程Oracle 9i數據庫。

通過ODBC來訪問Oracle的原理如圖所示:

客戶程序---- ODBC ---- Oracle OCI ------ Oracle 服務器

首先,在客戶端上裝一個 Oracle OCI (Oracle Call Interface),它是真正直接與遠程Oracle服務器打交到,實現數據傳輸的組件。為了使用ODBC的統一方式來訪問Oracle數據庫,還必須裝一個Oracle ODBC driver. 它接收客戶程序的數據庫訪問請求,並把ODBC類型的請求轉換為對Oracle OCI的請求。OCI實現操縱Oracle數據庫,並將查詢結果或其它結果返回給ODBC driver, ODBCdriver 最後將結果返回給客戶程序。換句話說,客戶通過ODBC來訪問數據庫,而ODBC則是通過調用OCI的API來實現其功能的。

以剛才所述的服務器設置為基礎,下面給出客戶端Oracle ODBC的配置步驟。

步驟1:安裝Oracle 客戶端運行時庫,其中包括 Oracle OCI.

步驟2:設置 OCI 訪問信息

OCI訪問Oracle 服務器需要知道

1,服務器IP地址或主機名,(主機名)

2,服務器的監聽端口, (端口號)

3,欲訪問的數據庫實例名。 (服務標識/服務名)

把這三個信息組成的信息集合起個名字就叫數據源名(服務命名)。

這些信息可以通過 Oracle Net Manager 來設置。在它的設置界面中用的名詞分別被列在對應的括號中。

本例設置如下:

服務命名: ABCD (隨便字符串)

主機名: 192.168.0.20

端口號: 1521 (必須與服務器端的一致,這裏是缺省值)

服務標識/服務名: MyTestInstance

以後 Oracle ODBC driver 只需要提供給OCI服務命名(本例為ABCD),OCI就知道如何去訪問真正的數據庫了。

步驟3:設置ODBC DSN,即 ODBC數據源

進入控制面板/管理工具/數據源(ODBC)/系統DSN

點擊添加,選擇 MicroSoft ODBC for Oracle,.然後彈出一個對話框,填寫如下內容。

1,數據源名稱: MyOracleSrc 可隨便起,客戶程序將用它。

2, 描述:一段說明文字,自己能看懂即可。

3,用戶名稱: mytestuser 你最終需要訪問的數據庫所認可的用戶名。

4,服務器:ABCD (即OCI設置中的服務命名。這是中文版最容易引起誤解的地方。筆者開始就誤以為要填寫Oracle服務器的主機名)

步驟4: 客戶程序通過ODBC訪問數據庫的方法

客戶程序訪問數據庫時需要三個信息:

1,數據源: MyOracleSrc ,即ODBC DSN中設置的數據源名稱

2,用戶名: mytestuser

3,密碼: password1

這樣,就可以訪問到192.168.0.20上的數據庫 MyTestInstance.

為了驗證ODBC設置是否成功,可是使用DB查詢分析器試用版照步驟4來進行簡單的測試。

4 查看數據庫的服務名、實例名、端口號

4.1 Sql*Plus

如果無法連接數據庫,就建議使用連接本機數據庫方式連接。

查看服務名:

在SQL下輸入:select global_name from global_name;

在SQL下輸入:show parameter service_name;

查看實例名:

在SQL下輸入:select instance_name from v$instance;

查看端口號:

5 管理數據庫連接

5.1 查看數據庫連接

v$session表裏存放所有的數據庫連接信息,使用select命令對此表的數據進行查看。其中:

username字段:此連接使用的數據庫用戶名。

sid字段:此連接的會話ID(Session ID)。

machine字段:此連接的遠端主機名。

port字段:此連接的遠端端口號。

註意:此視圖需要DBA權限才能查看此表。

6 數據庫用戶

Oracle數據庫的每一個用戶對應一個用戶配置文件,用戶配置文件控制著用戶的一些行為、權限和資源占用等。

一般的用戶都是對應DEFAULT這個用戶配置文件,也可以修改對應的用戶配置文件名。

Oracle數據庫還有一個用戶配置文件是否生效開關,如果為TRUE表示開啟用戶配置文件,如果為FALSE表示關閉用戶配置文件,但是用戶配置文件裏有些配置是不由此開關控制,始終開啟(詳見4.1.4.5)。

6.1 創建數據庫用戶

註意:新用戶必須賦予connect或dba系統權限後,才能遠程連接。

6.1.1 Sql*Plus

在SQL下輸入:create user 用戶名 identified by 密碼;

6.2 刪除數據庫用戶

註意:當前已連接的用戶不能刪除。

6.2.1 Sql*Plus

在SQL下輸入:drop user 用戶名 cascade;

6.3 修改數據庫用戶的密碼

6.3.1 Sql*Plus

在SQL下輸入:alter user 用戶名 identified by "新密碼";

6.4 數據庫用戶權限

6.4.1 用戶權限簡介

權限分兩種,一種是系統權限,一種是對象權限。

系統權限是指數據庫系統規定的用戶使用數據庫的權限,權限作用於用戶。

只有擁有DBA權限的用戶才能給用戶賦予或收回系統權限。

system_privilege_map表裏有所有的oracle數據庫系統內置的權限。

系統權限有以下幾種:

create cluster

create procedure

create sequence

create table

create view

create trigger

create type

create session:可以創建會話,也就是允許這個用戶登錄,沒有此權限則不可以。

alter session

create synonym

create database link:可以創建私有的DBLink,私有的DBLink僅創建的用戶可用。

create public database link:可以創建全局的DBLink,全局的DBLink所有的用戶都可用。

以下是權限集合:

dba:全部特權,是系統最高權限,可以創建數據庫結構,沒有此權限則不可以。

resource:允許用戶創建各種對象的權限集合,包括:create cluster、create procedure、create sequence、create table、create trigger、create type。

connect:允許用戶遠程登錄的權限集合,包括:alter session、create cluster、create database link、create sequence、create session、create synonym、create view。

Oracle系統權限的分類

群集權限:

CREATE CLUSTER:在自己的方案中創建、更改和刪除群集。

CREATE ANY CLUSTER:在任何方案中創建群集。

ALTER ANY CLUSTER:在任何方案中更改群集。

DROP ANY CLUSTER:在任何方案中刪除群集。

數據庫權限:

ALTER DATABASE:運行ALTER DATABASE語句,更改數據庫的配置。

ALTER SYSTEM:運行ALTER SYSTEM語句,更改系統的初始化參數。

AUDIT SYSTEM:運行AUDIT SYSTEM和NOAUDIT SYSTEM語句,審計SQL。

AUDIT ANY:運行AUDIT和NOAUDIT語句,對任何方案的對象進行審計。

索引權限:

CREATE ANY INDEX:在任何方案中創建索引。

註意:沒有CREATE INDEX權限,CREATE TABLE權限包含了CREATE INDEX權限

ALTER ANY INDEX:在任何方案中更改索引。

DROP ANY INDEX:任何方案中刪除索引。

過程權限:

CREATE PROCEDURE:在自己的方案中創建、更改或刪除過程、函數和包。

CREATE ANY PROCEDURE:在任何方案中創建過程、函數和包。

ALTER ANY PROCEDURE:在任何方案中更改過程、函數和包。

DROP ANY PROCEDURE:在任何方案中刪除過程、函數或包。

EXECUTE ANY PROCEDURE:在任何方案中執行或者引用過程。

概要文件權限:

CREATE PROFILE:創建概要文件。

ALTER PROFILE:更改概要文件。

DROP PROFILE:刪除概要文件。

角色權限:

CREATE ROLE:創建角色。

ALTER ANY ROLE:更改任何角色。

DROP ANY ROLE:刪除任何角色。

GRANT ANY ROLE:向其他角色或用戶授予任何角色。

註意:沒有對應的REVOKE ANY ROLE權限。

回退段權限:

CREATE ROLLBACK SEGMENT:創建回退段。

註意:沒有對撤銷段的權限。

ALTER ROLLBACK SEGMENT:更改回退段。

DROP ROLLBACK SEGMENT:刪除回退段。

序列權限:

CREATE SEQLENCE:在自己的方案中創建、更改、刪除和選擇序列。

CREATE ANY SEQUENCE:在任何方案中創建序列。

ALTER ANY SEQUENCE:在任何方案中更改序列。

DROP ANY SEQUENCE:在任何方案中刪除序列。

SELECT ANY SEQUENCE:在任何方案中從任何序列中進行選擇。

會話權限:

CREATE SESSION:創建會話,登錄進入(連接到)數據庫。

ALTER SESSION:運行ALTER SESSION語句,更改會話的屬性。

ALTER RESOURCE COST:更改概要文件中的計算資源消耗的方式。

RESTRICTED SESSION:在數據庫處於受限會話模式下連接到數據。

同義詞權限:

CREATE SYNONYM:在自己的方案中創建、刪除同義詞。

CREATE ANY SYNONYM:在任何方案中創建專用同義詞。

CREATE PUBLIC SYNONYM:創建公共同義詞。

DROP ANY SYNONYM:在任何方案中刪除同義詞。

DROP PUBLIC SYNONYM:刪除公共同義詞。

表權限:

CREATE TABLE:在自己的方案中創建、更改和刪除表。

CREATE ANY TABLE:在任何方案中創建表。

ALTER ANY-TABLE:在任何方案中更改表。

DROP ANY TABLE:在任何方案中刪除表。

COMMENT ANY TABLE:在任何方案中為任何表、視圖或者列添加註釋。

SELECT ANY TABLE:在任何方案中選擇任何表中的記錄。

INSERT ANY TABLE:在任何方案中向任何表插入新記錄。

UPDATE ANY TABLE:在任何方案中更改任何表中的記錄。

DELETE ANY TABLE:在任何方案中刪除任何表中的記錄。

LOCK ANY TABLE:在任何方案中鎖定任何表。

FLASHBACK ANY TABLE:允許使用AS OF子句對任何方案中的表、視圖執行一個SQL語句的閃回查詢。

表空間權限:

CREATE TABLESPACE:創建表空間。

ALTER TABLESPACE:更改表空間。

DROP TABLESPACE:刪除表空間,包括表、索引和表空間的群集。

MANAGE TABLESPACE:管理表空間,使表空間處於ONLINE(聯機)、OFFLINE(脫機)、BEGIN BACKUP(開始備份)、END BACKUP(結束備份)狀態。

UNLIMITED TABLESPACE:不受配額限制地使用表空間。

註意:只能將UNLIMITED TABLESPACE授予賬戶而不能授予角色。

用戶權限:

CREATE USER:創建用戶。

ALTER USER:更改用戶。

BECOME USER:當執行完全裝入時,成為另一個用戶。

DROP USER:刪除用戶。

視圖權限:

CREATE VIEW:在自己的方案中創建、更改和刪除視圖。

CREATE ANY VIEW:在任何方案中創建視圖。

DROP ANY VIEW:在任何方案中刪除視圖。

COMMENT ANY TABLE:在任何方案中為任何表、視圖或者列添加註釋。

FLASHBACK ANY TABLE:允許使用AS OF子句對任何方案中的表、視圖執行一個SQL語句的閃回查詢。

觸發器權限:

CREATE TRIGGER:在自己的方案中創建、更改和刪除觸發器。

CREATE ANY TRIGGER:在任何方案中創建觸發器。

ALTER ANY TRIGGER:在任何方案中更改觸發器。

DROP ANY TRIGGER:在任何方案中刪除觸發器。

ADMINISTER DATABASE TRIGGER:允許創建ON DATABASE觸發器。在能夠創建ON DATABASE觸發器之前,還必須先擁有CREATE TRIGGER或CREATE ANY TRIGGER權限。

專用權限:

SYSOPER

(系統操作員權限)

STARTUP

SHUTDOWN

ALTER DATABASE MOUNT/OPEN

ALTER DATABASE BACKUP CONTROLFILE

ALTER DATABASE BEGIN/END BACKUP

ALTER DATABASE ARCHIVELOG

RECOVER DATABASE

RESTRICTED SESSION

CREATE SPFILE/PFILE

SYSDBA

(系統管理員權限)

SYSOPER的所有權限,並帶有WITH ADMIN OPTION子句

CREATE DATABASE

RECOVER DATABASE UNTIL

其他權限:

ANALYZE ANY:對任何方案中的任何表、群集或者索引執行ANALYZE語句。

GRANT ANY OBJECT PRIVILEGE:授予任何方案上的任何對象上的對象權限。

註意:沒有對應的REVOKE ANY OBJECT PRIVILEGE。

GRANT ANY PRIVILEGE:授予任何系統權限。

註意:沒有對應的REVOKE ANY PRIVILEGE。

SELECT ANY DICTIONARY:允許從sys用戶所擁有的數據字典表中進行選擇。

對象權限是指某種權限用戶對其它用戶的表或視圖的存取權限,權限作用於用戶下的表或視圖。

對象權限有以下幾種:

select:可以查詢表數據。

update:可以更新表數據。

insert:可以插入表數據。

delete:可以刪除表數據。

alter:可以修改表。

index:可以創建索引。

all:所有權限。

execute:可以執行存儲過程。

權限傳遞是指被賦予權限的用戶還可以賦予此權限給其他用戶,增加WITH ADMIN OPTION選項即可。

6.4.2 賦予系統權限

6.4.2.1 Sql*Plus

在SQL下輸入:grant 系統權限 to 用戶名;

允許傳遞權限:在SQL下輸入:grant 系統權限 to 用戶名 with admin option;

註意:多個權限之間用,逗號隔開。

6.4.3 收回系統權限

如果使用WITH ADMIN OPTION為某個用戶賦予可傳遞的系統權限,收回後將不能再使用權限傳遞,那麽對於已經被這個用戶賦予相同權限的所有用戶來說,不會級聯收回這些用戶的相同權限。

系統權限無級聯,即A授予B權限,B授予C權限,如果A收回B的權限,C的權限不受影響;系統權限可以跨用戶回收,即A可以直接收回C用戶的權限。

6.4.3.1 Sql*Plus

在SQL下輸入:revoke 系統權限 from 用戶名;

註意:多個權限之間用,逗號隔開。

6.4.4 查看系統權限

6.4.4.1 Sql*Plus

查看當前用戶擁有哪些系統權限:

在SQL下輸入:select * from session_privs;

查看全部用戶擁有哪裏權限:

SQL select * from dba_role_privs;

SQL select * from dba_sys_privs;

SQL select * from role_sys_privs;

6.4.5 賦予對象權限

6.4.5.1 Sql*Plus

在SQL下輸入:grant 對象權限 on 表或視圖名 to 用戶名;

註意:多個權限之間用,逗號隔開。

6.4.6 收回對象權限

如果使用WITH ADMIN OPTION為某個用戶賦予可傳遞的對象權限,收回後將不能再使用權限傳遞,那麽對於已經被這個用戶賦予相同權限的所有用戶來說,同時還會級聯收回這些用戶的相同權限。

對象權限有級聯,即A授予B權限,B授予C權限,如果A收回B的權限,C的權限也會被收回;對象權限可以跨用戶回收,即A可以直接收回C用戶的權限。

6.4.6.1 Sql*Plus

在SQL下輸入:revoke 對象權限 on 表或視圖名 to 用戶名;

註意:多個權限之間用,逗號隔開。

6.4.7 查看對象權限

6.4.7.1 Sql*Plus

用戶可以查詢的表:

在SQL下輸入:select owner, table_name from all_tables;

用戶創建的表:

在SQL下輸入:select table_name from user_tables;

獲權可以存取的表(被賦予對象權限的):

在SQL下輸入:select grantor, table_schema, table_name, privilege from all_tab_privs;

授出權限的表(賦予對象權限):

在SQL下輸入:select grantee, owner, table_name, privilege from user_tab_privs;

6.5 鎖定數據庫用戶

在SQL下輸入:alter user 用戶名 account lock;

註意:只能是具有DBA權限的用戶才能執行此命令。

每一個數據庫用戶都可以被鎖定,鎖定後此用戶就無法登陸了,解鎖後又可以繼續登陸了。鎖定後,此用戶會被提示ORA-28000錯誤。

如果所有的DBA權限用戶都被鎖定了,就用sqlplus登陸本機數據庫後,執行解鎖命令。

6.5.1 查看數據庫用戶鎖定時間

在SQL下輸入:select username,lock_date from dba_users where username=‘用戶名大寫‘;

註意:可以查看Oracle服務器的此時段的listener.log日誌,就可以知道是什麽原因導致的鎖定。

6.6 解鎖數據庫用戶

在SQL下輸入:alter user 用戶名 account unlock;

註意:只能是具有DBA權限的用戶才能執行此命令。

6.7 用戶配置文件

6.7.1 操作用戶配置文件生效開關

查看:在SQL下輸入:show parameter resource;

NAME列為resource_limit行的對應VALUE列的值,TRUE表示開啟,FALSE表示關閉。

開啟:在SQL下輸入:alter system set resource_limit=true;

關閉:在SQL下輸入:alter system set resource_limit=false;

註意:修改用戶配置文件生效開關後,無需重啟數據庫,實時生效。

6.7.2 創建用戶配置文件

在SQL下輸入:create profile 用戶配置文件名 limit;

6.7.3 查看數據庫用戶對應的用戶配置文件名

在SQL下輸入:select username,profile from dba_users where username= ‘用戶名大寫‘;

PROFILE列對應此用戶的用戶配置文件名。

查看所有用戶對應的用戶配置文件名:

在SQL下輸入:select username,profile from dba_users;

6.7.4 修改數據庫用戶對應的用戶配置文件名

在SQL下輸入:alter user 用戶名 profile 用戶配置文件名;

6.7.5 查看用戶配置文件各項資源

在SQL下輸入:select * from dba_profiles where profile=‘用戶配置文件名大寫‘;

例如:select * from dba_profiles where profile=‘DEFAULT‘;表示查看DEFAULT用戶配置文件。

配置文件裏各項資源說明:

Oracle 11g數據庫詳解