您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么掌握Oracle數據文件和臨時文件的管理”,在日常操作中,相信很多人在怎么掌握Oracle數據文件和臨時文件的管理問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么掌握Oracle數據文件和臨時文件的管理”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一、數據文件概述
在Oracle數據庫中,SYSTEM和SYSAUX表空間至少需要包含一個數據文件,此外還將包含多個其他表空間及與其相關的數據文件和臨時文件。Oracle的數據文件和臨時文件是操作系統文件,屬于數據庫物理結構范疇,用于存儲數據庫中的邏輯結構的數據。在創建表空間時,必須明確的為每個表空間指定數據文件。
Oracle通過兩種方式為文件分配編號:絕對文件號,用于唯一標識數據庫中的數據文件,絕對文件號可以通過v$datafile或v$tempfile視圖的FILE#列查詢,也可以通過DBA_DATA_FILES或DBA_TEMP_FILES視圖的FILE_ID列查詢;相對文件號,用于唯一標識表空間內的數據文件。大多數情況下,絕對文件編號和相對文件編號都是相等的,但當數據庫中的數據文件數量超出了一個閾值(比如1023),那么他們就不再相等了。大文件表空間數據文件的相對文件號總為1024。
查詢數據文件的絕對文件號和相對文件號:
select t.name tablespace_name,d.file#,d.rfile#,d.name file_name from v$tablespace t,v$datafile d where t.ts#=d.ts#;
TABLESPACE_NAME FILE# RFILE# FILE_NAME
-------------------- ---------- ---------- --------------------------------------------------
SYSTEM 1 1 /u01/app/oracle/oradata/stdb/system01.dbf
UNDOTBS1 2 2 /u01/app/oracle/oradata/stdb/undotbs01.dbf
SYSAUX 3 3 /u01/app/oracle/oradata/stdb/sysaux01.dbf
USERS 4 4 /u01/app/oracle/oradata/stdb/users01.dbf
USERS 8 8 /u01/app/oracle/oradata/stdb/user02.dbf
EXAMPLE 5 5 /u01/app/oracle/oradata/stdb/example01.dbf
TEST 7 7 /u01/app/oracle/oradata/stdb/test02.dbf
TEST 6 6 /u01/app/oracle/oradata/stdb/test01.dbf
BIGTBS 9 1024 /u01/app/oracle/oradata/stdb/bigfile01.dbf
9 rows selected.
數據庫所能夠創建的數據文件數量受CREATE DATABASE ... MAXDATAFILES語句和DB_FILES參數的影響。另外,還應注意操作系統在創建文件數量方面的強制限制。在實例啟動過程中,Oracle將根據初始化參數DB_FILES分配SGA中用于保存數據文件信息的空間,實例可以根據這個參數值來決定所能創建的最大文件的數量。該參數可以修改,但必須重啟數據庫方可生效,該參數在實例的整個生命周期中有效。
表空間中包含的數據文件的數據量的多少,最終會影響到數據庫的性能。Oracle允許的在線文件數量超過了操作系統的默認限制,DBWn進程能夠打開所有的在線數據文件,并有能力緩存所有處理中的文件,當打開文件數據量達到操作系統的默認限制時,Oracle將自動關閉文件。這可能會對性能產生負面的影響,建議調整操作系統的默認限制值,使其大于數據庫的在線文件數量。
二、為表空間創建和添加文件
為表空間創建和添加數據文件的方法在之前已經學習過了,這里僅簡要回顧一下。
1、在創建表空間的同時創建數據文件
create tablespae ... datafile '/xxx/xxxx/xxxx ...' size xx
create temporary tablespace datafile '/xxx/xxxx/xxxx ...' size xx
2、為已存在的表空間添加數據文件
alter tablespace ... add datafile '/xxx/xxxx/xxxx ... ' size xx
alter tablespace ... add tempfile '/xxx/xxxx/xxxx ... ' size xx
三、修改數據文件大小
使用自動擴展子句為表空間添加數據文件:
SQL> create tablespace test_tbs
2 datafile '/u01/app/oracle/oradata/stdb/test03.dbf' size 10m
3 autoextend on
4 next 1m
5 maxsize 100m;
Tablespace created.
打開數據文件自動擴展:
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test02.dbf'
2 autoextend on
3 next 1m
4 maxsize 100m;
Database altered.
關閉數據文件自動擴展:
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test02.dbf'
2 autoextend off;
Database altered.
手動RESIZE數據文件大小:
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' resize 20m;
Database altered.
四、修改數據文件可用性
可以通過執行數據文件的在線和離線操作修改數據文件的可用性,離線的數據文件不能被數據庫所訪問,直到它恢復在線狀態之前。只讀表空間中的數據文件也可以被離線或在線,只讀表空間內的數據文件的在線或離線不影響表空間自身的狀態,不管怎么樣,在表空間未處于讀寫狀態之前,這些文件都是不可寫的。
1、歸檔模式下的數據文件離線
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' offline;
Database altered.
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' online;
alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' online
*
ERROR at line 1:
ORA-01113: file 10 needs media recovery //test03.dbf文件離線時不觸發檢查點操作,所以該文件恢復在線時提示需要介質恢復
ORA-01110: data file 10: '/u01/app/oracle/oradata/stdb/test03.dbf'
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u02/arch_1
Oldest online log sequence 5
Next log sequence to archive 7
Current log sequence 7
SQL> recover datafile 10;
Media recovery complete.
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test03.dbf' online;
Database altered.
2、非歸檔模式下的數據文件離線
在非歸檔模式下使用alter database ... offline for drop語句離線數據文件。offline關鍵字標記該數據文件離線,不論其是否損壞,所以可以打開數據庫;for drop關鍵字標記該數據文件隨后被刪除,該數據文件不能再次恢復到在線狀態。(實際上,在在線日志組還未發生切換之前,還是可以恢復到在線狀態的)
SQL> alter database datafile 'D:\app\Manganese\oradata\orcl\test01.dbf' offline for drop;
數據庫已更改。
SQL> alter system switch logfile;
系統已更改。
SQL> alter system switch logfile;
系統已更改。
SQL> alter system switch logfile;
系統已更改。
SQL> alter database datafile 'D:\app\Manganese\oradata\orcl\test01.dbf' online;
alter database datafile 'D:\app\Manganese\oradata\orcl\test01.dbf' online
*
第 1 行出現錯誤:
ORA-01113: 文件 7 需要介質恢復
ORA-01110: 數據文件 7: 'D:\APP\MANGANESE\ORADATA\ORCL\TEST01.DBF'
SQL> recover datafile 7;
ORA-00279: 更改 1108304 (在 03/19/2014 15:44:41 生成) 對于線程 1 是必需的
ORA-00289: 建議:
D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC
ORA-00280: 更改 1108304 (用于線程 1) 在序列 #9 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 無法打開歸檔日志
'D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。
ORA-00308: 無法打開歸檔日志
'D:\APP\MANGANESE\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_03_19\O1_MF_1_9_%U_.ARC'
ORA-27041: 無法打開文件
OSD-04002: 無法打開文件
O/S-Error: (OS 2) 系統找不到指定的文件。
3、修改表空間內所有數據文件和臨時文件的可用性
alter tablespace ... datafile { online | offline }
alter tablespace ... tempfile { online | offline }
五、重命名(修改存儲位置)數據文件
1、將包含數據文件的表空間離線。
2、使用操作系統命令修改數據文件名。
3、使用alter database ... rename datafile ...語句改變數據庫中的數據文件名。
4、備份數據庫。
示例一:重命名同一表空間內的數據文件
SQL> alter tablespace test_tbs offline normal;
Tablespace altered.
[oracle@stdb stdb]$ mv test03.dbf test04.dbf
SQL> alter tablespace test_tbs
2 rename datafile '/u01/app/oracle/oradata/stdb/test03.dbf'
3 to '/u01/app/oracle/oradata/stdb/test04.dbf';
Tablespace altered.
SQL> alter tablespace test_tbs online;
Tablespace altered.
示例二:重命名不同表空間中的數據文件
SQL> select status from v$instance;
STATUS
------------
MOUNTED //該操作必須在mount下進行
SQL> alter database
2 rename file '/u01/app/oracle/oradata/stdb/test01.dbf',
3 '/u01/app/oracle/oradata/stdb/test02.dbf',
4 '/u01/app/oracle/oradata/stdb/test04.dbf'
5 to
6 '/u01/app/oracle/oradata/stdb/test1.dbf',
7 '/u01/app/oracle/oradata/stdb/test2.dbf',
8 '/u01/app/oracle/oradata/stdb/test3.dbf';
Database altered.
SQL> alter database open;
Database altered.
六、刪除數據文件
從表空間內刪除數據文件:
alter tablespace ... drop datafile ... ;
alter tablespace ... drop tempfile ... ;
從數據庫中刪除數據文件:
alter database tempfile '/xxx/xxxx/....' drop including datafiles;
SQL> alter database tempfile '/u01/app/oracle/oradata/stdb/temp03.dbf' drop including datafiles;
Database altered.
SQL> alter database datafile '/u01/app/oracle/oradata/stdb/test1.dbf' drop including datafiles; //注意:數據文件不能以這樣的方式刪除
alter database datafile '/u01/app/oracle/oradata/stdb/test1.dbf' drop including datafiles
*
ERROR at line 1:
ORA-01916: keyword ONLINE, OFFLINE, RESIZE, AUTOEXTEND or END/DROP expected
注意:
1、從字典管理遷移到本地管理的只讀表空間內的數據文件時不能被刪除的。除此之外,其他的只讀表空間內的數據文件可以刪除。
2、系統表空間內的數據文件無法被刪除。
3、如果一個本地管理的表空間被離線,則其內的數據文件無法被刪除。
SQL> alter tablespace test_tbs drop datafile '/u01/app/oracle/oradata/stdb/test4.dbf';
alter tablespace test_tbs drop datafile '/u01/app/oracle/oradata/stdb/test4.dbf'
*
ERROR at line 1:
ORA-03264: cannot drop offline datafile of locally managed tablespace
4、如果表空間內僅包含一個數據文件,該數據文件無法被刪除。
SQL> alter tablespace test_tbs drop datafile '/u01/app/oracle/oradata/stdb/test3.dbf';
alter tablespace test_tbs drop datafile '/u01/app/oracle/oradata/stdb/test3.dbf'
*
ERROR at line 1:
ORA-03261: the tablespace TEST_TBS has only one file
5、如果數據文件不為空,該數據文件無法被刪除。
6、刪除數據文件必須保證數據塊處于打開狀態。
到此,關于“怎么掌握Oracle數據文件和臨時文件的管理”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。