不再為修改Oracle數(shù)據(jù)庫(kù)表的大小而煩惱
Oracle實(shí)際應(yīng)用中,常需要修改Oracle數(shù)據(jù)庫(kù)表的大小。下面簡(jiǎn)單介紹一種利用數(shù)據(jù)庫(kù)的導(dǎo)出/導(dǎo)入功能來(lái)實(shí)現(xiàn)重新組織Oracle數(shù)據(jù)庫(kù)表空間。
以一個(gè)簡(jiǎn)單例子為例,假定要將用戶db_zgxt下的全部表從表空間A轉(zhuǎn)換到表空間B,具體步驟(在Oracle 8.0.5 for NT環(huán)境)如下:
1、導(dǎo)出db_zgxt下的所有表(Dos控制臺(tái)下)
- EXP80 OWNER=db_zgxt FILE=Exp0326.DMP LOG=Exp0326.LOG
系統(tǒng)提示輸入用戶名和口令,回答完畢,系統(tǒng)就開(kāi)始將db_zgxt下的所有表都導(dǎo)出到一個(gè)叫Exp0316.dmp的文件中。
2、刪除db_zgxt下的所有表(在SQL/PLUS中)
可以采用批處理的方式刪除掉db_zgxt下的所有表,生成批處理的語(yǔ)句如下:
- select ’drop table ’||user_tables||’; ’ from user_tables;
3、采用導(dǎo)入?yún)?shù) INDEXFILE導(dǎo)入db_zgxt用戶下的所有表(Dos控制臺(tái)下)
- IMP80 FULL=Y FILE=Exp0326.DMP INDEXFILE=db_zgxt.SQL LOG=Imp0326_1.LOG
系統(tǒng)提示輸入用戶名和口令,回答完畢,系統(tǒng)就開(kāi)始將文件Exp0326.dmp導(dǎo)入到db_zgxt用戶下。
其中,指定參數(shù)INDEXFILE后,系統(tǒng)就將創(chuàng)建表和索引的語(yǔ)句寫(xiě)到一個(gè)文件,這里是db_zgxt.sql中。該文件中包含了所有創(chuàng)建索引(CREATE INDEX)語(yǔ)句和創(chuàng)建表(CREATETABLE)語(yǔ)句,但是這里所有創(chuàng)建表的語(yǔ)句均加了注釋標(biāo)志。在任何文本編輯器中打開(kāi)并編輯該文件,去掉所有創(chuàng)建表語(yǔ)句的注釋標(biāo)志,將所有的表空間名稱由A替換為B,同時(shí)對(duì)所有的創(chuàng)建索引語(yǔ)句加上注釋標(biāo)志。這些工作作完以后,在SQL/PLUS中運(yùn)行該腳本文件,這些表就被創(chuàng)建,其表空間由A變?yōu)锽。
4、采用導(dǎo)入?yún)?shù)INDEXES=N 和IGNORE=Y將db_zgxt用戶的表數(shù)據(jù)導(dǎo)入庫(kù)中(Dos控制臺(tái)下)
- IMP80 FULL=Y INDEXES=N FILE=Exp0326.DMP IGNORE=Y LOG=Imp0326_2.LOG
其中,參數(shù)INDEXES=N是指將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)中時(shí)不加索引。IGNORE=Y是指在導(dǎo)入數(shù)據(jù)過(guò)程中,忽略表已經(jīng)存在(table already exists)的錯(cuò)誤。這樣Oralce就將數(shù)據(jù)和一些約束條件導(dǎo)入到第3步創(chuàng)建的表中。
5、創(chuàng)建索引
在文本編輯器中重新打開(kāi)在第3步中創(chuàng)建的db_zgxt.sql腳本文件,這次,將所有創(chuàng)建表(CREATE TABLE)的語(yǔ)句加上注釋標(biāo)志,然后將所有的創(chuàng)建索引(CREATE INDEX)語(yǔ)句去掉注釋標(biāo)志。在SQL/PLUS中再次運(yùn)行該腳本文件。
至此,已經(jīng)成功的完成了將db_zgxt用戶下的全部Oracle數(shù)據(jù)庫(kù)表從表空間A轉(zhuǎn)換到表空間B的工作。
【編輯推薦】