Oracle是一種數據庫管理系統,是一種關系型的數據庫管理系統。通常情況了我們稱的“數據庫”,包含了物理數據、數據庫管理系統、內存、操作系統進程的組合體,就是指這里所說的數據庫管理系統。
完整的Oracle數據庫通常由兩部分組成:Oracle數據庫和數據庫實例。
① Oracle數據庫是一系列物理文件的集合;
組成Oracle數據庫的文件可以分成三個類型:數據文件(data file)、重做日志文件(redo log file)和控制文件(control file)。數據文件保存數據,Oracle中可以存在任意數量的數據文件;重做日志文件跟SQL Server的事務日志文件一樣用來保存對數據更改的記錄,在系統恢復階段需要用到;控制文件是一些特別的小文件,用來保存一些至關重要的關於數據庫的信息,沒有這個文件的話,實例就無法打開數據庫。
除了數據文件、重做日志文件、控制文件之外,數據庫還包含參數文件(parameter file)、密碼文件(password file)和可選的歸檔日志文件(archive log files)。
② Oracle數據庫實例則是一組Oracle后台進程/線程以及在服務器分配的共享內存區。
當Oracle啟動時,它和SQL Server一樣要先占用一些服務器內存用於執行操作,這個內存區域——SGA(System Global Area)——被分為數個不同的結構,在創建SGA的同時也會啟動一系列的后台進程用於和SGA進行交互,在這里這些分配的內存空間和后台進程組合起來就是Oracle實例了。請注意這里並沒有提到數據庫,實際上Oracle實例在沒有數據庫或是數據庫不能訪問時也是跑的很好的,在安裝Oracle時,我們可以選擇只安裝軟件,完了之后再安裝數據庫。
Oracle系統啟動時,首先在內存中創建數據庫實例,然后由實例找到保存在磁盤中的數據庫,最后打開數據庫讓用戶操作。當系統關閉時,實例會從內存中清除掉;整個內存結構和后台進程都會消失,但是數據庫依然存在於磁盤上,只是處於關閉的狀態。
1、數據庫
數據庫是數據集合。
在安裝Oracle數據庫時,會讓我們選擇安裝啟動數據庫(即默認的全局數據庫);
啟動數據庫:也叫全局數據庫,是數據庫系統的入口,它會內置一些高級權限的用戶如SYS,SYSTEM等。我們用這些高級權限賬號登陸就可以在數據庫實例中創建表空間,用戶,表。
內置一些高級權限的用戶有 3 個:sys,system,scott
① sys用戶超級管理員(等同sql sa,mysql root),具有oracle的最高權限,具有sysdba角色,具有創建create database的權限,密碼默認為manager。
②.system用戶是操作管理員,權限僅次於sys,具有sysoper(ate)的角色;system其沒有create database的權限,其他的權限與sys相同。
③.scott用戶普通用戶,默認密碼為tiger,該用戶默認是鎖定,可以用system去解鎖
全局數據庫名:就是一個數據庫的標識,在安裝時就要想好,以后一般不修改,修改起來也麻煩,因為數據庫一旦安裝,數據庫名就寫進了控制文件,數據庫表,很多地方都會用到這個數據庫名。
查詢當前數據庫名:
1 select name from v$database;
2、數據庫實例
Oracle官方描述:實例是訪問Oracle數據庫所需的一部分計算機內存和輔助處理后台進程,是由進程和這些進程所使用的內存(SGA)所構成一個集合。
其實就是用來訪問和使用數據庫的一塊進程,它只存在於內存中。
我們訪問Oracle數據庫就是通過一個實例連接數據庫,然后訪問數據庫文件。如果這個實例關聯了數據庫文件,就是可以訪問的,如果沒有,就會得到實例不可用的錯誤。
Oracle系統啟動時,首先在內存中創建數據庫實例,然后由實例找到保存在磁盤中的數據庫,最后打開數據庫讓用戶操作。當系統關閉時,實例會從內存中清除掉:整個內存結構和后台進程都會消失,但是數據庫依然存在於磁盤上,只是處於關閉的狀態。之前也說過,Oracle實例可以在不打開數據庫的情況下運行
實例名指的是用於響應某個數據庫操作的數據庫管理系統的名稱。她同時也叫SID。實例名是由參數instance_name決定的。
查詢當前數據庫實例名:
1 select instance_name from v$instance;
數據庫實例名(instance_name)用於對外部連接。在操作系統中要取得與數據庫的聯系,必須使用數據庫實例名。比如我們作開發,要連接數據庫,就得連接數據庫實例,通過實例名連接:
jdbc:oracle:thin:@localhost:1521:orcl(orcl就為數據庫實例名)
嚴格的說:一個Oracle服務,只包括一個Oracle實例和一個數據庫(不考慮雙機並行等這樣的情況)。
但是一個實例只能對應一個數據庫,一個數據庫有可能對應多個實例。除非使用並行 Oracle 服務器選項,否則每個 Oracle 數據庫都有一個實例與之相關,一個數據庫被唯一的一個實例裝載。
數據庫與實例之間是1對1/n的關系,在非並行的數據庫系統中每個Oracle數據庫與一個實例相對應;在並行的數據庫系統中,一個數據庫會對應多個實例,同一時間用戶只與一個實例相聯系,當某一個實例出現故障時,其他實例自動服務,保證數據庫正常運行。在任何情況下,每個實例都只可以對應一個數據庫。
3、表空間
Oracle數據庫是通過表空間來存儲物理表的,一個數據庫實例可以有N個表空間,一個表空間下可以有N張表。有了數據庫,就可以創建表空間。
表空間(tablespace)是數據庫的邏輯划分,每個數據庫至少有一個表空間(稱作SYSTEM表空間)。為了便於管理和提高運行效率,可以使用一些附加表空間來划分用戶和應用程序。
數據庫自帶表空間:
① SYSAUX表空間
SYSAUX表空間在Oracle Database 10g中引入,作為SYSTEM表空間的輔助表空間.以前一些使用獨立表空間或系統表空間的數據庫組件現在在SYSAUX表空間中創建.SYSAUX 表空間存放一些其他的 metadata 組件,如 OEM,Streams 等會默認存放在 SYSAUX 表空間里。通過分離這些組件和功能,SYSTEM表空間的負荷得以減輕.反復創建一些相關對象及組件引起SYSTEM表空間的碎片問題得以避免。
② SYSTEM表空間
SYSTEM表空間是Oracle創建數據庫時候自動創建的,每個Oracle數據庫都會有SYSTEM表空間,而且SYSTEM表空間總是要保持在聯機模式下,因為其包含了數據庫運行所要求的基本信息,如:數據字典、聯機求助機制、所有回退段、臨時段和自舉段、所有的用戶數據庫實體、其它ORACLE軟件產品要求的表等等。
③ TEMP表空間
臨時表空間用來管理數據庫排序操作以及用於存儲臨時表、中間排序結果等臨時對象,當ORACLE里需要用到SORT的時候,並且當PGA中sort_area_size大小不夠時,將會把數據放入臨時表空間里進行排序。像數據庫中一些操作: CREATE INDEX、 ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、 UNION ALL、 INTERSECT、MINUS、ORT-MERGE JOINS、HASH JOIN等都可能會用到臨時表空間。當操作完成后,系統會自動清理臨時表空間中的臨時對象,自動釋放臨時段。這里的釋放只是標記為空閑、可以重用,其實實質占用的磁盤空間並沒有真正釋放。這也是臨時表空間有時會不斷增大的原因。臨時表空間存儲大規模排序操作(小規模排序操作會直接在RAM里完成,大規模排序才需要磁盤排序Disk Sort)和散列操作的中間結果.它跟永久表空間不同的地方在於它由臨時數據文件(temporary files)組成的,而不是永久數據文件(datafiles)。臨時表空間不會存儲永久類型的對象,所以它不會也不需要備份。另外,對臨時數據文件的操作不產生redo日志,不過會生成undo日志。
④ UNDO表空間
UNDO表空間是Oracle特有的概念。undo表空間中會自動分配undo段,這些undo段用來保存事務中的DML語句的undo信息,也就是來保存數據在被修改之前的值。在rollback,實例恢復(前滾),一致性讀CR塊的構造時會使用到undo信息。由於undo的引入,從而Oracle的select語句實現一致性讀時,不需要任何鎖。undo表空間和其它表空間有很多類似的地方:undo數據塊也會被讀到buffer cache緩存起來,修改時也會產生redo log,數據也會寫回到undo表空間的磁盤上。所以崩潰后,undo塊的buffer cache也會恢復過來。
⑤ USERS表空間
創建用戶必須為其指定表空間,如果沒有顯性指定默認表空間,則指定為users表空間,此用戶所有信息都會放入到users表空間中。
查看已經創建好的表空間:
1 select default_tablespace, temporary_tablespace, username from dba_users;
4、用戶
Oracle數據庫建好后,要想在數據庫里建表,必須先為數據庫建立用戶,並為用戶指定表空間。Oracle的表空間、包括各種數據庫對象的使用和操作權限都是通過授權的方式在用戶之間使用的。
查看數據庫用戶:
1 select * from dba_users;
綜上,現有實例和數據庫;用戶和表空間都存在於實例之后,是授權訪問的,但是系統內置高級權限用戶和自帶表空間在實例創建之初都會被加載。
因此,實例故障時,其他實例接替服務,故障實例的表空間等信息,都可以通過高級權限用戶再行賦權給其他實例。
5、數據庫對象
有了數據庫,表空間和用戶,用戶在自己的表空間創建表。有了表,就可以進行開發。
數據庫的所有對象,包括過程、函數、包和包體、JOB、表、視圖、索引、序列、觸發器等都由用戶開發,存在於表空間下。
--新建表空間,創建用戶,給用戶指定表空間,並賦予權限 --其中/usr/local/oracle/oradata/wolf_new/是服務器公共目錄,TS_AMLCONFIG.DBF是給表空間新建的dbf文件 create bigfile tablespace TS_AMLCONFIG datafile '/usr/local/oracle/oradata/wolf_new/ts_amlconfig .dbf' size 10m autoextend on nologging extent management local; --查詢表空間目錄 select * from dba_data_files where tablespace_name = 'ts_amlconfig '; --創建用戶,並賦予他表空間權限 create user amlconfig --創建amlconfig用戶 identified by "wolf" --用戶密碼為wolf default tablespace ts_amlconfig --指定默認表空間 temporary tablespace temp --指定臨時表表空間 profile default password expire; -- grant/revoke role privileges grant quest_wolf_user to amlconfig; -- grant/revoke system privileges grant delete any table to amlconfig; grant execute any procedure to amlconfig; grant insert any table to amlconfig; grant select any table to amlconfig; grant unlimited tablespace to amlconfig; grant update any table to amlconfig;