在oracle資料庫管理系統中,建立庫表(table)時要分配乙個表空間(tablespace),如果未指定表空間,則使用系統使用者確省的表空間。
在oracle實際應用中,我們可能會遇到這樣的問題。處於效能或者其他方面的考慮,需要改變某個表或者是某個使用者的所有表的表空間。通常的做法就是首先將表刪除,然後重新建表,在新建表時將表空間指定到我們需要改變的表空間。如果該使用者已經儲存了大量資料,這種辦法就顯得不是很方便,因為有大量資料需要提前備份出來。下面介紹一種利用資料庫的匯出/匯入功能來實現重新組織資料庫表空間的方法。
下面是乙個簡單的例子,假定要將使用者oa下的全部表從表空間a轉換到表空間b,具體步驟(在oracle 9i for linux環境)如下:
1. 匯出db_zgxt下的所有表(dos控制台下)
exp oa/password@pararmount_server file=d:\10_27_oa.dmp log=d:\10_27_oa.log
2. 刪除oa下的所有表(在sql/plus中)
2.1可以採用批處理的方式刪除掉db_zgxt下的所有表,生成批處理的語句如下:
--其中set head off將表頭資訊去掉。
set head off
spool c:\drop_tables.sql
select 'drop table '||table_name||';' from user_tables;
spool off;
2.2執行刪除表的操作
sql >@drop_tables.sql
3. 建表和索引的語句匯出到檔案
採用匯入引數 indexfile匯入oa使用者下的所有表(dos控制台下)把建表和索引的語句匯出到檔案,其中建表語句是加注釋的,並沒有實際匯入。
imp oa/password@paramount_server full=y file=d:\220oa_expdata.dmp indexfile=d:\altertablespace_table_index.sql log=d:\altertablespace.log
其中,指定引數indexfile後,系統就將建立表和索引的語句寫到乙個檔案,這裡是altertablespace_table_index.sql 中。該檔案中包含了所有建立索引(create index)語句和建立表(createtable)語句,但是這裡所有建立表的語句均加了注釋標誌。
在任何文字編輯器中開啟並編輯該檔案,去掉所有建立表語句的注釋標誌,將所有的表空間名稱由a替換為b,同時對所有的建立索引語句加上注釋標誌。
這些工作作完成以後,在sql/plus中執行該指令碼檔案,這些表就被建立,其表空間由a變為b。採用匯入引數indexes=n 和ignore=y將db_zgxt使用者的表資料導入庫中(dos控制台下)。
4. 採用匯入引數indexes=n 和ignore=y將oa使用者的表資料導入庫中(dos控制台下)
imp oa/password@paramount_server full=y indexes=n file=d:\ 220oa_expdata.dmp ignore=y log=d:\altertablespace.log
其中,引數indexes=n是指將資料匯入資料庫中時不加索引。ignore=y是指在匯入資料過程中,忽略表已經存在(table already exists)的錯誤。這樣oralce就將資料和一些約束條件匯入到第3步建立的表中。
5. 建立索引
在文字編輯器中重新開啟在第3步中建立的altertablespace_table_index.sql 指令碼檔案,這次,將所有建立表(create table)的語句加上注釋標誌,然後將所有的建立索引(create index)語句去掉注釋標誌。在sql/plus中再次執行該指令碼檔案。
至此,我們就成功完成了將oa使用者下的全部表從表空間a轉換到表空間b的工作。當然你可以只匯入一部分表。
更改Oracle資料庫表的表空間
更改 oracle 資料庫表的 表空間 石驍騑 2001年07月20日 17 56 在oracle 2ecom 2fglobal 2fcn ajbid 167 pool homebutton ajpage oracle資料庫管理系統中,建立庫表 table 時要分配乙個表空間 tablespace ...
Oracle匯出空表資料庫
經常我們在匯出資料庫進行備份的時候,會發現有些空表沒有匯出,如何匯出包含空表的完整資料庫呢?那麼請按照下面的方法進行即可。1.使用plsql工具,連線oracle資料庫 2.開啟乙個sql視窗,用以下這句查詢空表並生成執行命令 1select alter table table name alloc...
更改Oracle資料庫表的表空間 方法2
1 建立表空間 create tablespace databk logging datafile f oracle product 10.1.0 oradata ffk databk.ora size 300m 2 修改使用者的預設表空間 alter user fly default tables...