--==============================
--Oracle 表空間與數(shù)據(jù)文件
--==============================
/*
一、概念
表空間:是一個或多個數(shù)據(jù)文件的邏輯集合
表空間邏輯存儲對象:永久段-->如表與索引
臨時段-->如臨時表數(shù)據(jù)與排序段
回滾段-->用于事物回滾或閃回內(nèi)存的撤銷數(shù)據(jù)
表空間分類:系統(tǒng)表空間(system、sysaux),非系統(tǒng)表空間
一個表空間至少包含一個數(shù)據(jù)文件,一個數(shù)據(jù)文件只能屬于一個表空間。
不可或缺的幾個表空間:
SYSTEM --->字典表空間,不能被損壞
UNDO --->dml,dql把數(shù)據(jù)快照到此,數(shù)據(jù)提交即消失(用于恢復(fù))
SYSAUX --->10g 高并發(fā)系統(tǒng)繁忙時,會造成system爭用,將工具放到SYSAUX,減輕system的壓力,SYSAUX不影響系統(tǒng)(影響性能)
TEMP --->臨時數(shù)據(jù)相關(guān)的內(nèi)容
USERS --->10g 用戶數(shù)據(jù)從system撥離出來
二、Oracle的存儲結(jié)構(gòu)
1.Schema: 用戶--->創(chuàng)建相關(guān)對象、表、視圖、序列、函數(shù)、存儲過程、包等
2.邏輯結(jié)構(gòu):database數(shù)據(jù)庫--->tablespace表空間---> segment段--->extent區(qū)間----> block塊
邏輯結(jié)構(gòu)是Oracle內(nèi)部管理數(shù)據(jù)庫中對象的方式
3.物理結(jié)構(gòu):OS block --->datafile 物理結(jié)構(gòu)通常是一系列數(shù)據(jù)文件
4.舉例描述scott用戶創(chuàng)建對象的組織方式 */
--查看scott用戶的默認(rèn)表空間及數(shù)據(jù)文件
SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE
2 from dba_users
3 where username = 'SCOTT';
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
SCOTT USERS TEMP
SQL> col name format a50
SQL> select t1.name,t2.name --查看表空間及數(shù)據(jù)文件
2 from v$tablespace t1,v$datafile t2
3 where t1.ts# = t2.ts#;
NAME NAME
-------------------------------------------------- --------------------------------------------------
SYSTEM /u01/app/oracle/oradata/orcl/system01.dbf
UNDOTBS1 /u01/app/oracle/oradata/orcl/undotbs01.dbf
SYSAUX /u01/app/oracle/oradata/orcl/sysaux01.dbf
USERS /u01/app/oracle/oradata/orcl/users01.dbf
EXAMPLE /u01/app/oracle/oradata/orcl/example01.dbf
/*
scott-->emp(table)-->數(shù)據(jù)定義(位于)-->system表空間
數(shù)據(jù)(位于) -->user表空間(邏輯存儲)-->表段-->區(qū)間-->內(nèi)存塊
-->索引段等-->區(qū)間-->內(nèi)存塊
user表空間(物理存儲)-->user01.dbf
-->采用本地管理,包含頭部信息,可用、已用等位圖信息
當(dāng)databuffer緩沖區(qū)滿則調(diào)用dbwr進程將數(shù)據(jù)寫入到物理文件當(dāng)中 */
/*
三、創(chuàng)建表空間
--簡要語法:
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]
--創(chuàng)建表空間的條件
1.具有create tablespace的權(quán)限,DBA角色具有該權(quán)限,sysdba,sysoper
2.創(chuàng)建的是bigfiel ,還是smallifle 超過T 級別應(yīng)考慮bigfile
3.新建的表空間的I/O,是否會導(dǎo)致磁盤I/O不夠用
4.datafile后跟的路徑應(yīng)該具備寫的權(quán)限 */
--查看缺省是BIGFILE 還是SMALLFILE,當(dāng)缺省為SMALLFILE,創(chuàng)建表空間不指定表空間類型則為SMALLFILE
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME like '%TBS%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------
DEFAULT_TBS_TYPE SMALLFILE
--修改創(chuàng)建表空間為大或小表空間的默認(rèn)值
SQL> alter database set default bigfile tablespace;
Database altered.
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME like '%TBS%';
PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------
DEFAULT_TBS_TYPE BIGFILE
--改回為缺省值
SQL> alter database set default smallfile tablespace;
Database altered.
--建議創(chuàng)建表空間時最好帶上[BIGFILE | SMALLFILE]參數(shù),以免參數(shù)設(shè)置導(dǎo)致創(chuàng)建了不合理的表空間
/*
注意:
大表文件(bigfile)最大可以存放個T的容量。頭文件的大小達(dá)到了G-->block,普通的頭文件大小為M---->block。
create bigfile tablespace <> datafile <>........;
好處:減少了數(shù)據(jù)文件的個數(shù),管理方便,大的對象的存放得到了優(yōu)化。減少了control文件的信息,控制文件定義了datafile的個數(shù)。
bigfile只能存在一個數(shù)據(jù)文件,所以要保證分配的的磁盤具有足夠的空間。 */
--演示創(chuàng)建表空間
SQL> create tablespace TBS1 datafile '/u01/app/oracle/oradata/orcl/tbs1.dbf' size 100m;
Tablespace created.
SQL> col name format a50
SQL> select t1.name,t2.name
2 from v$tablespace t1,v$datafile t2
3 where t1.ts# = t2.ts#;
NAME NAME
-------------------------------------------------- --------------------------------------------------
SYSTEM /u01/app/oracle/oradata/orcl/system01.dbf
UNDOTBS1 /u01/app/oracle/oradata/orcl/undotbs01.dbf
SYSAUX /u01/app/oracle/oradata/orcl/sysaux01.dbf
USERS /u01/app/oracle/oradata/orcl/users01.dbf
EXAMPLE /u01/app/oracle/oradata/orcl/example01.dbf
TBS1 /u01/app/oracle/oradata/orcl/tbs1.dbf
/*
創(chuàng)建臨時表空間:
創(chuàng)建臨時表空間,不能使用非標(biāo)準(zhǔn)數(shù)據(jù)塊,另臨時表空間不能存放永久對象。*/
CREATE TMEPORARY TABLESPACE tablespace_name
TEMPFILE '...' SIZE n
CREATE TEMPORARY TABLESPACE T2 TEMPFILE '/opt/oracle/oradata/orcl/t2.dbf'
size 100m;
/*
臨時表空間具有以下特征:
臨時數(shù)據(jù)文件不能置為只讀
臨時數(shù)據(jù)文件不能重命名
監(jiān)時數(shù)據(jù)文件的日志方式總是NOLOGGING
臨時表空間擴容:*/
--(1)重置臨時文件大小
alter database tempfile '/opt/oracle/oradata/orcl/t2.dbf' resize 150m;
--(2)讓臨時文件能自動擴展
alter database tempfile '/opt/oracle/oradata/orcl/t2.dbf'
autoextend on next 10m maxsize 50m;
--(3)增加臨時文件
alter tablespace t2 add tempfile '/disk8/oracle/t2b.dbf' size 50m;
--查看臨時文件
select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)"
from dba_temp_files;
--默認(rèn)臨時表空間:
select * from database_properties;
--修改默認(rèn)臨時表空間:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE T2;
/*
默認(rèn)臨時表空間最好要指定一下,如果沒有指定默認(rèn)的臨時表空間,那么將使用system表空間作為排
序區(qū)
默認(rèn)臨時表空間有一定的限制:
默認(rèn)臨時表空間不能刪除
默認(rèn)臨時表空間不能脫機
獲得創(chuàng)建表空間的語句:*/
SELECT dbms_metadata.get_ddl('TABLESPACE','SYSTEM') FROM dual;
/*
臨時表空間組:
10G引入的,是一組臨時表空間,只能由臨時表空間組成。組名不能與臨時表空間同名
臨時表空間不能顯示的創(chuàng)建和刪除,當(dāng)把第一個臨時表空間分配給某個臨時表空間組的時候,自動創(chuàng)建
臨時表空間組,將最后一個臨時表空間,刪除時,組也將自動刪除。
創(chuàng)建臨時表空間組:
1、創(chuàng)建臨時表空間的時候 */
CREATE TEMPORARY TABLESPACE tablespace_name TEMPFILE '...' SIZE n
TABLESPACE GROUP group_name;
ALTER TABLESPACE tablespace_name TABLESPACE GROUP group_name;
ALTER TABLESPACE T3 TABLESPACE GROUP TEMP_GRP;
--查看臨時表空間組的信息:
dba_tablespace_groups
SELECT * FROM DBA_TABLESPACE_GROUPS;
--將臨時表空間組成員移除:
ALTER TABLESPACE tablespace_name TABLESPACE GROUP '';
--可將系統(tǒng)默認(rèn)的臨時表空間設(shè)為臨時表空間組:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;
--刪除臨時表空間:
--將所有成員全移出去,便自動刪除
--創(chuàng)建UNDO表空間(還原表空間):
/*
創(chuàng)建語法:*/
CREATE UNDO TABLESPACE tablespace_name DATAFILE '...' SIZE n
SQL> CREATE UNDO TABLESPACE undo2
DATAFILE '/opt/oracle/oradata/orcl/undo2_01.dbf' SIZE 200M,
'/opt/oracle/oradata/orcl/undo2_02.dbf' size 100m;
--修改當(dāng)前系統(tǒng)的UNDO表空間:
ALTER SYSTEM SET UNDO_TABLESPACE=tablespace_name
/*
UNDO表空間擴容:
()重置DATAFILE大小
()讓DATAFILE能AUTOEXTEND
()添加數(shù)據(jù)文件
刪除UNDO表空間 */
DROP TABLESPACE tablespace_name
/*
注:當(dāng)前的UNDO表空間不能刪除
系統(tǒng)只能使用一個UNDO表空間 */
--創(chuàng)建表空間的詳細(xì)語法:http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_7003.htm#SQLRF01403
/*
四、表空間的管理方式:
字典管理:oracle 8i(不包括i),只存在一種表空間的管理模式,即字典管理表空間(DMT)
DMT是指oracle的空間分配或回收是通過數(shù)據(jù)庫中的數(shù)據(jù)字典表來記錄和管理的
用于管理的兩個數(shù)據(jù)字典表分別是:UET$(used extents)和FET$(freeextents)
其工作方式是:當(dāng)建立一個新的段或者段在表空間時,oracle通過一系列的SQL語句來完成這個工作
且和前面的兩個字典表有關(guān),在繁忙的系統(tǒng)中會造成競爭和等待(另一個DMT會帶來的問題是空間碎片)
本地管理(LMT): 在i的R2版本后成了默認(rèn)的選項
LMT在表空間的數(shù)據(jù)文件頭部加入了一個位圖區(qū)域,在其中記錄每個extent的使用狀況
當(dāng)extent被使用或者被釋放,oracle會更新頭部的記錄來反映這個變化,不產(chǎn)生回滾信息
因為僅僅操作數(shù)據(jù)文件頭部的幾個數(shù)據(jù)塊,不用操作數(shù)據(jù)字典,LMT比DMT要快,尤其是在繁忙的時候更明顯
--查看表空間使用的管理方式: */
SQL> select TABLESPACE_NAME,EXTENT_MANAGEMENT,BLOCK_SIZE,STATUS,CONTENTS,FORCE_LOGGING,BIGFILE
2 from dba_tablespaces;
TABLESPACE_NAME EXTENT_MAN BLOCK_SIZE STATUS CONTENTS FOR BIG
------------------------------ ---------- ---------- --------- --------- --- ---
SYSTEM LOCAL 8192 ONLINE PERMANENT NO NO
UNDOTBS1 LOCAL 8192 ONLINE UNDO NO NO
SYSAUX LOCAL 8192 ONLINE PERMANENT NO NO
TEMP LOCAL 8192 ONLINE TEMPORARY NO NO
USERS LOCAL 8192 ONLINE PERMANENT NO NO
EXAMPLE LOCAL 8192 ONLINE PERMANENT NO NO
TBS1 LOCAL 8192 ONLINE PERMANENT NO NO
--DMT 和LMT 的相互轉(zhuǎn)換
--將字典管理的表空間轉(zhuǎn)換為本地管理
exec dbms_space_admin.tablespace_migrate_to_local('表空間名') --表空間名用大寫
--將本地管理的表空間轉(zhuǎn)換為字典管理
exec dbms_space_admin.tablespace_migrate_from_local('表空間名')
--表空間改名:
--必須在open狀態(tài)下,system , sysaux 不能改名
ALTER TABLESPACE XXX RENAME TO YYY
--表空間的擴容:
/*
表空間的大小由組成它的所有數(shù)據(jù)文件的大小之和來決定
擴容的方法:*/
--(1)重置數(shù)據(jù)文件大小
ALTER DATABASE DATAFILE '...' | FileNo RESIZE XX
--(2)設(shè)置數(shù)據(jù)文件能自動增長
ALTER DATABASE DATAFILE '... '| FileNo AUTOEXTEND ON | OFF NEXT 20M MAXSIZE 300M;
--查看哪些表空間為自動增長
SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;
/* (3)添加數(shù)據(jù)文件
增加到表空間中的數(shù)據(jù)文件不能直接從表空間中刪除,除非刪掉整個表空間
增加數(shù)據(jù)文件將有助于均衡I/O
一個表空間文件最多為個,文件越多,執(zhí)行一次檢查點的代價越高 */
ALTER TABLESPACE tablespace_name ADD DATAFILE '...' SIZE XX;
ALTER TABLESPACE tbs2 ADD DATAFILE '/u01/app/oracle/oradata/orcl/tbs2.dbf' size 200m autoextend on ;
--表空間的四種狀態(tài):
online
offline
read only
read write
/*
offline:
一個表空間的正常狀態(tài)是聯(lián)機(ONLINE),有時需要將某一個表空間進行脫機,以進行數(shù)據(jù)庫維護
如:
在數(shù)據(jù)庫打開的狀態(tài)下移動數(shù)據(jù)文件
在數(shù)據(jù)庫打開的情況下恢復(fù)一個表空間或數(shù)據(jù)文件
執(zhí)行表空間的脫機備份(雖然可以進行進行聯(lián)機備份)
使數(shù)據(jù)庫某一部分不可訪問,讓其它部分能正常訪問。
表空間脫機的時候,將產(chǎn)生檢查點事件,該表空間上的數(shù)據(jù)是不能訪問的
命令:*/
ALTER TABLESPACE tablespace_name OFFLINE;
--聯(lián)機命令:
ALTER TABLESPACE tablespace_name ONLINE;
--在脫機后,有可能無法再聯(lián)機,這時要做數(shù)據(jù)的介質(zhì)恢復(fù)
ALTER DATABASE RECOVER TABLESPACE tablespace_name
ALTER TABLESPACE tablespace_name ONLINE;
/*
read only:
不能執(zhí)行DML語句,可以使用的為DDL,DQL語句 */
ALTER TABLESPACE tablespace_name READ ONLY;
read write:
ALTER TABLESPACE tablespace_name READ WRITE;
--一些表空間的特殊狀態(tài)
tablespacename onlie read only
system 必須online 必須read write
sysaux 可以offline 不能read only
undo 不能offline 不能read only
--查看表空間的狀態(tài)
SQL> select tablespace_name,file#,v.status,v.enabled from dba_data_files d,
2 v$datafile v
3 where d.file_id = v.file#;
TABLESPACE_NAME FILE# STATUS ENABLED
------------------------------ ---------- ------- ----------
SYSTEM 1 SYSTEM READ WRITE
UNDOTBS1 2 ONLINE READ WRITE
SYSAUX 3 ONLINE READ WRITE
USERS 4 ONLINE READ WRITE
EXAMPLE 5 ONLINE READ WRITE
TBS1 6 ONLINE READ WRITE
--幾種狀態(tài)的相互轉(zhuǎn)換的演示
--將表空間置為只讀
SQL> alter tablespace users read only;
Tablespace altered.
SQL> update scott.emp set sal = sal + 50 where ename = 'SCOTT'; --置為只讀后不可更新
update scott.emp set sal = sal + 50 where ename = 'SCOTT'
*
ERROR at line 1:
ORA-00372: file 4 cannot be modified at this time
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
SQL> select tablespace_name,file#,v.status,v.enabled from dba_data_files d,
2 v$datafile v
3 where d.file_id = v.file# and tablespace_name = 'USERS';
TABLESPACE_NAME FILE# STATUS ENABLED
------------------------------ ---------- ------- ----------
USERS 4 ONLINE READ ONLY
--將表空間置為脫機
SQL> alter tablespace users offline;
Tablespace altered.
SQL> update scott.emp set sal = sal + 100 where ename = 'SCOTT';/*置為脫機后不可更新*/
update scott.emp set sal = sal + 100 where ename = 'SCOTT'
*
ERROR at line 1:
ORA-00376: file 4 cannot be read at this time
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
--將表空間置為聯(lián)機
SQL> alter tablespace users online;
Tablespace altered.
SQL> select tablespace_name,file#,v.status,v.enabled from dba_data_files d,
2 v$datafile v
3 where d.file_id = v.file# and tablespace_name = 'USERS';
TABLESPACE_NAME FILE# STATUS ENABLED
------------------------------ ---------- ------- ----------
USERS 4 ONLINE READ ONLY
--注意,readonly 狀態(tài)下的表空間可以刪除數(shù)據(jù),僅僅是不能插入或更新數(shù)據(jù),如下
SQL> delete from scott.emp where ename = 'SCOTT';
SQL> rollback;
Rollback complete.
--將表空間置為讀寫狀態(tài)
SQL> alter tablespace users read write;
Tablespace altered
--表空間數(shù)據(jù)文件的重命名或重定位
--方法一,在open狀態(tài)下且處于archive模式:
--1、查出數(shù)據(jù)文件位置和所屬的表空間
select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)"
from dba_data_files;
--2、將數(shù)據(jù)文件所在的表空間離線
alter tablespace uu offline;
--3、在操作系統(tǒng)下將文件移動到另外一個位置,或重命名(建議使用cp)
host mv /opt/oracle/oradata/orcl/tt.dbf /disk9/uu1.dbf
--4、修改控制文件,將數(shù)據(jù)文件的指針重新指向到另一個位置(執(zhí)行rename)
alter tablespace uu rename datafile '/opt/oracle/oradata/orcl/tt.dbf'
to '/disk9/uu1.dbf';
--5、表空間在線
alter tablespace uu online
--方法二,不能脫機的表空間
--1、關(guān)閉數(shù)據(jù)庫,再啟動到mount狀態(tài)
startup mount
--2、在操作系統(tǒng)下,移動或重命名文件
host mv /opt/oracle/oradata/orcl/tt.dbf /disk9/uu1.dbf
--3、修改控制文件
alter database rename file '/disk8/uu.dbf' to '/disk8/uu2.dbf';
--4、打開數(shù)據(jù)庫
alter database open;
/*
刪除表空間:
意味著表空間和數(shù)據(jù)文件的信息從數(shù)據(jù)庫中刪除,同時也應(yīng)該將相應(yīng)的操作系統(tǒng)文件刪除
不能刪除的表空間
系統(tǒng)表空間
有活動回滾段的表空間
默認(rèn)臨時/永久表空間
命令: */
DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND DATAFILES]]
INCLUDING CONTENTS -- 刪除表空間及所有段
INCLUDING CONTENTS [AND DATAFILES] --刪除表空間、所有段、數(shù)據(jù)文件、同時刪除系統(tǒng)中的物理文件
--限制某個用戶對表空間的使用:
ALTER USER user_name QUOTA n ON tablespace_name;
ALTER USER scott QUOTA 10m on UU;
--取消限制
ALTER USER user_name QUOTA UNLIMITED ON tablespace_name;
GRANT UNLIMITED TABLESPACE TO user_name;
--單個數(shù)據(jù)文件離線:
--1、查看有哪些數(shù)據(jù)文件
SELECT name FROM v$datafile;
--2、離線
ALTER DATABASE DATAFILE '...' OFFLINE;
--3、在線
ALTER DATABASE DATAFILE '... ' ONLINE
-- 有可能提示要進行介質(zhì)恢復(fù):
RECOVER DATAFILE '...' ;
ALTER DATABASE RECOVER TABLESPACE tablespace_name;
-- 之后再將文件再線
--重命名數(shù)據(jù)文件(同前面移動數(shù)據(jù)文件一樣)
--獲取表空間和數(shù)據(jù)文件信息
--表空間信息
dba_tablespaces
v$tablespace
--數(shù)據(jù)文件信息
dba_data_files
v$datafile
--臨時數(shù)據(jù)文件信息
dba_temp_files
v$tempfile
--查看系統(tǒng)默認(rèn)的表空間及臨時表空間:
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties
2 where PROPERTY_NAME like 'DEFAULT%';
--修改改系統(tǒng)的默認(rèn)表空間:
SQL>ALTER DATABASE DEFAULT TABLESPACE tablespace_name
--修改系統(tǒng)的默認(rèn)臨時表空間:
SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name
--查看用戶默認(rèn)表空間:
SQL>select USERNAME,USER_ID,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users;
--修改用戶默認(rèn)表空間:
SQL>ALTER USER user_name DEFAULT TABLESPACE tablespace_name
--查看表空間的使用情況:
dba_data_files;
dba_free_space;
--例:查每個表空間的剩余空間
SQL> select tablespace_name,sum(bytes/1024/1024)
2 from dba_free_space group by tablespace_name;
/*
五、數(shù)據(jù)文件
數(shù)據(jù)文件是數(shù)據(jù)庫中最重要的一個要求,是所有的數(shù)據(jù)庫內(nèi)容存放的地方
datafile是按照表空間為組織單位,表空間的構(gòu)成是按照段區(qū)塊為層次---數(shù)據(jù)文件的邏輯結(jié)構(gòu)
datafile就是表空間的物理文件。
datafile中的內(nèi)容是通過dbwr把data buffer cache中的dirty buffer data 寫入的
dbwr觸發(fā):
ckpt觸發(fā),dirty buffer 到一定量的時候,data buffer caceh 的內(nèi)存空間快用完了
查詢空閑內(nèi)存空間超時,表空間offline/read only,表的drop, truncate 開始執(zhí)備份表空間的時候 */
--查看數(shù)據(jù)文件
SQL> select file# ,name,status,enabled,bytes/1024/1024 M from v$datafile;
FILE# NAME STATUS ENABLED M
---------- -------------------------------------------------- ------- ---------- ----------
1 /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM READ WRITE 490
2 /u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE READ WRITE 30
3 /u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE READ WRITE 250
4 /u01/app/oracle/oradata/orcl/users01.dbf ONLINE READ WRITE 5
5 /u01/app/oracle/oradata/orcl/example01.dbf ONLINE READ WRITE 100
6 /u01/app/oracle/oradata/orcl/tbs1_1.dbf ONLINE READ WRITE 100
7 /u01/app/oracle/oradata/orcl/tbs1_2.dbf ONLINE READ WRITE 60
SQL> select tablespace_name,file_name,user_bytes/1024/1024 M from dba_data_files;
TABLESPACE_NAME FILE_NAME M
------------------------------ ------------------------------------------------------- ----------
USERS01 /u01/app/oracle/oradata/orcl/users01.dbf 4.9375
SYSAUX /u01/app/oracle/oradata/orcl/sysaux01.dbf 249.9375
UNDOTBS1 /u01/app/oracle/oradata/orcl/undotbs01.dbf 29.9375
SYSTEM /u01/app/oracle/oradata/orcl/system01.dbf 489.9375
EXAMPLE /u01/app/oracle/oradata/orcl/example01.dbf 99.9375
TBS1 /u01/app/oracle/oradata/orcl/tbs1_1.dbf 99.9375
TBS1 /u01/app/oracle/oradata/orcl/tbs1_2.dbf 59.9375
--數(shù)據(jù)文件的增加與刪除
--為TBS1增加一個數(shù)據(jù)文件
SQL> alter tablespace tbs1 add datafile '/u01/app/oracle/oradata/orcl/tbs1_3.dbf' size 10m autoextend on;
--還有一種創(chuàng)建表空間時不指定大小,而是重用一個存在的dbf要用resue參數(shù),reuse 是把原有的結(jié)構(gòu)拿來用,里面的數(shù)據(jù)是用不了的,因為早都沒有了。
--刪表空間中的數(shù)據(jù)文件,g以后的版本才用以下功能,在之前版本的就只能把表空間給干掉。
SQL> alter tablespace tbs1 drop datafile '/u01/app/oracle/oradata/orcl/tbs1_3.dbf';
--有數(shù)據(jù)的數(shù)據(jù)文件不能刪。第一個不能刪,如果要刪就把表空間干掉,數(shù)據(jù)文件中有數(shù)據(jù)寫入的文件也不能刪除,如下
SQL> alter tablespace tbs1 drop datafile 7; --7是v$datafile中的file#.
alter tablespace tbs1 drop datafile 7
*
ERROR at line 1:
ORA-03262: the file is non-empty
/*
數(shù)據(jù)文件的日志記錄
只有temp表空間是nologing 別的都是logging的
日志記錄的幾種模式
nologin 并不是不記錄日志而是記錄的很少
logging 正常記錄日志信息
force logging 記錄的日志比logging還詳細(xì) 記錄信息非常多 用于DG data guard 容災(zāi)的情況 */
SQL> select tablespace_name ,logging,force_logging from dba_tablespaces;
TABLESPACE_NAME LOGGING FOR
------------------------------ --------- ---
SYSTEM LOGGING NO
UNDOTBS1 LOGGING NO
SYSAUX LOGGING NO
TEMP NOLOGGING NO
USERS01 LOGGING NO
EXAMPLE NOLOGGING NO
TBS1 LOGGING NO
--修改表空間中日志文件記錄的方式
SQL> alter tablespace tablespace_name nologging | logging | force logging;
SQL> alter tablespace example logging;
Tablespace altered.
SQL> alter tablespace tbs1 force logging;
Tablespace altered.
SQL> select tablespace_name ,logging,force_logging from dba_tablespaces;
TABLESPACE_NAME LOGGING FOR
------------------------------ --------- ---
SYSTEM LOGGING NO
UNDOTBS1 LOGGING NO
SYSAUX LOGGING NO
TEMP NOLOGGING NO
USERS01 LOGGING NO
EXAMPLE LOGGING NO
TBS1 LOGGING YES