Oracle——01表空間和區

zhyp29發表於2016-05-23
Oracle表空間tablespace區分割槽 
 
1、表空間:表空間是資料庫的邏輯劃分,一個表空間只屬於一個資料庫。每個表空間由一個或多個資料檔案組成。

表空間屬性:
一個資料庫可以包含多個表空間,一個表空間只能屬於一個資料庫
一個表空間包含多個資料檔案,一個資料檔案只能屬於一個表空間

表這空間可以劃分成更細的邏輯儲存單元從邏輯的角度來看,一個資料庫(database)下面可以分多個表空間(tablespace);一個表空間下面又可以分多個段(segment);一個資料表要佔一個段(segment),一個索引也要佔一個段(segment )。 一個段(segment)由多個 區間(extent)組成,那麼一個區間又由一組連續的資料塊(data block)組成。這連續的資料塊是在邏輯上是連續的,有可能在物理磁碟上是分散。

  那麼從物理的角度上看,一個表空間由多個資料檔案組成,資料檔案是實實在在存在的磁碟上的檔案。這些檔案是由oracle資料庫作業系統的block 組成的。

 
Segment(段) :段是指佔用資料檔案空間的通稱,或資料庫物件使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和快取記憶體段等。

 
Extent (區間):分配給物件(如表)的任何連續塊叫區間;區間也叫擴充套件,因為當它用完已經分配的區間後,再有新的記錄插入就必須在分配新的區間(即擴充套件一些塊);一旦區間分配給某個物件(表、索引及簇),則該區間就不能再分配給其它的物件.

檢視錶空間:
SQL> select * from v$tablespace;


表空間的狀態屬性主要有線上(online),離線(offline),只讀(read only)和讀寫(read write)這四種,其中只讀與讀寫狀態屬於線上狀態的特殊情況,通過設定表空間的狀態屬性,我們可以對錶空間的使用進行管理。
線上
當表空間的狀態為online時,才允許訪問該表空間中的資料。
如果表空間不是online狀態的,可以使用alter tablespace語句將其狀態修改為online,語句如下
alter tablespace tablespace_name online;

離線
當表空間的狀態為offline時,不允許訪問該表空間中的資料。例如向表空間中建立表或者讀取表空間的表燈資料操作都將無法進行,這時可以對錶空間進行離線備份,也可以對應用程式進行升級和維護等。
如果表空間不是offline狀態的,可以使用alter tablespace語句將其狀態修改為offline,其語句如下:
alter tablespace tablespace_name offline parameter;
其中,parameter表示將表空間切換為offline狀態時可以使用的引數。主要可以應用如下的幾個引數。
normal
temporary
immediate
for recover

只讀
當表空間的狀態為read only時,雖然可以訪問表空間的資料,但範文僅僅僅限於閱讀,而不能進行任何的更新和刪除操作,目的是為了保證表空間的資料安全。
如果表空間不是read only狀態的,可以使用ater tablespace語句將其狀態修改為read only,其語句的形式如下:
alter tablespace tablespace_name read only;
不過,將表空間的狀態修改為read only之前,需要注意如下的事項:
1.表空間必須處於online狀態
2.表空間不能包含任何事務的回退段
3.表空間不能正處於線上的資料庫備份期間
讀寫
當表空間的狀態為read write時,可以對錶空間進行正常訪問,包括對錶空間中的資料進行查詢,更新和操作。
如果表空間不是read write狀態的,可以使用alter tablespace語句將其狀態修改為read write,語句形式如下:
alter tablespace tablespace_name read write;
修改表空間的狀態為read write,也需要保證表空間處於online狀態。
//檢視錶空間的狀態 SQL> select tablespace_name,status from dba_tablespaces;

//修改表空間的狀態 SQL> alter tablespace myspace offline

SQL> select tablespace_name,status from dba_tablespaces;


檢視每個表空間有哪些資料檔案:
SQL> desc dba_data_files;


檢視詳細資料檔案:
SQL> select file_name,tablespace_name from dba_data_files;


1.使表空間離線 
 
ALTER TABLESPACE game OFFLINE; 
 
如果是意外刪除了資料檔案,則必須帶有RECOVER選項 
 
ALTER TABLESPACE game OFFLINE FOR RECOVER; 
 
2.使表空間聯機 
 
ALTER TABLESPACE game ONLINE; 
3.使資料檔案離線 
 
ALTER DATABASE DATAFILE 3 OFFLINE; 
 
4.使資料檔案聯機 
 
ALTER DATABASE DATAFILE 3 ONLINE; 
5.使表空間只讀 
 
ALTER TABLESPACE game READ ONLY; 
6.使表空間可讀寫 
 
ALTER TABLESPACE game READ WRITE; 
 
五、刪除表空間 
 
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 
六、擴充套件表空間 
 
首先檢視錶空間的名字和所屬檔案 
 
select tablespace_name, file_id, file_name, 
 
round(bytes/(1024*1024),0) total_space 
 
from dba_data_files 
order by tablespace_name; 
 
1.增加資料檔案 
 
ALTER TABLESPACE game 
 
ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M; 
 
2.手動增加資料檔案尺寸 
 
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
 
RESIZE 4000M; 
 
3.設定資料檔案自動擴充套件 
 
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf 
 
AUTOEXTEND ON NEXT 100M 
 
MAXSIZE 10000M; 
 
設定後檢視錶空間資訊 
 
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, 
 
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
 
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C 
 
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE 

表空間中其他邏輯結構的資料儲存在這些資料檔案中。在Oracle安裝完成後,會自動建立多個表空間,
主要有:
(1)System表空間:該表空間用於存放Oracle系統內部表和資料字典的資料,如表名、列名、使用者名稱等。
(2)undo表空間:該表空間是儲存撤銷資訊的表空間。當使用者對資料庫表進行修改(insert,update,delete)時,
Oracle會自動使用undo表空間來臨時存放修改前的資料。當所進行的修改完成並提交後,系統根據需要保留修改前資料的時間長短來釋放undo表空間的部分空間。
(3)users表空間:該空間是給使用者使用的表空間。
(4)temporary表空間:該表空間是供使用者臨時使用的,如進行排序、彙總等操作時。
 
可以使用OEM(Oracle Enterprise Manager)管理表空間,也可以使用命令管理表空間。利用OEM管理表空間是非常簡單的,只需要根據系統提示進行操作就可以了。利用create tablespace 命令會建立一個讀/寫表空間,以後可以利用alter tablespace 語句來使表空間離線或聯機、給它新增資料檔案或使它成為只讀表空間。也可以利用drop tablespace 語句從資料庫中撤銷表空間。

2、例項

每一個執行中的資料庫都對應著一個Oracle例項。當伺服器上的Oracle資料庫啟動時,Oracle首先會在記憶體中分配一片區域-稱之為System Global Area(SGA),然後啟動一個或多個的Oracle程式。

SGA和這些程式合起來就稱為一個Oracle的例項。例項中的記憶體和程式管理器用來高效地訪問資料庫的資料,同時為單個或多個的使用者提供服務。

一個資料庫可以由多個例項開啟,但任何時刻一個例項只能開啟一個資料庫。多個例項可以同時執行在同一個機器上,它們彼此訪問各自獨立的物理資料庫。

(1)利用create tablespace命令建立表空間。使用該命令的使用者必須具有建立表空間的許可權。
語法格式:
 
Sql程式碼
create tablespace tablespace_name datafile 'path/fileName' [size integer [K | M]] [reuse]  
[autoextend [off | on [next integer [K | M]]] [maxsize [unlimited | integer [K | M]]]]  
[minmum extent integer [K | M]]  
[default storage storage_clause]  
[online | offline]  
[logging | nologging]  
[extent management [dictionary | local [autoallocate | uniform [size integer [K | M]]]]]  
 
其中,tablespace_name是將要建立的表空間的名稱,該名稱在資料庫中是唯一的,並且命名必須符合命名規則。
path/fileName: 資料檔案的存放路徑和名稱。當使用關鍵字reuse時表示若該檔案存在,則清除該檔案再重新建立該檔案;如該檔案不存在,則建立新檔案。
off/on: 禁止或允許自動擴充套件資料檔案。若選則off, 則禁止自動擴充套件;若選擇on,則允許自動擴充套件資料檔案
next:表示當需要更多的磁碟空間時,一次給資料檔案分配的磁碟空間,以KB或MB為單位。
maxsize umlimited | integer[K | M]:指定允許分配給資料檔案的最大磁碟空間,其中unlimited表示沒有限制。
minmum extent:指定最小的長度,預設為作業系統和資料庫塊。
online:在建立表空間後使該表空間立即可以被授權使用者訪問,這是預設設定。
offline:則表示不可用
logging/nologging:表示將來的表、索引等是否需要進行日誌處理,預設為需要
extent management:指定如何管理表空間的盤區。
dictionary:使用字典表來管理表空間,這是預設設定。
local:指定本地管理表空間
autoallocate:指定表空間由系統管理,使用者不能指定盤區尺寸。
uniform:使用size位元組的統一盤區來管理表空間。預設的size是1MB。
注意:如果指定了local,就不能指定default storage storage_clause 和temporary。
default storage storage_clause:為在該表空間建立的全部物件指定預設的儲存引數。storage_clause的語法格式如下:
 
Sql程式碼
storage(  
    initial integer[K|M]  
    next integer[K|M]  
    minextents integer | unlimited  
    maxextents integer  
    pctincrease integer  
    freelists integer  
    freelist groups integer  
    optimal [integer[K|M] | null]  
)  
如:
 
Sql程式碼
create tablespace ts_app datafile 'D:\Oracle\oradata\orcl\ts_app.dbf' size 1024M autoextend on next 50M maxsize 2048M;  
--將建立一個名為“ts_app”的表空間,初始大小為1024M,允許自動擴充,每次擴充50M,最多擴充到2048M。  
 
建立臨時表空間時只需要在tablespace前加上temporary,並且將datafile改為tempfile,如:
Sql程式碼
create temporary tablespace ts_temp tempfile 'D:\Oracle\oradata\orcl\ts_temp.dbf' size 256M autoextend on next 100M maxsize 2048M;  
 
 (2)利用alter tablespace命令管理表空間。
語法格式:
 
Sql程式碼
alter tablespace tablespace_name  
[add dataFile | tempFile 'path/fileName' [size integer [K | M]]  
    [reuse]  
    [autoextend [off | on [next integer [K | M]] maxsize [unlimited | integer [K | M]]]]  
[rename dataFile 'path/fileName',...n to 'path/fileName',...n]  
[default storage storage_clause]  
[online | offline [normal | temporary | immediate]]  
[logging | nologging]  
[read only | write]  
[permanent]  
[temporary]  
 
 
 
 
2、分割槽:在非常大的資料庫中,通常可以通過把一個大表的資料分成多個小表來簡化資料庫的管理,這些小表叫做分割槽,除了對錶分割槽外,還可以對索引進行分割槽。分割槽不僅簡化了資料庫的管理,還改善了應用效能。在Oracle中,還可以細分分割槽,建立子分割槽。
並不是所有的表列都可以進行分割槽,只有日期型(date)或二進位制大物件(blob)等資料型別的表列可以分割槽。
Oracle有以下幾種分割槽方法:
(1)範圍分割槽:根據列值的範圍將行對映到分割槽。
(2)雜湊分割槽:雜湊分割槽提供了一種方法,可在指定數量的分割槽間平均分佈資料。這種方法將根據分割槽關鍵字的雜湊值將行對映到分割槽。
(3)列表分割槽:列表分割槽可以顯式地控制如何把行對映到分割槽。
(4)範圍-雜湊分割槽:首先使用範圍方法將資料進行分割槽,然後在每個分割槽內,使用雜湊方法將其分成子分割槽。
(5)範圍-列表分割槽:首先使用範圍方法將資料進行分割槽,然後在每個分割槽內,使用列表方法將其分成子分割槽


Oracle建立表空間和使用者                 
 
建立表空間和使用者的步驟:
使用者
建立:create user 使用者名稱 identified by "密碼";
授權:grant create session to 使用者名稱;
grant create table to 使用者名稱;
grant create tablespace to 使用者名稱;
grant create view to 使用者名稱;

表空間
建立表空間(一般建N個存資料的表空間和一個索引空間):
create tablespace 表空間名
datafile ' 路徑(要先建好路徑)\***.dbf ' size *M
tempfile ' 路徑\***.dbf ' size *M
autoextend on --自動增長
--還有一些定義大小的命令,看需要
default storage(
initial 100K,
next 100k,
);

例子:建立表空間
create tablespace DEMOSPACE
datafile 'E:/oracle_tablespaces/DEMOSPACE_TBSPACE.dbf'
size 1500M
autoextend on next 5M maxsize 3000M;

刪除表空間
drop tablespace DEMOSPACE including contents and datafiles

使用者許可權
授予使用者使用表空間的許可權:
alter user 使用者名稱 quota unlimited on 表空間;
或 alter user 使用者名稱 quota *M on 表空間;

完整例子:
--表空間
CREATE TABLESPACE sdt
DATAFILE 'F:\tablespace\demo' size 800M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

--索引表空間
CREATE TABLESPACE sdt_Index
DATAFILE 'F:\tablespace\demo' size 512M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

--2.建使用者
create user demo identified by demo
default tablespace demo;

--3.賦權
grant connect,resource to demo;
grant create any sequence to demo;
grant create any table to demo;
grant delete any table to demo;
grant insert any table to demo;
grant select any table to demo;
grant unlimited tablespace to demo;
grant execute any procedure to demo;
grant update any table to demo;
grant create any view to demo;

--匯入匯出命令
ip匯出方式: exp demo/demo@127.0.0.1:1521/orcl file=f:/f.dmp full=y
exp demo/demo@orcl file=f:/f.dmp full=y
imp demo/demo@orcl file=f:/f.dmp full=y ignore=y


注意點:1.如果在PL/SQL 等工具裡開啟的話,直接修改下面的程式碼中[斜體加粗部分]執行
2.確保路徑存在,比如【D:\oracle\oradata\Oracle9i\】也就是你要儲存檔案的路徑存在


/*分為四步 */
/*第1步:建立臨時表空間 */
create temporary tablespace user_temp
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

/*第2步:建立資料表空間 */
create tablespace user_data
logging
datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

/*第3步:建立使用者並指定表空間 */
create user username identified by password
default tablespace user_data
temporary tablespace user_temp;

/*第4步:給使用者授予許可權 */
grant connect,resource,dba to username;

2、刪除表空間
對於單個user和tablespace 來說, 可以使用如下命令來完成。
 步驟一:  刪除user
drop user ×× cascade
說明: 刪除了user,只是刪除了該user下的schema objects,是不會刪除相應的tablespace的。
步驟二: 刪除tablespace
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;


但是,因為是供開發環境來使用的db, 需要清理的user 和 table space 很多。
思路:
 Export出DB中所有的user和tablespace, 篩選出系統的和有用的tablespace,把有用的資訊load到一張表中去。
然後寫例程迴圈,把不在有用表的tablespace刪掉
1. select username,default_tablespace from dba_users;
2. 
create table MTUSEFULSPACE
(
   ID Number(4) NOT NULL PRIMARY KEY,
   USERNAME varchar2(30),
   TABLESPACENAME varchar2(60),
   OWNERNAME varchar2(30)
);
3.
declare icount number(2);
        tempspace varchar2(60);
begin
  for curTable in (select username as allusr,default_tablespace as alltblspace from dba_users)
  loop
  tempspace :=curTable.alltblspace;
  dbms_output.put_line(tempspace);
  select count(TABLESPACENAME) into icount from MTUSEFULSPACE where TABLESPACENAME = tempspace;
  if icount=0 then
    DROP TABLESPACE tempspace INCLUDING CONTENTS AND DATAFILES;
  end if;
  commit;
  end loop;
end;

執行後會報如下錯誤
ORA-06550: 第 10 行, 第 5 列:
PLS-00103: 出現符號 "DROP"在需要下列之一時:
 begin case declare exit
   for goto if loop mod null pragma raise return select update
   while with <an identifier>
   <a double-quoted delimited-identifier> <a bind variable> <<
   close current delete fetch lock insert open rollback
   savepoint set sql execute commit forall merge pipe
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

好像是被鎖了。。

把需要刪除的user, tablespace 匯出到Excel. 使用CONCATENATE 組出SQL.
貼到SQLdevelop 批量執行


如要找datafile的具體位置,可以使用
select t1.name,t2.name from v$tablespace t1, v$datafile t2 where t1.ts# = t2.ts#;

--刪除空的表空間,但是不包含物理檔案
drop tablespace tablespace_name;
--刪除非空表空間,但是不包含物理檔案
drop tablespace tablespace_name including contents;
--刪除空表空間,包含物理檔案
drop tablespace tablespace_name including datafiles;
--刪除非空表空間,包含物理檔案
drop tablespace tablespace_name including contents and datafiles;
--如果其他表空間中的表有外來鍵等約束關聯到了本表空間中的表的欄位,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;

3修改表空間
Oracle修改表空間大小

使用Oracle10g建立資料庫後,向資料庫中匯入了部分資料,第二天繼續向資料庫中匯入資料表時發生錯誤:


查了很多資料發現原來是Oracle表空間限制,導致無法繼續匯入資料的原因。如果在建立資料庫時沒有設定,

Oracle 預設的表空間大小為400M,當資料庫中資料量達到這個值,再向資料庫中匯入資料就會報錯。解決方法是

擴充套件表空間。可以選擇將表容量擴大,比如擴充套件到5G,或者當表空間不夠時每次自動增加一定的容量,如每次自增200M。

下面列出詳細過程:
1.通過sql plus 命令登入資料庫。

  在命令列下輸入sqlplus “登入使用者名稱/口令 as 登入型別”就可以登入,系統內建的使用者名稱常用的是sys,密碼是在安裝oracle過程中設定的密碼,清務必牢記,如果用sys帳戶登入,登入型別一定要是sysdba。

2.檢視各表空間分配情況。

select tablespace_name, sum(bytes) / 1024 / 1024  from dba_data_files  

 group by tablespace_name;  

3.檢視各表空間空閒情況。

select tablespace_name, sum(bytes) / 1024 / 1024  from dba_free_space  group by tablespace_name;  

4.更改資料表大小(10G)

alter database datafile '/ora/oradata/radius/undo.dbf' resize 10240m;

5.設定表空間不足時自動增長

5.1檢視錶空間是否自動增長

SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;

5.2 設定表空間自動增長

ALTER DATABASE DATAFILE 'c:\SmartDB01.ora' AUTOEXTEND ON;//開啟自動增長

ALTER DATABASE DATAFILE 'c:\SmartDB01.ora' AUTOEXTEND ON NEXT 200M ;//每次自動增長200m

ALTER DATABASE DATAFILE 'c:\SmartDB01.ora' AUTOEXTEND ON NEXT 200M MAXSIZE 1024M;//每次自動增長200m,資料表最大不超過1G。

產生原因: 需要對使用者表空間進行修改
解決方法:
     軟體在建立帳套時,表空間使用了預設設定,表空間可以自動增加。如果使用者為了提升速度進行了優化,關閉了此選項,則在年結前也應該檢查一下表空間的使用情況,如果已經使用空間小於剩餘空間,也應該進行擴充。
檢視錶空間使用情況:
SELECT * FROM DBA_FREE_SPACE

舉例:
在實際操作中請根據實際資料庫路徑等資訊作適當的調整,切記不可生搬硬套!
另外,請在調整之前,對oracle 作一全備份!

假設表空間名稱為GS_ORADB_001,資料檔案‘C:\ORADATA\GS_ORADB_001.DBF',
索引表空間名稱為GS_ORADB_IDX_001,資料檔案‘C:\ORADATA\GS_ORADB_IDX_001.DBF'

ORACLE8i:
首先在DOS命令列方式中執行
C:\>SVRMGRL

SVRMGRL>CONNECT INTERNAL
SVRMGRL>SHUTDOWN
SVRMGRL>STARTUP MOUNT

ORACLE9i:
首先在DOS命令列方式中執行
C:\>SQLPLUS /NOLOG

SQL>CONNECT / AS SYSDBA
SQL >SHUTDOWN
SQL >STARTUP MOUNT

1、增加表空間尺寸
增加一個資料檔案:
SQL>ALTER TABLESPACE GS_ORADB_001 ADD DATAFILE ‘C:\ORADATA\GS_ORADB_ADD_001.DBF' SIZE 500M; 
2、擴大原有檔案大小:
SQL>ALTER DATABASE DATAFILE ‘C:\ORADATA\GS_ORADB_001.DBF' RESIZE 1000M; 
3、移動表空間資料檔案
假如要求將C:\ORADATA 下GS_ORADB_001.DBF移至D:\ORADATA 下,並把檔名改為GS_ORADB_ALT_001.DBF
步驟:
3.1、將例項處於關閉狀態
首先在DOS命令列方式中執行(ORACLE9i)
C:\>SQLPLUS /NOLOG

SQL>CONNECT / AS SYSDBA
SQL >SHUTDOWN
SQL >STARTUP MOUNT

3.2、把資料檔案C:\ORADATA 下GS_ORADB_001.DBF移動到D:\ORADATA下,並把檔名改為GS_ORADB_ALT_001.DBF

3.3、再到SQLPLUS 環境中
SQL>ALTER DATABASE RENAME FILE ‘C:\ORADATA\GS_ORADB_001.DBF' TO ‘D:\ORADATA\GS_ORADB_ALT_001.DBFF'; 

SQL>ALTER TABLESPACE GS_ORADB_001 RENAME DATAFILE ‘C:\ORADATA\GS_ORADB_001.DBF' TO ‘D:\ORADATA\GS_ORADB_ALT_001.DBFF'; 

SQL>ALTER DATABASE OPEN; 

4、檢視剩餘空間
SQL>SELECT TABLESPACE_NAME,SUM(BYTES),MAX(BYTES) FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME; 
注意:空閒資料塊總和sum(bytes) 夠用並不意味每個空閒塊都滿足分配需要,所以當表空間不夠分配擴充套件塊的時候,還要檢視最大空閒資料塊max(bytes)的大小。

5、合併空閒塊
如果表空間上的資料物件經常發生類似drop-create 的變動,加之未採用統一的擴充套件塊尺寸,使那些採用較大擴充套件塊的資料物件不能利用較小的空間碎片,造成空間浪費。可通過將較小的空閒塊合併成較大的空閒塊的方法,減少空間浪費。
SQL>ALTER TABLESPACE GS_ORADB_001 COALESCE;

6、刪除表空間
刪除表空間及其包含的所有資料
SQL>DROP TABLESPACE GS_ORADB_001 INCLUDING CONTENTS;


Oracle修改表空間為自動擴充套件
1.資料檔案自動擴充套件的好處
1)不會出現因為沒有剩餘空間可以利用到資料無法寫入
2)儘量減少人為的維護
3)可以用於重要級別不是很大的資料庫中,如測試資料庫等
2.資料檔案自動擴充套件的弊端
1)如果任其擴大,在資料量不斷變大的過程中會導致某個資料檔案異常的大
2)沒有人管理的資料庫是非常危險的

3.查詢當前資料庫中表空間
SEC_D是否為自動擴充套件
sec@orcl> select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'SEC_D';


4.通過修改SEC_D的資料檔案為自動擴充套件達到表空間SEC_D為自動擴充套件的目的
sec@orcl> alter database datafile '/u01/app/oracle/oradata/orcl/sec_d01.dbf' autoextend on;

5.確認是否已經修改成功
sec@orcl> select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'SEC_D';

6.總結修改語句語法
開啟自動擴充套件功能語法:
alter database datafile '對應的資料檔案路徑資訊' autoextend on;

關閉自動擴充套件功能語法:
alter database datafile '對應的資料檔案路徑資訊' autoextend off

重新命名錶空間  
  在需要的情況下,可以對錶空間的名稱進行修改,其修改不會影響到表空間中資料檔案。 但是不能修改系統表空間stsyem和sysaux.的名稱  
  前提條件: 修改表空間的名稱時,表空間的狀態必須為online.否則無法修改。  
    alter tablespaces tablespace_name rename to new_tablespace_name;  


--1、檢視錶空間的名稱及大小
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size
FROM dba_tablespaces t, dba_data_files d
WHERE t.tablespace_name = d.tablespace_name
GROUP BY t.tablespace_name;

--2、檢視錶空間物理檔案的名稱及大小
SELECT tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;

--3、檢視回滾段名稱及大小
SELECT segment_name,
tablespace_name,
r.status,
(initial_extent / 1024) initialextent,
(next_extent / 1024) nextextent,
max_extents,
v.curext curextent
FROM dba_rollback_segs r, v$rollstat v
WHERE r.segment_id = v.usn(+)
ORDER BY segment_name;

--4、檢視控制檔案
SELECT NAME FROM v$controlfile;

--5、檢視日誌檔案
SELECT MEMBER FROM v$logfile;

--6、檢視錶空間的使用情況
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name
FROM dba_free_space
GROUP BY tablespace_name;
SELECT a.tablespace_name,
a.bytes total,
b.bytes used,
c.bytes free,
(b.bytes * 100) / a.bytes "% USED ",
(c.bytes * 100) / a.bytes "% FREE "
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c
WHERE a.tablespace_name = b.tablespace_name
AND a.tablespace_name = c.tablespace_name;

--7、檢視資料庫庫物件
SELECT owner, object_type, status, COUNT(*) count#
FROM all_objects
GROUP BY owner, object_type, status;

--8、檢視資料庫的版本 
SELECT version
FROM product_component_version
WHERE substr(product, 1, 6) = 'Oracle';

--9、檢視資料庫的建立日期和歸檔方式
SELECT created, log_mode, log_mode FROM v$database;

SQL2:

--1G=1024MB
--1M=1024KB
--1K=1024Bytes
--1M=11048576Bytes
--1G=1024*11048576Bytes=11313741824Bytes
SELECT a.tablespace_name "表空間名",
total "表空間大小",
free "表空間剩餘大小",
(total - free) "表空間使用大小",
total / (1024 * 1024 * 1024) "表空間大小(G)",
free / (1024 * 1024 * 1024) "表空間剩餘大小(G)",
(total - free) / (1024 * 1024 * 1024) "表空間使用大小(G)",
round((total - free) / total, 4) * 100 "使用率 %"
FROM (SELECT tablespace_name, SUM(bytes) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name
 

相關文章