oracle下的數據庫實例、表空間、用戶及其表的區分


完整的Oracle數據庫通常由兩部分組成:Oracle數據庫和數據庫實例。 
1) 數據庫是一系列物理文件的集合(數據文件,控制文件,聯機日志,參數文件等); 
2) Oracle數據庫實例則是一組Oracle后台進程/線程以及在服務器分配的共享內存區。

在啟動Oracle數據庫服務器時,實際上是在服務器的內存中創建一個Oracle實例(即在服務器內存中分配共享內存並創建相關的后台內存),然后由這個Oracle數據庫實例來訪問和控制磁盤中的數據文件。Oracle有一個很大的內存快,成為全局區(SGA)。

一、數據庫、表空間、數據文件

1、數據庫

數據庫是數據集合。Oracle是一種數據庫管理系統,是一種關系型的數據庫管理系統。
通常情況了我們稱的“數據庫”,並不僅指物理的數據集合,他包含物理數據、數據庫管理系統。也即物理數據、內存、操作系統進程的組合體。

我們在安裝Oracle數據庫時,會讓我們選擇安裝啟動數據庫(即默認的全局數據庫)如下圖:

全局數據庫名:就是一個數據庫的標識,在安裝時就要想好,以后一般不修改,修改起來也麻煩,因為數據庫一旦安裝,數據庫名就寫進了控制文件,數據庫表,很多地方都會用到這個數據庫名。

啟動數據庫:也叫全局數據庫,是數據庫系統的入口,它會內置一些高級權限的用戶如SYS,SYSTEM等。我們用這些高級權限賬號登陸就可以在數據庫實例中創建表空間,用戶,表了。

查詢當前數據庫名:

select name from v$database;

 

2、數據庫實例

用Oracle官方描述:實例是訪問Oracle數據庫所需的一部分計算機內存和輔助處理后台進程,是由進程和這些進程所使用的內存(SGA)所構成一個集合。

其實就是用來訪問和使用數據庫的一塊進程,它只存在於內存中。就像Java中new出來的實例對象一樣。

我們訪問Oracle都是訪問一個實例,但這個實例如果關聯了數據庫文件,就是可以訪問的,如果沒有,就會得到實例不可用的錯誤。

實例名指的是用於響應某個數據庫操作的數據庫管理系統的名稱。她同時也叫SID。實例名是由參數instance_name決定的。

查詢當前數據庫實例名:

select instance_name from v$instance;

數據庫實例名(instance_name)用於對外部連接。在操作系統中要取得與數據庫的聯系,必須使用數據庫實例名。比如我們作開發,要連接數據庫,就得連接數據庫實例名:

jdbc:oracle:thin:@localhost:1521:orcl(orcl就為數據庫實例名)

一個數據庫可以有多個實例,在作數據庫服務集群的時候可以用到。


3、表空間

Oracle數據庫是通過表空間來存儲物理表的,一個數據庫實例可以有N個表空間,一個表空間下可以有N張表。

有了數據庫,就可以創建表空間。

表空間(tablespace)是數據庫的邏輯划分,每個數據庫至少有一個表空間(稱作SYSTEM表空間)。為了便於管理和提高運行效率,可以使用一些附加表空間來划分用戶和應用程序。例如:USER表空間供一般用戶使用,RBS表空間供回滾段使用。一個表空間只能屬於一個數據庫。

創建表空間語法:

Create TableSpace 表空間名稱  
DataFile          表空間數據文件路徑  
Size              表空間初始大小  
Autoextend on

如:

create tablespace db_test  
datafile 'D:\oracle\product\10.2.0\userdata\db_test.dbf'  
size 50m  
autoextend on;

查看已經創建好的表空間:

select default_tablespace, temporary_tablespace, d.username  
from dba_users d

 

4、用戶

Oracle數據庫建好后,要想在數據庫里建表,必須先為數據庫建立用戶,並為用戶指定表空間。

上面我們建好了數據庫和表空間,接下來建用戶:

創建新用戶:

CREATE USER          用戶名  
IDENTIFIED BY        密碼  
DEFAULT TABLESPACE   表空間(默認USERS)  
TEMPORARY TABLESPACE 臨時表空間(默認TEMP) 

如:

CREATE USER utest  
IDENTIFIED BY utestpwd  
DEFAULT TABLESPACE db_test  
TEMPORARY TABLESPACE temp;(這里臨時表空間不能使用我們創建的db_test,不知為何?) 

有了用戶,要想使用用戶賬號管理自己的表空間,還得給它分權限:

GRANT CONNECT TO utest;  
GRANT RESOURCE TO utest;  
GRANT dba TO utest;--dba為最高級權限,可以創建數據庫,表等。

查看數據庫用戶:

select  * from dba_users;


5、表

有了數據庫,表空間和用戶,就可以用自定義的用戶在自己的表空間創建表了。有了表,我們可以開發了。

 簡單的一段java代碼訪問oracle數據庫

package oracleConn;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         Connection con = null;// 創建一個數據庫連接
         PreparedStatement pre = null;// 創建預編譯語句對象,一般都是用這個而不用Statement
         ResultSet result = null;// 創建一個結果集對象
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            System.out.println("開始嘗試連接數據庫");
            String url = "jdbc:oracle:thin:@localhost:1521:orcl";
            String user = "system";
            String password="123456";
            //獲取連接
             con = DriverManager.getConnection(url, user, password);// 獲取連接
                System.out.println("連接成功!");
                String sql = "select * from t_user where name=?";// 預編譯語句,“?”代表參數
                pre = con.prepareStatement(sql);// 實例化預編譯語句
                pre.setString(1, "hubin");// 設置參數,前面的1表示參數的索引,而不是表中列名的索引
                result = pre.executeQuery();// 執行查詢,注意括號中不需要再加參數
                while (result.next())
                    // 當結果集不為空時
                    System.out.println("學號:" + result.getInt("id") + "姓名:"
                            + result.getString("name"));
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            finally
            {
                try
                {
                    // 逐一將上面的幾個對象關閉,因為不關閉的話會影響性能、並且占用資源
                    // 注意關閉的順序,最后使用的最先關閉
                    if (result != null)
                        result.close();
                    if (pre != null)
                        pre.close();
                    if (con != null)
                        con.close();
                    System.out.println("數據庫連接已關閉!");
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM