1. 程式人生 > >oracle 體系結構複習

oracle 體系結構複習

1.體系結構篇

1.物理結構:簡述Oracle的物理結構包含哪些內容,針對每種物理檔案介紹一種與其相關的資料字典或其它檢視命令。

1.  資料檔案data file  字尾為.dbf       資料字典: dba_data_filesv$datafile

2.日誌檔案(redo log file)  字尾為.rdo         V$logv$logfile

3. 歸檔檔案:字尾為.ARC   ARCHIVE LOG LIST

v$database

4.控制檔案(control file )  字尾為.ctl    v$controlfile

5.配置檔案(*.ora)

2.  日誌檔案的新增刪除和修改,注意日誌檔案包括分組  (group)和成員(member)p109

例1ALTER DATABASE語句中使用ADD LOGFILE子句也可以建立重做日誌組:

ALTER DATABASE   ADD LOGFILE ('log1c.rdo', 'log2c.rdo') SIZE 5000k;

【例2】在使用ALTER DATABASE

語句建立重做日誌組時,可以使用GROUP子句定義組編號:

ALTER DATABASE  ADD LOGFILE GROUP 10 ('log1a.rdo', 'log2a.rdo') SIZE 5000k;

【例3】ALTER DATABASE語句中使用ADD LOGFILE MEMBER關鍵字,可以向已存在的重做日誌組中新增成員:

ALTER DATABASE ADD LOGFILE MEMBER 'log3a.rdo' TO GROUP 10;

例4刪除編號為10的重做日誌組:

SQL> ALTER DATABASE DROP LOGFILE GROUP 10

例5刪除重做日誌組log1a.rdo

SQL> ALTER DATABASE DROP LOGFILE MEMBER 'log1a.rdo';

3.邏輯結構:包含哪些內容及它們之間的關係。

表空間(tablespace) 段(segment) 區(extent)   4  資料庫塊(database block);  模式物件(表、檢視、序列和同義詞等)

表空間由表等schema物件組成,(分割槽表的一個區由一個段組成),段由區間組成,區間則由資料塊組成。

解釋補充:

1.表空間是Oracle中最大的邏輯儲存結構,它與物理上的一個或多個數據檔案相對應,每個Oracle資料庫都至少擁有一個表空間,表空間的大小等於構成該表空間的所有資料檔案大小的總和。

2.在安裝Oracle時,Oracle資料庫系統一般會自動建立一系列表空間(Oracle安裝好後自帶的表空間

sysaux  輔助系統表空間。用於減少系統表空間的負荷,提高系統的作業效率。該表空間由Oracle系統內部自動維護,一般不用於儲存使用者資料。

system  系統表空間,用於儲存系統的資料字典、系統的管理資訊和使用者資料表等。

temp 臨時表空間。用於儲存臨時的資料,例如儲存排序時產生的臨時資料。 臨時表空間本身不是臨時存在的,而是永久存在的,只是儲存在臨時表空間中的段是臨時的。臨時表空間的存在,可以減少臨時段與儲存在其他表空間中的永久段之間的磁碟I/O爭用。

undo  撤消表空間。用於在自動撤消管理方式下儲存撤消資訊。在撤消表空間中,除了回退段以外,不能建立任何其他型別的段。所以,使用者不可以在撤消表空間中建立任何資料庫物件。

users   使用者表空間。用於儲存永久性使用者物件和私有資訊。

大檔案表空間(Bigfile Tablespaces  Oracle 10g以上版本提供的一種新的表空間,它只能包含一個大檔案,但檔案大小可以達到4G資料塊。

4.Oracle資料庫段的型別

·資料段(Data Segment)  資料段是與資料庫物件相對應,一般一個數據庫物件對應一個數據段。  

·索引段(Index Segment)   每個索引都有一個索引段
·回滾段(Rollback Segment)  回滾段中的資訊將在資料庫恢復過程中使用到。
·臨時段(Temporary Segment)  當執行SQL語句需要臨時工作區時,Oracle 將建立臨時段。執行完畢後,臨時段的區間將被系統回收,以備需要時分配使用。

補充:資料庫模式物件在邏輯上是以段來佔據表空間的大小。 一個非分割槽表就是一個segment,分割槽表的一個分割槽是一個segment。段由區組成,組成段的區可以連續也可以不連續。

oracle資料庫在邏輯上是由多個表間組成的

表空間中儲存的物件叫段,比如資料段,索引段,和回退段。

段由區組成,區是磁碟分配的最基本單位。段的增大是通過增加區的個數來實現的。

每個區的大小是資料塊大小的整數倍,區的大小可以不相同;

資料塊是資料庫中最小的I/O單位, 通過SHOW PARAMETER db_block_size顯示其大小

5.表空間和資料檔案及段的關係

表空間和資料檔案是物理儲存上的一對多的關係。

表空間和段是邏輯儲存上的一對多的關係。

段不可以跨表空間,一個段只能屬於一個表空間。

段不直接和資料檔案有聯絡。一個段可以屬於多個數據檔案。

6.簡介後臺程序的名稱和作用

DBWn(Database Writer,資料庫寫入)程序,是Oracle中採用LRU演算法將資料緩衝區中的資料寫入資料檔案的程序。

LGWR(Log Writer,日誌寫入)程序,是負責管理日誌緩衝區的一個後臺程序,用於將日誌緩衝區中的日誌資料寫入磁碟的日誌檔案中。

CKPT(Check Point,檢查點或檢驗點)程序,一般在發生日誌切換時自動產生,用於縮短例項恢復所需的時間。

SMON(System Monitor,系統監控)程序,用於資料庫例項出現故障或系統崩潰時,通過將聯機重做日誌檔案中的條目應用於資料檔案,執行崩潰恢復。

PMON(Process Monitor,程序監控)程序,用於在使用者程序出現故障時執行程序恢復操作,負責清理記憶體儲存區和釋放該程序所使用的資源。

ARCn(Archive Process,歸檔)程序,用於將寫滿的日誌檔案複製到歸檔日誌檔案中,防止日誌檔案組中的日誌資訊由於日誌檔案組的迴圈使用而被覆蓋。

RECO(Recovery,恢復)程序存在於分散式資料庫系統中,用於自動解決在分散式資料庫中出現的事務故障。

7.記憶體結構:詳述SGA的組成

系統全域性區(System Global AreaSGA)是Oracle為系統分配的一組共享的記憶體結構,可以包含一個數據庫例項的資料或控制資訊。

 

1.資料緩衝區  •資料緩衝區用於儲存從磁碟資料檔案中讀取的資料,供所有使用者共享。由於系統讀取記憶體的速度要比讀取磁碟快得多,所以資料緩衝區的存在可以提高資料庫的整體效率。

§2.日誌緩衝區  •日誌緩衝區用於儲存資料庫的修改操作資訊。

§3.共享池  •共享池用於儲存最近執行的SQL語句、PL/SQL程式的資料字典資訊,它是對SQL語句和PL/SQL程式進行語法分析、編譯和執行的記憶體區域。共享池主要包括如下兩種子快取。

庫快取(Library Cache)

資料字典快取(Data Dictionary Cache)

§4.大型池  大型池,用於提供一個大的緩衝區供資料庫的備份與恢復操作使用,它是SGA的可選區域。

§5Java   •Java池,用於在資料庫中支援Java的執行。

8.1.幾個埠和幾個Oracle啟動項

OracleServiceORCL。資料庫服務,這個服務會自動地啟動和停止資料庫

OracleDBConsoleorclOracle資料庫控制檯服務

OracleOraDb11g_home1TNSListener。監聽器服務,服務資料庫需要遠端訪問時才需要。

OracleJobSchedulerORCLOracle作業排程進行,ORCLOracle例程標識

監聽埠  1521-上機時需要注意開啟和修改兩個監聽檔案監聽(listener.oratnsnames.ora

控制檯:1158

9.表空間的建立  見筆記基本表空間,UNDO表空間、臨時表空間、大檔案表空間、建立一個表空間對應兩個資料檔案、段的管理、區的管理

1】建立大小為50M的表空間TEST,禁止自動擴充套件資料檔案。

  create tablespace test1 logging

       datafile ‘c:\test101.dbf' size 5m reuse    autoextend off;

2】建立大小一個表空包含帶兩個資料檔案,其中一個數據檔案帶有自動擴充套件功能,每次增加1000K一個數據檔案自動擴充套件關閉。

 create  tablespace ts1   datafile 'd:\t1.dbf' size 5000k autoextend on   next 1000k,

        'd:\t2.dbf' size 5000k autoextend off;

3】建立表空間區管理為自動分配的表空間

   CREATE TABLESPACE OrclTBS01    DATAFILE 'C:\OrclTBS01.dbf' SIZE 1M,

'c:\OrclTBS02.dbf' size 1m   EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

4】在建立表空間OrclTBS02時,指定其區間為128KB,程式碼如下:

CREATE TABLESPACE OrclTBS02

    DATAFILE 'C:\o\OrclTBS02.dbf' SIZE 3M

    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

表空間已建立。

 

v5】建立自動段管理方式的表空間MyTBS01

   CREATE TABLESPACE ts1

        DATAFILE 'C:\o\OrclTBS01.dbf' SIZE 3M

           EXTENT MANAGEMENT LOCAL AUTOALLOCATE

              SEGMENT SPACE MANAGEMENT AUTO;

6】建立手動段管理方式的表空間MyTBS01

SQL> CREATE TABLESPACE OrclTBS01

' SIZE 30M

    EXTENT MANAGEMENT LOCAL AUTOALLOCATE

    SEGMENT SPACE MANAGEMENT MANUAL;

 

8】建立臨時表空間tmptbs,程式碼如下:

SQL>

CREATE TEMPORARY TABLESPACE    tmptbs

    TEMPFILE 'C:\o\tmptbs.dbf'

    SIZE 2M REUSE

    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

表空間已建立。

注意:

臨時表空間不能使用online offline 選項

10.三種增加表空間容量的辦法


Meathod1:給表空間增加資料檔案
ALTER TABLESPACE app_data ADD DATAFILE
'D:\1.DBF' SIZE 50M REUSE;
 
Meathod2:在建立表空間時,可以設定資料檔案的自動擴充套件性。在為表空間增加新的資料檔案時,也可以設定新資料檔案的自動擴充套件性
ALTER TABLESPACE ADD DATAFILE
'D:\2.DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
 
Meathod3:允許已存在的資料檔案自動增長
ALTER DATABASE DATAFILE 'D:\4.DBF'
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
 
Meathod4:手工改變已存在資料檔案的大小
Alter database orcl1 datafile 'c:\o\test2.dbf' resize  2m;

11.如何重新命名資料檔案

重命名錶空間(system 和sysaux 除外) Alter tablespace test rename to mytest

【例】將表空間OrclTBS02中的資料檔案改名。可以使用下面的語句: ALTER TABLESPACE mytest rename datafile 'c:\o\10.dbf' to  'c:\o\test0001.dbf‘

移動mytest表空間中資料檔案test001.dbf的步驟如下。

(1)修改mytest表空間的狀態為OFFLINE SQL> ALTER TABLESPACE test OFFLINE;

(2)將磁碟中的myspace02.dbf檔案移動到新的目錄中(物理上)  

(3)使用ALTER TABLESPACE語句,將mytest表空間中test001.dbf檔案的原名稱和路徑修改為新名稱和路徑 (邏輯對應上)

(4)修改mytest表空間的狀態為ONLINE,如下: SQL> ALTER TABLESPACE mytest ONLINE; 檢查檔案是否移動成功需要介質恢復 (核實) recover datafile 'd:\102.dbf'

 

  1. 移動mytest表空間中資料檔案test001.dbf的步驟如下。
    • (1)修改mytest表空間的狀態為OFFLINE
      • SQL> ALTER TABLESPACE test OFFLINE;
    • (2)將磁碟中的myspace02.dbf檔案移動到新的目錄中(物理上)

 (3)使用ALTER TABLESPACE語句,將mytest表空間中test001.dbf檔案的原名稱和路徑修改為新名稱和路徑 (邏輯對應上)

    • (4)修改mytest表空間的狀態為ONLINE,如下:
      • SQL> ALTER TABLESPACE mytest ONLINE;
    • 檢查檔案是否移動成功需要介質恢復 (核實)
      recover datafile 'd:\102.dbf'

【例1】將表空間OrclTBS01設定為離線狀態:

SQL> ALTER TABLESPACE OrclTBS01 OFFLINE;

【例2】將表空間OrclTBS01設定為聯機狀態:

SQL> ALTER TABLESPACE OrclTBS01 ONLINE;

【例3】將表空間OrclTBS01設定為只讀表空間:

ALTER TABLESPACE ORCTB01 READ ONLY;

【例4】將表空間OrclTBS01設定為可讀寫狀態:

ALTER TABLESPACE OrclTBS01 READ WRITE;

【例5】刪除表空間OrclTBS01

DROP TABLESPACE OrclTBS01;

【例6】刪除表空間的同時,刪除包含的段和資料檔案

DROP TABLESPACE OrclTBS03 INCLUDING CONTENTS AND DATAFILES;

  1. 將一個已經存在的表移動到另一個表空間

ALTER TABLE XS MOVE TABLESPACE USERS

  1. 利用CREATE TABLE命令為XSCJ資料庫建立表XS_KC
  2. alter table <table_name>  logging | nologging;
  3. alter table <table_name> move tablespace <tablespace_name>
  4. 建立XS表中計算機專業學生的記錄備份。

CREATE TABLE XS_JSJ AS SELECT * FROM XS_KC  WHERE CJ>80

【例11】(1) 在表XS中增加2列:JXJ(獎學金等級)DJSM(等級說明)

  

CREATE TABLE SCOTT.XS

(XH VARCHAR2(6) NOT NULL,

XM VARCHAR2(8) NOT NULL,

ZYM VARCHAR2(6),

XB VARCHAR2(2),

CSSJ DATE,

ZXF NUMBER(2),

PRIMARY KEY (XH))    //建立表

 

//增加列

ALTER TABLE SCOTT.XS    ADD ( JXJ NUMBER(1),  DJSM VARCHAR2(40) DEFAULT  '獎金1000');

!!!

ALTER TABLE [schema.] table_name

     ADD(列名字  列型別), 

     MODIFY (列名字 列型別)|(列名字  DEFAULT 預設值)        (column_constraint,…n)      

     [ DROP COLUMN  列名]

  1. 在表XS中修改名為DJSM的列的預設值。

Alter tablespace scott.xs modify (djsm default 獎金800元);

  1. 在表XS中刪除名為JXJDJSM的列

Alter tablespace scott.xs drop  column jxj;

Alter tablespace scott.xs drop  column djsm;

[例13]例如要刪除表XS

Drop table xs