Oracle 默認(rèn)表空間問題及自增變量設(shè)置 |
發(fā)布時(shí)間: 2012/8/20 17:15:35 |
一、 Oracle數(shù)據(jù)庫設(shè)置默認(rèn)表空間問題 DBA們經(jīng)常會遇到一個這樣令人頭疼的問題:不知道誰在Oracle上創(chuàng)建了一個用戶,創(chuàng)建時(shí),沒有給這個用戶指定默認(rèn)表空間,所以這個用戶就會采用默認(rèn)的表空間——system表空間。導(dǎo)致系統(tǒng)表空間迅速被用戶數(shù)據(jù)占滿,直至宕機(jī)。 在10G中,DBA有辦法避免這種問題了——在線指定系統(tǒng)默認(rèn)表空間: ALTER DATABASE DEFAULT TABLESPACE ; 通過執(zhí)行以上命令,可以設(shè)定系統(tǒng)的默認(rèn)表空間。這樣的話,在創(chuàng)建新用戶時(shí),如果不指定他的默認(rèn)表空間,就會采用上面指定的系統(tǒng)默認(rèn)表空間作為這個用的默認(rèn)表空間。 SQL>conn /as sysdba SQL> create user test1 identified by test1 default tablespace ringidx; 用戶已創(chuàng)建。 SQL> alter database default tablespace ring; 數(shù)據(jù)庫已更改。 SQL> create user test identified by test; 用戶已創(chuàng)建。 SQL> select username, default_tablespace defspace from dba_users where usernae=’TEST’; USERNAME DEFSPACE ————– —————- TEST RING 但是要注意的是,一旦將系統(tǒng)默認(rèn)表空間修改了以后,原有的所有普通用戶的默認(rèn)表空間都會被指定為這個表空間,如上例中test1,創(chuàng)建時(shí)指定了他的默認(rèn)表空間為ringidx,執(zhí)行了’alter database default tablespace ring’后,他的默認(rèn)表空間也被改為了ring。 SQL> select username, default_tablespace defspace from dba_users where username=’TEST1′; USERNAME DEFSPACE ————– —————- TEST1 RING 為非核心的系統(tǒng)用戶指定一個特殊的默認(rèn)表空間 在創(chuàng)建Oracle實(shí)例時(shí),除了創(chuàng)建了如sys、system等系統(tǒng)核心的用戶外,還會創(chuàng)建一些諸如dbsnmp、odm、perfstat等非核心的用戶。這些用戶在9i中都是以system作為他們的默認(rèn)表空間。這些用戶一旦被使用,也會產(chǎn)生較大的數(shù)據(jù)量占用system表空間。 在Oracle10G當(dāng)中,使用了一個新的表空間SYSAUX作為這些用戶的默認(rèn)表空間。這個表空間在實(shí)例創(chuàng)建是就創(chuàng)建了,除了他的數(shù)據(jù)文件名可以被修改外,其他都不允許被修改。 Oracle的這一改變可以使當(dāng)system表空間損壞時(shí)對數(shù)據(jù)庫做全庫恢復(fù)。在sysaux中的對象可以恢復(fù)成普通對象,而數(shù)據(jù)庫能保持正常運(yùn)行。 如果DBA想要將sysaux表空間中的用戶轉(zhuǎn)移到其他表空間去該如何做呢。在10G中,專門為此提供一個視圖V$SYSAUX_OCCUPANTS來描述如何轉(zhuǎn)移這些用戶的表空間。 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,當(dāng)前它占用了5568kb的表空間。 為表空間改名 這Oracle10G表空間增強(qiáng)中一個令人心動的改變。 這項(xiàng)功能允許改變數(shù)據(jù)庫中除system和sysaux外任意一個表空間的名字。 ALTER TABLESPACE RENAME TO ; 有了這項(xiàng)功能,將會讓很多事情變得非常簡單。 有DBA可能會擔(dān)心,一旦一個表空間的名字改變了,而且它已經(jīng)被使用了很長時(shí)間了,會不會引起系統(tǒng)的混亂?這個不用擔(dān)心,執(zhí)行了上面的語句后,Oracle會將系統(tǒng)中所有相關(guān)的數(shù)據(jù)字典的內(nèi)容全部更新: SQL> alter tablespace ring rename to ring1; 表空間已更改。 SQL> select username, default_tablespace defspace from dba_users where username=’TEST’; USERNAME DEFSPACE ————– —————- TEST RING1 二、Oracle,SQL,MySQL的自增變量設(shè)置 Oracle,SQL Server,MySQL的自增變量設(shè)置: 1、MySQL的自增變量是比較好記的,使用AUTO_INCREMENT關(guān)鍵字,如果知道英文的就容易記憶了,如下創(chuàng)建一個帶有自增變理的表: create table test(id int AUTO_INCREMENT primary key not null,name varchar(50)); 注釋:此處的id一定要申明為主鍵,否則會報(bào)錯。 2、SQl Server使用identity關(guān)鍵字,可以很容易指定從什么數(shù)開始,增幅是多少,如下: create table test(id int identity(100,10) primary key not null,name varchar(50)); 3、Oracle不能夠在創(chuàng)建表的時(shí)候指定自動關(guān)鍵字,它需要重新創(chuàng)建sequence,然后以"創(chuàng)建鍵。nextval"來引用: create table test(id int primary key not null,name varchar(50)); create sequence test_id(最好是表名+序列號標(biāo)記) increment by 1 start with 1 maxvalue 9999; 引用如下: insert into test(test_id.nextval,'www'); 本文出自:億恩科技【www.cmtents.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |