您好,登錄后才能下訂單哦!
Oracle數據庫的存儲設置可以分為三級:在全局范圍內設置;在表空間層面設置;在segment層面設置。
隨著數據的增長,有的表空間可能已經快用完了;有的表空間則可能長期閑置,這就需要對表空間的大小進行調整,,其方式主要有以下幾種:
1. 設置為自動增長; 2. 使用ALTER命令手動調整;3. 通過增加Datafile來擴充表空間; 4. 直接增加表空間
ALTERR TABLESPACE的方式是針對datadictionary里的修改,不值得推薦,如有興趣可以查閱聯機文檔中的相關內容。
一、自動增長,使用AUTOEXTEND
只能自動增大,可以在創建表空間或創建數據庫時設定,凡是有DATAFILE的語句,都可以設定NEXT和MAXSIZE值。
表DBA_DATA_FILES中存儲了tablespace的體積
DBA_FREE_SPACE存儲了已經用掉的tablespace的體積
/*演示設定表空間自動增長*/
============查詢剩余表空間============
[oracle@localhostnotes]$ vim tablespace_usage.sql
SELECT a.tablespace_name, a.bytes bytes_used, b.largest, round(((a.bytes- b.bytes)/a.bytes)*100,2) percent_used FROM (SELECT tablespace_name, sum(bytes) bytes FROM dba_data_files GROUP BYtablespace_name) a, (SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest FROMdba_free_space GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC; -- 數據庫中并沒有直接提供剩余表空間大小的表和相關數值, -- 所以可以通過網絡搜索一些剩余表空間的query語句
SQL> @notes/tablespace_usage.sql
TABLESPACE_NAME BYTES_USED LARGEST PERCENT_USED ------------------------------ ---------- ---------- ------------ SYSTEM 723517440 3145728 99.52 SYSAUX 671088640 34603008 94.73 USERS 5242880 458752 88.75 EXAMPLE 104857600 19726336 78.44 UNDOTBS1 57671680 29360128 32.27 WILEY 20971520 19660800 5.63 -- 可以看到wiley這個表空間還有比較多的剩余空間 -- 而SYSTEM 和SYSAUX等表空間已經快用完了,因此需要對其進行擴容 6 rows selected.
=====為wiley表空間擴容======
SQL> alter tablespace wiley add datafile
2 '/oracle/oradata/orcl/wiley2.dbf' size 20M
3 autoextend on next 10M maxsize100M;
Tablespace altered.
=======再次查看剩余表空間=====
SQL> @notes/tablespace_usage.sql
TABLESPACE_NAME BYTES_USED LARGEST PERCENT_USED ------------------------------ ---------- ---------------------- SYSTEM 723517440 3145728 99.52 SYSAUX 671088640 34603008 94.73 USERS 5242880 458752 88.75 EXAMPLE 104857600 19726336 78.44 UNDOTBS1 57671680 29360128 32.27 WILEY 41943040 19922944 5.31 -- 可以看得表空間wiley的體積增加了20M 6 rows selected.
======查看表空間的autoextend屬性是否為enable的=====
SQL> desc dba_data_files;
Name Null? Type ------------------------------------------------- -------------------- FILE_NAME VARCHAR2(513) FILE_ID NUMBER TABLESPACE_NAME VARCHAR2(30) BYTES NUMBER BLOCKS NUMBER STATUS VARCHAR2(9) RELATIVE_FNO NUMBER AUTOEXTENSIBLE VARCHAR2(3) -- 表明是否可以增長 MAXBYTES NUMBER MAXBLOCKS NUMBER INCREMENT_BY NUMBER USER_BYTES NUMBER USER_BLOCKS NUMBER ONLINE_STATUS VARCHAR2(7)
SQL>col FILE_NAME format a40
SQL>col TABLESPACE_NAME format a20
SQL>select file_name, tablespace_name, autoextensible from dba_data_files;
FILE_NAME TABLESPACE_NAME AUT ---------------------------------------- -------------------- --- /oracle/oradata/orcl/users01.dbf USERS YES /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 YES /oracle/oradata/orcl/sysaux01.dbf SYSAUX YES /oracle/oradata/orcl/system01.dbf SYSTEM YES /oracle/oradata/orcl/example01.dbf EXAMPLE YES /oracle/oradata/orcl/mickey01.dbf MICKEY NO /oracle/oradata/orcl/wiley.dbf WILEY NO -- 表空間wiley的第一個data file wiley不能自動增長的 /oracle/oradata/orcl/wiley2.dbf WILEY YES -- 表空間wiley的第二個data file wiley2 可以自動增長 8 rows selected.
======將原有設為不自動增長的datafile設為自動增長=======
SQL> alter database datafile
2 '/oracle/oradata/orcl/wiley.dbf'
3 autoextend on next 10M maxsize100M;
Database altered.
SQL> select file_name, tablespace_name,autoextensible from dba_data_files;
FILE_NAME TABLESPACE_NAME AUT ------------------------------------------------------------ --- /oracle/oradata/orcl/users01.dbf USERS YES /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 YES /oracle/oradata/orcl/sysaux01.dbf SYSAUX YES /oracle/oradata/orcl/system01.dbf SYSTEM YES /oracle/oradata/orcl/example01.dbf EXAMPLE YES /oracle/oradata/orcl/mickey01.dbf MICKEY NO /oracle/oradata/orcl/wiley.dbf WILEY YES -- 已經更改為自動增長了。 /oracle/oradata/orcl/wiley2.dbf WILEY YES 8 rows selected.
二、使用ALTER 命令來手動調整;
如果一個數據文件原來使用了100M,現在將其resize到200M,是可行的;但如果一個數據文件原來已經使用了300M,再將其resize到200M,則會失敗。
/*演示使用ALTER命令手動調整表空間*/
=======查詢現有表空間信息=======
SQL> select file_name, tablespace_name,bytes from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES ------------------------------------------------------------ ---------- /oracle/oradata/orcl/users01.dbf USERS 5242880 /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 57671680 /oracle/oradata/orcl/sysaux01.dbf SYSAUX 587202560 /oracle/oradata/orcl/system01.dbf SYSTEM 713031680 /oracle/oradata/orcl/example01.dbf EXAMPLE 104857600 /oracle/oradata/orcl/mickey01.dbf MICKEY 20971520 /oracle/oradata/orcl/wiley.dbf WILEY 20971520 /oracle/oradata/orcl/wiley2.dbf WILEY 20971520 8 rows selected.
注意,臨時表空間的數據文件信息儲存在dba_temp_files這個表中。
======調整表空間wiley的數據文件wiley2為10M======
SQL> alter database datafile
2 '/oracle/oradata/orcl/wiley2.dbf'
3 resize 10M;
Database altered.
SQL> select file_name, tablespace_name,bytes from dba_data_files;
FILE_NAME TABLESPACE_NAME BYTES ------------------------------------------------------------ ---------- /oracle/oradata/orcl/users01.dbf USERS 5242880 /oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 57671680 /oracle/oradata/orcl/sysaux01.dbf SYSAUX 671088640 /oracle/oradata/orcl/system01.dbf SYSTEM 723517440 /oracle/oradata/orcl/example01.dbf EXAMPLE 104857600 /oracle/oradata/orcl/wiley.dbf WILEY 20971520 /oracle/oradata/orcl/wiley2.dbf WILEY 10485760 -- 數據文件wiley2的大小已經調整為10M了 7 rows selected.
注意,將data file的體積調小在很多情況下會失敗。
SQL> alter database datafile
2 '/oracle/oradata/orcl/example01.dbf'
3 resize 10M;
alter database datafile * ERROR at line 1: ORA-03297: file contains used data beyond requested RESIZEvalue -- 提示調整的體積小于現有文件大小。
三、通過增加數據文件的方式來擴充表空間。
通常情況下10個10G的data file組成的磁盤比起一個100G的data file性能更優,因為100G的磁盤不能實現并發。
增加data file使用的是ALTER TABLESPACE,而不是ALTER DATABASE,建議在實際操作之前,先查詢聯機文檔。
四、直接增加一個新的表空間。
在調整表空間的體積之前,可以先查詢一下表空間的大小。表空間實際上是數據庫內部的邏輯概念,操作系統無法通過具體的命令來查看其體,但可以通過查詢數據字典來統計其使用的百分比。
在聯機文檔REFERENCE中查詢數據字典的相關章節,可以獲取表空間的信息。
直接創建表空間的方法前文中已經介紹過了,此處不加贅述。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。