1. 程式人生 > >Oracle 表空間與數據文件

Oracle 表空間與數據文件

username 結構 rman 記錄日誌 back 返回 group bubuko 改名

Oracle 表空間與數據文件

一、概念

表空間:是一個或多個數據文件的邏輯集合

表空間邏輯存儲對象:永久段-->如表與索引

臨時段-->如臨時表數據與排序段

   回滾段-->用於事物回滾或閃回內存的撤銷數據

表空間分類:系統表空間(system、sysaux),非系統表空間

一個表空間至少包含一個數據文件,一個數據文件只能屬於一個表空間。

不可或缺的幾個表空間:

SYSTEM --->字典表空間,不能被損壞

UNDO --->dml,dql把數據快照到此,數據提交即消失(用於恢復)

SYSAUX --->10g 高並發系統繁忙時,會造成system爭用,將工具放到SYSAUX,減輕system的壓力,SYSAUX不影響系統(影響性能)

TEMP --->臨時數據相關的內容

USERS --->10g 用戶數據從system撥離出來

二、Oracle的存儲結構

1.Schema: 用戶--->創建相關對象、表、視圖、序列、函數、存儲過程、包等

2.邏輯結構:database數據庫--->tablespace表空間---> segment段--->extent區間----> block塊

邏輯結構是Oracle內部管理數據庫中對象的方式

3.物理結構:OS block --->datafile 物理結構通常是一系列數據文件

4.舉例描述scott用戶創建對象的組織方式

--查看scott用戶的默認表空間及數據文件

SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username = ‘SCOTT‘;

--查看表空間及數據文件

SQL> select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;

三、表空間

--簡要語法:

CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name

DATAFILE datafile spec | TEMPFILE tempfile spec

[MINIMUM EXTENT minimum extent size]

[BLOCKSIZE blocksize]

[[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]

[LOGGING|NOLOGGING]

[FORCE LOGGING]

[ONLINE|OFFLINE]

[EXTENT MANAGEMENT DICTIONARY |

LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]

[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]

[FLASHBACK ON|OFF]

--創建表空間的條件

1.具有create tablespace的權限,DBA角色具有該權限,sysdba,sysoper

2.創建的是bigfiel ,還是smallifle 超過T 級別應考慮bigfile

3.新建的表空間的I/O,是否會導致磁盤I/O不夠用

4.datafile後跟的路徑應該具備寫的權限 */

--查看缺省是BIGFILE 還是SMALLFILE,當缺省為SMALLFILE,創建表空間不指定表空間類型則為SMALLFILE

SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME like ‘%TBS%‘;

DEFAULT_TBS_TYPE SMALLFILE

--可修改默認值

SQL> alter database set default bigfile tablespace;

--改回默認值

SQL> alter database set default smallfile tablespace;

--創建表空間(單實例)

CREATE TABLESPACE YYHHQQ DATAFILE

‘F:\MYDB\YYHHQQ.DBF‘ SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 200M

LOGGING

ONLINE

PERMANENT

EXTENT MANAGEMENT LOCAL AUTOALLOCATE

BLOCKSIZE 8K

SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;

--rac

CREATE TABLESPACE EXAMPLE DATAFILE
‘+DATA/bol/datafile/example01.dbf‘ SIZE 100M AUTOEXTEND ON NEXT 640K MAXSIZE 32767M
NOLOGGING
ONLINE
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;

--修改db默認的表空間

SQL> ALTER DATABASE DEFAULT TABLESPACE YYHHQQ

--修改用戶的默認表空間

SQL> alter user hr default tablespace IN_THE_CLEAR;

--移動表到另外的表空間

SQL> alter table tablename move tablespace tablespacename;

--創建臨時表空間:

創建臨時表空間,不能使用非標準數據塊,另臨時表空間不能存放永久對象。

SQL> DROP TABLESPACE YHQ_TEMP INCLUDING CONTENTS AND DATAFILES;

CREATE TEMPORARY TABLESPACE YHQ_TEMP TEMPFILE

‘F:\MYDB\YHQ_TEMP.DBF‘ SIZE 20M AUTOEXTEND ON NEXT 10M MAXSIZE 100M

TABLESPACE GROUP ‘‘

EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

臨時表空間具有以下特征:

臨時數據文件不能置為只讀

臨時數據文件不能重命名

監時數據文件的日誌方式總是NOLOGGING

--重置臨時文件大小

SQL> alter database tempfile ‘F:\MYDB\YHQ_TEMP.DBF‘ resize 50m

--重置臨時文件能自動擴展

SQL> alter database tempfile ‘F:\MYDB\YHQ_TEMP.DBF‘ autoextend on next 10m maxsize 50m;

--增加臨時文件

SQL> alter tablespace YHQ_TEMP add TEMPFILE ‘F:\MYDB\YHQ_TEMP2.DBF‘ size 10m;

--查看臨時文件

SQL> select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)" from dba_temp_files;

TEMP F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF 20

YHQ_TEMP F:\MYDB\YHQ_TEMP.DBF 50

YHQ_TEMP F:\MYDB\YHQ_TEMP2.DBF 10

--默認臨時表空間

SQL> select * from database_properties;

--修改默認臨時表空間:

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE YHQ_TEMP;

--修改用戶的默認臨時表空間

SQL> alter user hr temporary tablespace TEMP;

默認臨時表空間最好要指定一下,如果沒有指定默認的臨時表空間,那麽將使用system表空間作為排序區

默認臨時表空間有一定的限制:

默認臨時表空間不能刪除

默認臨時表空間不能脫機

獲取創建表空間的語句

SQL> SELECT dbms_metadata.get_ddl(‘TABLESPACE‘,‘SYSTEM‘) FROM dual; --返回一個clob

--創建UNDO表空間(還原表空間)

DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE

‘F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF‘ SIZE 35M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED

ONLINE

RETENTION NOGUARANTEE

BLOCKSIZE 8K

FLASHBACK ON;

--修改當前系統的UNDO表空間:

SQL> ALTER SYSTEM SET UNDO_TABLESPACE=yhq_undo; ----scope=memory|spfile|both

---default 的是memory,實例重啟後失效

---spfile保存在spfile中,重啟後才能有效

---both保存在實例和spfile

---system只能指定一個空間

UNDO表空間擴容:

--重置DATAFILE大小

--讓DATAFILE能AUTOEXTEND

--添加數據文件

註:當前的UNDO表空間不能刪除

系統只能使用一個UNDO表空間

CREATE UNDO TABLESPACE yhq_undo DATAFILE

‘F:\MYDB\YHQ_undo.DBF‘ SIZE 35M AUTOEXTEND ON NEXT 5M MAXSIZE 100m

ONLINE

RETENTION NOGUARANTEE

BLOCKSIZE 8K

FLASHBACK ON;

--查看表空間使用的管理方式

SQL> select TABLESPACE_NAME,EXTENT_MANAGEMENT,BLOCK_SIZE,STATUS,CONTENTS,FORCE_LOGGING,BIGFILE from dba_tablespaces;

技術分享圖片

--表空間改名,必須在open狀態下,system,sysaux不能改名

SQL> alter tablespace xxx renmae to yyy;

--重置數據文件大小

SQL> alter database datafile ‘F:\MYDB\YYHHQQ.DBF‘ resize 100m;

--設置數據文件能自動增長

SQL> alter database DATAFILE ‘F:\MYDB\YYHHQQ.DBF‘ AUTOEXTEND OFF;

SQL> alter database DATAFILE ‘F:\MYDB\YYHHQQ.DBF‘ AUTOEXTEND ON NEXT 4M MAXSIZE 50M;

--查看

SQL> select name,file#,bytes/1024/1024 MB,status from v$datafile;

--為表空間添加數據文件

SQL> alter tablespace YYHHQQ add datafile ‘F:\MYDB\YYHHQQ2.DBF‘ size 100m;

--表空間的四種狀態:

online

offline

read only

read write

--alter tablespace test1 offline;

--alter tablespace test1 online;

--alter tablespace test1 read only;

--alter tablespace test1 read write;

tablespace_name  online read only
system 必須online ready write
sysaux 可以offline 不能read only
undo 不能offline 不能read only

--查看表空間的狀態

SQL> select tablespace_name,file#,v.status,v.enabled from dba_data_files d,v$datafile v where d.file_id = v.file#;

技術分享圖片

刪除表空間:

意味著表空間和數據文件的信息從數據庫中刪除,同時也應該將相應的操作系統文件刪除

不能刪除的表空間

系統表空間

有活動回滾段的表空間

默認臨時/永久表空間

DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND DATAFILES]]

INCLUDING CONTENTS -- 刪除表空間及所有段

INCLUDING CONTENTS [AND DATAFILES] --刪除表空間、所有段、數據文件、同時刪除系統中的物理文件

SQL> alter tablespace starhub including contents and datafiles cascade constraints;

--限制某個用戶對表空間的使用

--alter user username quota n on tablespacename;

SQL> alter user scott QUOTA 10m on UU;

--取消限制

--alter user username QUOTA UNLIMITED on tablespacename;

--grant unlimited tablespace to username;

--獲取表空間和數據文件信息

--表空間信息,系統視圖

dba_tablespaces,v$tablespace

--數據文件信息

dba_data_files,v$datafile

--臨時數據文件信息

dba_temp_files,v$tempfile

四、數據文件

數據文件是數據庫中最重要的一個要求,是所有的數據庫內容存放的地方

datafile是按照表空間為組織單位,表空間的構成是按照段區塊為層次---數據文件的邏輯結構

datafile就是表空間的物理文件。

datafile中的內容是通過dbwr把data buffer cache中的dirty buffer data 寫入的

--數據文件的增加與刪除

SQL> alter tablespace tb1 add datafile ‘/u01/app/oradata/orcl/tbs02.dbf‘ size 10m autoextend on;

SQL> alter tablespace tb1 drop datafile 9;--v$datafile中的file#,有數據的數據文件不能刪,

數據文件的日誌記錄

只有temp表空間是nologing 別的都是logging的

日誌記錄的幾種模式

nologing 並不是不記錄日誌而是記錄的很少

logging 正常記錄日誌信息

force logging 記錄的日誌比logging還詳細 記錄信息非常多 用於DG data guard 容災的情況

SQL> alter tablespace tb1 nologging | logging | force logging;

SQL> select tablespace_name ,logging,force_logging from dba_tablespaces;

技術分享圖片

SQL> alter tablespace EXAMPLE logging;

Oracle 表空間與數據文件