1. 程式人生 > >Java基礎——Oracle(三)

Java基礎——Oracle(三)

通用 唯一標識 系統數據 用戶數 區域 物理 table pac sysdba

一、Oracle內部結構

1.表空間

表空間是數據庫的邏輯劃分,一個表空間只屬於一個數據庫,每個表空間由一個或多個數據文件組成,表空間中其他的邏輯結構的數據存儲在這些數據文件中,一般oracle系統安裝後,會自動建立多個表空間,

oarcle11g 的主要表空間 //附(10 g 也是一樣的)

1).example :示例表空間,用於存放示例數據庫的方案對象信息及其培訓資料

2).system: 是系統表空間,用於存放oracle系統內部表和數據字典的數據,如表名,列名,用戶名等,一般不贊成將用戶創建的表,索引等存放在system表空間中

3).sysaux: 是輔助系統表空間,主要存放oracle系統內部的常用樣例用戶的對象,如存放cmr用戶的表和索引等。從而減少系統表空間的負苛,它一般不存諸用戶的數據,由oracle系統內部自動維護

4).undotbsi: 是重做表空間,存放數據庫中有關重做的相關信息數據,當用戶對數據表進行修改(insert,update,delete)。oracle系統自動用重做表空間來臨時存放修改前的數據,當所做的修改完成並提交後,系統根據需要保留,修改前數據的時間長短來釋放重做表空間的部分空間。

5).users: 是用戶表空間,存放永久性用戶對象的數據和私有信息,因此也稱為數據表空間,每個數據庫都應該有一個用戶表空間,以便在創建用戶時將其分配給用戶。

除了oracle系統默認創建的表空間以外,用戶可以根據應用系統的規模及其所要存放的對象的情況創建多個表空間,以區分用戶數據和系統數據。

/* 以下略

2.表

存放用戶數據的對象

3.約束條件

可以為表的一個列創建約束條件(Constraint)

1).主鍵約束

2).默認約束

3).檢查

4).唯一

5).外鍵

4.分區 (Partition)

在非常大的數據庫中,可以通過把一個大表的數據分成多個小表來簡化數據庫的管理,這些小表叫做分區,除了對表分區外,還可以對索引進行分區,分區不僅簡化了數據庫的管理,還改善了其應用性能,在oracle中,能夠細分分區,創建子分區,例如,可以根據一組值分割一個表,然後再根據另外一種方法分割分區。
5.索引

為了能夠找到數據,表中的每一行都要用一個RowID表標識,RowID告訴數據庫這一行的準確位置,包擴所在的文件,該文件中的塊和該塊中行地址。

6.用戶

用戶賬號雖然不是數據庫中的一個物理結構,但它於數據庫中的對象有著重要的關系,這是因為用戶擁有數據對象,例如sys用戶擁有數據字典表,用戶system擁有訪問數據字典表的視圖

為數據庫創建對象必須(例如表)必須在用戶賬號下進行,可以對每一個用戶賬號進行自定義,以便將一個特定的表空間做為它的默認表空間

7.方案

用戶賬號擁有的對象集稱為用戶的方案(Schmea)

8.同義詞

為了給不同的用戶使用數據庫對象時提供一個簡單的唯一標識數據庫對象的名稱,可以為數據庫對象創建同義詞,

9.權限及角色

10.段,盤區和數據塊

依照不同的數據處理性質,可能需要在數據表空間內劃分出不同的區域,以存放不同數據,這些區域稱為段(Segment),例如,存放數據的區域稱為"數據區段",存放索引的稱為"索引區段",由於段是一個物理實體,所以必須它把分配到數據庫的一個表空間中(放在表空間的一個數據文件中),而段其實就是由許多盤區(Exctent)給合而成的,當段中的空間用完時,該段就獲得另外的盤區。數據塊(Data Block) 是最小的存儲單元,Oracle 數據庫是操作系統塊的倍數。

二、 Oracle外部結構

1.數據文件

每個oracle數據庫都有一個或多個數據文件(dataFile),而一個數據文件只能屬於一個表空間,數據文件創建後可以改變大小,創建新的表空間要創建新的數據文件,數據文件一旦加入表空間,就不能從這個表空間移走,也不能和其他表空間發生聯系

2.重做日誌文件 (Redo Log Files)

oracle保存所有數據庫事務的日誌,這些事務被記錄在聯機日誌文件(OnLine Rodo Log FIle)中,數據破壞了可以用這些日誌來恢復。一個數據庫至少需要兩個重做誌文件,oracle以循環的形式向日誌文件寫入,第一個日誌被添滿後,就向第二個寫入,然後依次類推,所有日誌文件被寫滿後,又回到第一個,用新的事務的數據進行重寫。

3.控制文件 (Control Files)

用以記錄與描述數據庫的外部結構,它包括

1) oracle數據庫名稱與建立時間

2) 數據文件與重置日誌文件名稱及所在位置

3) 日誌文件記錄序列碼( log sequence Nmuber)

每當數據庫被激活時,oracle會在實例激活後立刻讀取控制文件內容,待所有數據庫外部結構文件的在信息都收集完比,數據庫才會啟動,為避兔控制文件毀壞導致數據庫系統停止,建議用戶至少配置兩個控制文件,並存放在不同的磁盤上。

三、Oracle 中的用戶(這裏是學習的重點)

--- sys 用戶

超級用戶,最有最高權限,具有sysdba 角色,數據字典的擁有者,超級權限擁有者(SYSDBA),它具有 createDatabase 權限(只有它有!)

初始密碼是 change_on_install,此用戶不能刪除。

--- system 用戶

管理操作員,權限非常大,具有sysopert 角色,但沒有 createDatabase 權限

它默認的密碼是 manager ,此用戶不能被刪除。

--- scott 用戶

含有樣例表 EMP 與 DEPT ,可以修改密碼,用戶可以被刪除,在產品環境下,建議刪除或鎖定,它是一個普通用戶。

默認密碼是 tiget,默認是鎖定的,可以將其解鎖後使用。

解鎖方式 :

使用 高權限用戶登錄, alter user scott account unlock;

與scott平級的還有:ADAMS/WOOD, JONES/STEEL, CLARK/CLOTH and BLAKE/PAPER.

--- outln用戶

優化計劃的存儲大綱用戶,密碼是outln

建議創建後立即修改密碼,此用戶不能被刪除。

--- HR/HR用戶

(Human Resources), OE/OE (Order Entry), SH/SH (Sales History).

實驗、測試用戶,含有例表EMPLOYEES與DEPARTMENTS

可以修改密碼,用戶可以被刪除,在產品環境建議刪除或鎖定。

--- DBSNMP用戶

密碼:DBSNMP

數據庫中用於智能代理(Intelligent Agent)的用戶,用來監控和管理數據庫相關性能的用戶,如果停止該用戶,則無法提取相關的數據信息;可以改變密碼,需要放置新密碼到snmp_rw.ora文件,如果不需要Intelligent Agents,可以刪除。

--- SYSMAN用戶

是Oracle數據庫中用於EM管理的用戶,如果你不用該用戶,也可以刪除。(EM:enterprise manage 網頁形式的 圖形化 管理方式,類似SqlServer的企業管理器可以對oracle進行管理、優化等)

技術分享技術分享

四、初始用戶和表空間的創建

打開sqlplus

技術分享

創建表空間,創建一個用戶

1) 先在磁盤上創建目錄 f:/my_oracle_data2

技術分享

2) 創建臨時表空間

SQL> create temporary tablespace user_temp   //臨時表空間的名字(user_temp)是自己取的
tempfile ‘f:\\my_oracle_data2\user_temp.dbf‘
size 50m   //初始大小
autoextend on    //設置自增
next 50m maxsize 20480m  //設置臨時表空間  每次自增50兆 最大值是20480兆
extent management local;  //表示表空間采用本地表空間管理 ,與之對應的是數據字典表空間管理(缺點多,9i以後廢棄)

技術分享

3) 創建表空間

create  tablespace user_data2
logging
datafile ‘f:\\my_oracle_data2\user_data.dbf‘
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

技術分享

4) 創建用戶,並指定了表空間

create user sa identified by "sa" default tablespace user_data2 temporary tablespace user_temp;
//創建用戶的密碼 指定用戶是哪個表空間的 用戶默認的臨時表空

技術分享

這裏如果用這個用戶登錄 conn sa/sa 將出現如下錯誤

ORA-01045: user SA lacks CREATE SESSION privilege; logon denied 原因是沒權限

技術分享

授權 grant connect,resource to sa;

最後將會在指定的目錄裏找到我們創建的表空間:

技術分享

附註: connect,resource 是角色名稱,有了它們可以連接數據庫,並在表空間中建表了

附:查詢所有的表空間和數據文件對應情況

select * from DBA_DATA_FILES

Java基礎——Oracle(三)