Oracle 表空間與數據文件
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 表空間與數據文件