最近這幾天一直在與Oracle數據庫打交道,由於之前對Oracle的學習並不深入,只是把Oracle當成一個數據源去使用,很多東西了解的不是很深,比如,數據庫、數據庫實例、表空間、用戶、表,它們是如何創建的,它們之間又有什麼關系,所以這次就一塊來學習下。
一個完整的Oracle數據庫通常由兩部分組成,分別是Oracle數據庫和Oracle數據庫實例,第一個Oralce數據庫是指Oracle類型的關系型數據庫管理系統,包含物理數據、數據庫管理系統,也就是物理數據、內存、操作系統進程的組合體;而後面提到的Oracle數據庫是指一系列物理文件的數據集合,這些集合包括數據文件、控制文件、聯機日志、參數文件等。
下面這張圖是創建數據庫的一個步驟:
第一個要填寫的是全局數據庫名,第二個要填寫的是數據庫實例SID(下文會介紹)。
全局數據庫名:就是一個數據庫的標識,簡單來說就是名字,這個一般在創建的時候一定要想好。以後一般是不修改的,不過也可以修改,只不過修改起來比較麻煩,因為數據庫安裝好以後,數據庫的這個標識名字就會寫入控制文件、數據庫表等很多地方。
關於數據庫的命令:
查看當前的數據庫的名字:
select name from v$database;
官方說Oracle實例是訪問Oracle數據庫所需的一部分計算機內存和輔助處理後台進程,是由進程和這些進程所使用的內存(SGA)所構成一個集合。
我們在寫代碼過程中需求調用對象的方法時,需要new出來一個實例,這個new出來的實例也是放在內存中的;我們的oracle實例跟這個new出來的對象差不多,也是當需要訪問oracle數據庫時就在內存中創建出一塊進程,它也是只存在與內存中的。
我們訪問oracle其實就是訪問oracle的實例,訪問oracle實例的時候,有時候需要先開啟實例,我的實例名為orcltest:
startup open orcltest;
實例名與SID
實例名(instance_name)指的是用於響應某個數據庫操作的數據庫管理系統的名字;提到Oralce實例名就不能不提Oracle_SID,SID其實Oracle實例的一個標識。
但兩者是有區別的,instance_name是oracle數據庫參數。而Oracle_SID是操作系統的環境變量。Oracle_SID用於與操作系統交互,也就是說,從操作系統的角度訪問實例名,必須通過Oracle_SID。並且Oracle_SID必須與instance_name的值一致,否則,你將會收到一個錯誤,在unix平台,是“ORACLEnot available”,在windows平台,是“TNS:協議適配器錯誤”。
數據庫實例名除了與操作系統交互外,還用於網絡連接的oracle服務器標識。當你配置oracle主機連接串的時候,就需要指定實例名如下:
jdbc:oracle:thin:@localhost:1521:orcltest(orcltest就為數據庫實例名)查詢當前數據庫實例名:
select instance_name from v$instance;<span style="font-size: 16pt; font-family: SimSun; "> </span>
查看當前數據庫實例的信息:
Show parameter instance_name;
注意:一個數據庫可以有多個實例,在作數據庫服務集群的時候可以用到,或者不同的項目用不同的數據庫實例也可以,這塊內容後續會繼續說明。
Oracle數據庫是通過表空間來存儲物理表的,表空間(tablespace)是數據庫的邏輯劃分,它是隸屬與Oracle數據庫實例下面的,一個數據庫實例可以有N個表空間,一個表空間下可以有N張表。
所以有了數據庫實例就可以創建表空間了。
創建表空間:
create tablespace OracleTest logging datafile 'C:\oracle\product\10.2.0\oradata\ORCLTEST\OracleTest.dbf' size 32m autoextend on next 32m maxsize2048m extent management local;
其中的創建的表空間名字為OracleTest ,建立表空間的位置是:C:\oracle\product\10.2.0\oradata\ORCLTEST\OracleTest.dbf,大小是32M,空間可以自動擴充,每次擴充32M,最大表空間為2048M。
查詢表空間名字:
select tablespace_name from dba_data_files group by tablespace_name;
查詢表空間的大小:
select tablespace_name,count(*),sum(blocks),sum(bytes)/1024/1024 from dba_data_filesgroup by tablespace_name;
查看表空間是否自動擴充:
select file_name,autoextensible,increment_by from dba_data_files;
如果表空間中有表的話,可以查看:
Select tablespace_name,table_name from dba_tables where tablespace_name='ORACLETEST';
關於Oracle的用戶,一個Oracle數據庫裝好後,建立了Oracle實例,創建了表空間,為用戶指定表空間,最後才是創建物理表。
上面我們已經創建好數據庫實例和表空間了,現在就是創建用戶為指定的表空間:
Create user testuser identified by test default tablespace OracleTest;創建了一個testuser的用戶,密碼是test,表空間是OracleTest.
在這裡要說一點的是,同一表空間是可以授予多個用戶的,並且可以給不同的用戶分配對表空間的不同等級的操作權限。
給testuser用戶授予權限,有三種:
grant connect to testuser; grant resource to testuser; grant dba to testuser;我給testuser用戶授予的是第三種dba管理員權限。
當我們通過我們創建好的用戶登陸後可以查到當前用戶:
show user;查看當前數據庫的所有用戶:
select * from dba_users;
數據庫實例、表空間、用戶這些都有了以後,就可以在自己的用戶所屬的表空間下創建表了,關於表這塊我們大家經常用,這裡就不多說了。看下常用命令就可以了:
查看表所屬表空間
Select table_name,tablespace_name from all_tables where table_name='t_student';查看表結構
desc t_student;
關於Oracle的使用,首先安裝oracle數據庫軟件、然後創建數據庫實例、接下來創建表空間、再往下給表空間創建用戶並分配權限、然後創建表、最後測試,其中創建表空間和創建用戶這兩個順序可以顛倒的。這幾天這些東西來回搗鼓了好幾遍,關於Oracle的這些操作,如果不去自己一步步實踐,你永遠都不知道自己到底有多生,你也不會知道它到底會出哪些讓你抓狂的錯誤。