Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關係數據庫管理系統。它是在數據庫領域一直處於領先地位的產品。可以說Oracle數據庫系統是目前世界上流行的關係數據庫管理系統,系統可移植性好、使用方便、功能強,適用於各類大、中、小、微機環境。它是一種高效率、可靠性好的 適應高吞吐量的數據庫解決方案。
對於開發來說,瞭解和學習Oracle數據庫是非常有必要的。
這篇文章僅僅是對Oracle做了一個簡單的總結,後續如果用到或接觸到的知識點,都會做補充
⚪查看登陸的用戶
show user 命令
SQL> show user
⚪dba_users 數據字典
通過 dba_users 這個表查看登陸的用戶信息,那麼在查詢之前我們先看看 dba_users 這個表的表結構,可以通過 desc dba_users
這個命令查看指定表的表結構
SQL> desc dba_users
可看到該表結構中包含用戶名、用戶的ID和密碼等內容
現在我們查看系統中用戶的信息
select * from dba_users;
Oracle中 dba_users 和 user_users 都可以查詢用戶的信息,這兩張表都是查看錶空間信息的表,它們的區別是:前者是隻供管理員用戶查詢的,後者是管理員用戶和普通用戶都可以查詢的。
⚪幾個典型的用戶說明
Oracle中有那麼幾個典型的用戶,它們是在安裝Oracle的時候默認創建的,分別具有不同的作用。下面我們介紹Oracle中sys,system,scott,hr用戶:
- scott 是個演示用戶,是讓你學習Oracle用的;
- hr用戶是個示例用戶,是在創建數據庫時選中“示例數據庫”後產生的,實際就是模擬一個人力資源部的數據庫;
- SYSDBA 不是用戶,可以認爲是個權限,超級權限。默認中sys就擁有這種超級權限,是權限最高的用戶。
超級用戶分兩種 SYSDBA和SYSOPT
SYSOPT 後面3個字母是operator的意思,也就是操作數據庫的人,而SYSDBA 則是管理數據庫的人;
SYSDBA比SYSOPT的權限還要大,而SYS用戶就完全是個SYSDBA,但SYSTEM用戶默認是SYSOPT,不過它也能以SYSDBA的權限登陸。
它們之間的不同之處可以下載Oracle中sys-system-scott-hr用戶的區別 這份文檔瞭解學習。
⚪啓動(解鎖)被鎖定的用戶
Oracle中有個scott用戶默認是被鎖定的
如果要解鎖它,我們首先需要登陸其他用戶,並通過SQL語句alter user scott account unlock;
解鎖它。
alter user scott account unlock;
scott用戶的默認密碼爲 tiger
接下來通過 ‘connect scott/tiger’ 來登陸scott用戶。如果scott用戶密碼過期的話,系統會提示你更改密碼
或者通過SQL語句更改scott用戶的密碼
alter user scott identified by tiger;
⚪表空間
表空間的分類
- 永久表空間 存放永久性數據,如表,索引等。
- 臨時表空間 不能存放永久性對象,用於保存數據庫排序,分組時產生的臨時數據。
- UNDO表空間 保存數據修改前的鏡象。
查看用戶的表空間
在前面我們提到的 dba_users 表中有兩個字段
- DEFAULT_TABLESPACE
- TEMPORARY_TABLESPACE
這兩個字段分別代表用戶的默認表空間和臨時表空間。
比如我們要查看system用戶的默認表空間和臨時表空間
查看錶空間的信息
這裏有兩張表
- dba_tablespaces
- user_tablespaces
這兩張表都是查看錶空間信息的表,它們的區別是:前者是隻供管理員用戶查詢的,後者是管理員用戶和普通用戶都可以查詢的。
更改我們指定用戶的默認表空間或者臨時表空間
ALTER USER username DEFAULT|TEMPORARY TABLESPACE tablespace_name;
新建表空間
CREATE [TEMPORARY] TABLESPACE tablespace_name TEMPFILE|DATAFILE 'xxx.dbf' SIZE xxx;
表空間創建完畢後,我們可以查看錶空間的位置在哪,比如我們查看錶空間名稱爲SYSTEM的位置
SELECT file_name FROM dba_data_files WHERE tablespace_name='SYSTEM';
注意,如果要查看創建的臨時表空間的數據文件的地址,就不能查表 dba_data_files 了,而要查 dba_temp_file 表。
SELECT file_name FROM dba_temp_files WHERE tablespace_name='TEMPORARY_TABLESPACE';
修改表空間的狀態
設置表空間的聯機或脫機狀態
ALTER TABLESPACE tablespace_name ONLINK|OFFLINK;
設置表空間的只讀或可讀寫的狀態
ALTER TABLESPACE tablespace_name READ ONLY|READ WRITE;
表空間爲脫機狀態,那麼系統不允許修改該表空間的讀寫狀態。表空間聯機的狀態,默認該表空間爲可讀寫的狀態。
修改表空間中的數據文件
增加數據文件
ALTER TABLESPACE tablespace_name ADD DATAFILE|TEMPFILE 'xxx.dbf' SIZE xxx;
刪除數據文件
ALTER TABLESPACE tablespace_name DROP DATAFILE 'filename.dbf';
刪除表空間
DROP TABLESPACE tablespace_name [INCLUDING CONTENTS];
如果只刪除表空間而不刪除數據文件,那麼不用加上[]裏面的內容。
⚪約束
數據的完整性用於確保數據庫數據遵從一定的商業和邏輯規則。在Oracle中,數據完整性可以使用約束、觸發器、應用程序(過程、函數)三種方法來實現,在這三種方法中,因爲約束易於維護,並且具有最好的性能,所以作爲維護數據完整性的首選。
約束用於確保數據庫數據滿足特定的商業規則。在Oracle中,約束包括:not null、unique、primary key, foreign key和check五種。
- not null(非空)
如果在列上定義了not null,那麼當插入數據時,必須爲列提供數據。 - unique(唯一)
當定義了唯一約束後,該列值是不能重複的,但是可以爲null。 - primary key(主鍵)
用於唯一的標識錶行的數據,當定義主鍵約束後,該列不但不能重複而且不能爲NULL。一張表最多隻能有一個主鍵,但是可以由多個unique約束。 - foreign key(外鍵)
用於定義主表和從表之間的關係,外鍵約束要定義在從表上,主要則必須具有主鍵約束或是unique約束,當定義外鍵約束後,要求外鍵列數據必須在主表的主鍵列存在或是爲NULL。 - check
用於強制行數據必須滿足的條件,假定在sal列上定義了check約束,並要求sal列值在1000~2000之間,如果不在1000~2000之間就會提示出錯。
⚪修改表名
ALTER TABLE 舊錶名 RENAME TO 新表名;