例項講解Oracle資料庫設定預設表空間問題

2022-04-03 21:30:43 字數 2366 閱讀 3829

dba們經常會遇到乙個這樣令人頭疼的問題:不知道誰在oracle上建立了乙個使用者,建立時,沒有給這個使用者指定預設表空間,所以這個使用者就會採用預設的表空間——system表空間。導致系統表空間迅速被使用者資料佔滿,直至宕機。

在10g中,dba有辦法避免這種問題了——**指定系統預設表空間:

alter database default tablespace ;

通過執行以上命令,可以設定系統的預設表空間。這樣的話,在建立新使用者時,如果不指定他的預設表空間,就會採用上面指定的系統預設表空間作為這個用的預設表空間。

sql>conn /as sysdba

sql> create user test1 identified by test1 default tablespace ringidx;

使用者已建立。

sql> alter database default tablespace ring;

資料庫已更改。

sql> create user test identified by test;

使用者已建立。

sql> select username, default_tablespace defspace from dba_users where

username=』test』;

username defspace

————– —————-

test ring

但是要注意的是,一旦將系統預設表空間修改了以後,原有的所有普通使用者的預設表空間都會被指定為這個表空間,如上例中test1,建立時指定了他的預設表空間為ringidx,執行了』alter database default tablespace ring』後,他的預設表空間也被改為了ring。

sql> select username, default_tablespace defspace from dba_users where

username=』test1′;

username defspace

————– —————-

test1 ring

為非核心的系統使用者指定乙個特殊的預設表空間

在建立oracle例項時,除了建立了如sys、system等系統核心的使用者外,還會建立一些諸如dbsnmp、odm、perfstat等非核心的使用者。這些使用者在9i中都是以system作為他們的預設表空間。這些使用者一旦被使用,也會產生較大的資料量占用system表空間。

在oracle10g當中,使用了乙個新的表空間sysaux作為這些使用者的預設表空間。這個表空間在例項建立是就建立了,除了他的資料檔名可以被修改外,其他都不允許被修改。

oracle的這一改變可以使當system表空間損壞時對資料庫做全庫恢復。在sysaux中的物件可以恢復成普通物件,而資料庫能保持正常執行。

如果dba想要將sysaux表空間中的使用者轉移到其他表空間去該如何做呢。在10g中,專門為此提供乙個檢視v$sysaux_occupants來描述如何轉移這些使用者的表空間。

select * from v$sysaux_occupants where occupant_name = 『odm』

occupant_name occupant_desc schema_name move_procedure move_procedure_desc space_usage_kbytes

————- ————- ———– ————– ——————- ——————

odm oracle data mining dmsys move_odm move procedure for oracle data mining 5568

1 rows selected

如上,如果要將改變odm的表空間,可以使用儲存過程move_odm,當前它占用了5568kb的表空間。

為表空間改名

這oracle10g表空間增強中乙個令人心動的改變。

這項功能允許改變資料庫中除system和sysaux外任意乙個表空間的名字。

alter tablespace rename to ;

有了這項功能,將會讓很多事情變得非常簡單。

有dba可能會擔心,一旦乙個表空間的名字改變了,而且它已經被使用了很長時間了,會不會引起系統的混亂?這個不用擔心,執行了上面的語句後,oracle會將系統中所有相關的資料字典的內容全部更新:

sql> alter tablespace ring rename to ring1;

表空間已更改。

sql> select username, default_tablespace defspace from dba_users where username=』test』;

username defspace

————– —————-

test ring1

例項講解Oracle資料庫設定預設表空間問題

dba們經常會遇到乙個這樣令人頭疼的問題 不知道誰在oracle上建立了乙個使用者,建立時,沒有給這個使用者指定預設表空間,所以這個使用者就會採用預設的表空間 system表空間。導致系統表空間迅速被使用者資料佔滿,直至宕機。alter database default tablespace 通過執...

例項講解Oracle資料庫設定預設表空間問題

例項講解oracle資料庫設定預設表空間問題 dba們經常會遇到乙個這樣令人頭疼的問題 不知道誰在oracle上建立了乙個使用者,建立時,沒有給這個使用者指定預設表空間,所以這個使用者就會採用預設的表空間 system表空間。導致系統表空間迅速被使用者資料佔滿,直至宕機。alter database...

例項講解Oracle資料庫設定預設表空間問題

例項講解oracle資料庫設定預設表空間問題,閱讀例項講解oracle資料庫設定預設表空間問題,dba們經常會遇到乙個這樣令人頭疼的問題 不知道誰在oracle上建立了乙個使用者,建立時,沒有給這個使用者指定預設表空間,所以這個使用者就會採用預設的表空間 system表空 dba們經常會遇到乙個這樣...