一、 Oracle資料庫設定預設資料表空間問題
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
usernae=’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,SQL,MySQL的自增變數設定
Oracle,SQL Server,MySQL的自增變數設定:
1、MySQL的自增變數是比較好記的,使用AUTO_INCREMENT關鍵字,如果知道英文的就容易記憶了,如下建立一個帶有自增變理的表:
create table test(id int AUTO_INCREMENT
primary key not null,name varchar(50));
注釋:此處的id一定要申明為主鍵,否則會報錯。
2、SQl Server使用identity關鍵字,可以很容易指定從什麼數開始,增幅是多少,如下:
create table test(id int identity(100,10)
primary key not null,name varchar(50));
3、Oracle不能夠在建立表的時候指定自動關鍵字,它需要重新建立sequence,然後以"建立鍵。nextval"來引用:
create table test(id int primary key
not null,name varchar(50));
create sequence test_id(最好是表名+序號標記)
increment by 1 start with 1 maxvalue 9999;
引用如下:
insert into test(test_id.nextval,'www');