修改Oracle資料庫表的大小
實際應用中,很多人可能會遇到這樣的問題。處於效能或者方面的考慮,需要改變某個表或者是某個使用者的所有表的表空間。通常的做法就是首先將表刪除,然後重新建表,在新建表時將表空間指定到我們需要改變的表空間。如果該使用者已經儲存了大量資料,這種辦法就就顯得不是很方便,因為有大量資料需要提前備份出來。下面介紹一種利用的匯出/匯入功能來實現重新組織資料庫表空間的方法。
下面是一個簡單的例子,假定要將使用者db_zgxt下的全部表從表空間A轉換到表空間B,具體步驟(在Oracle 8.0.5 for NT環境)如下:
1. 匯出db_zgxt下的所有表(Dos控制檯下)
EXP80 OWNER=db_zgxt FILE=Exp0326.DMP LOG=Exp0326.LOG
系統提示輸入使用者名稱和口令,回答完畢,系統就開始將db_zgxt下的所有表都匯出到一個叫Exp0316.dmp的檔案中。
2. 刪除db_zgxt下的所有表(在SQL/PLUS中)
可以採用批處理的方式刪除掉db_zgxt下的所有表,生成批處理的語句如下:
select ’drop table ’ user_tables ’;’ from user_tables;
3. 採用匯入引數 INDEXFILE匯入db_zgxt使用者下的所有表(Dos控制檯下)
IMP80 FULL=Y FILE=Exp0326.DMP INDEXFILE=db_zgxt.SQL LOG=Imp0326_1.LOG
系統提示輸入使用者名稱和口令,回答完畢,系統就開始將檔案Exp0326.dmp匯入到db_zgxt使用者下。
其中,指定引數INDEXFILE後,系統就將建立表和索引的語句寫到一個檔案,這裡是db_zgxt.sql中。該檔案中包含了所有建立索引(CREATE INDEX)語句和建立表(CREATETABLE)語句,但是這裡所有建立表的語句均加了註釋標誌。在任何文字編輯器中開啟並編輯該檔案,去掉所有建立表語句的註釋標誌,將所有的表空間名稱由A替換為B,同時對所有的建立索引語句加上註釋標誌。這些作完以後,在SQL/PLUS中執行該指令碼檔案,這些表就被建立,其表空間由A變為B。
4. 採用匯入引數INDEXES=N 和IGNORE=Y將db_zgxt使用者的表資料匯入庫中(Dos控制檯下)
IMP80 FULL=Y INDEXES=N FILE=Exp0326.DMP IGNORE=Y LOG=Imp0326_2.LOG
其中,引數INDEXES=N是指將資料匯入資料庫中時不加索引。IGNORE=Y是指在匯入資料過程中,忽略表已經存在(table already exists)的錯誤。這樣Oralce就將資料和一些約束條件匯入到第3步建立的表中。
5. 建立索引
在文字編輯器中重新開啟在第3步中建立的db_zgxt.sql指令碼檔案,這次,將所有建立表(CREATE TABLE)的語句加上註釋標誌,然後將所有的建立索引(CREATE INDEX)語句去掉註釋標誌。在SQL/PLUS中再次執行該指令碼檔案。
至此,已經成功的完成了將db_zgxt使用者下的全部表從表空間A轉換到表空間B的工作。[@more@]
下面是一個簡單的例子,假定要將使用者db_zgxt下的全部表從表空間A轉換到表空間B,具體步驟(在Oracle 8.0.5 for NT環境)如下:
1. 匯出db_zgxt下的所有表(Dos控制檯下)
EXP80 OWNER=db_zgxt FILE=Exp0326.DMP LOG=Exp0326.LOG
系統提示輸入使用者名稱和口令,回答完畢,系統就開始將db_zgxt下的所有表都匯出到一個叫Exp0316.dmp的檔案中。
2. 刪除db_zgxt下的所有表(在SQL/PLUS中)
可以採用批處理的方式刪除掉db_zgxt下的所有表,生成批處理的語句如下:
select ’drop table ’ user_tables ’;’ from user_tables;
3. 採用匯入引數 INDEXFILE匯入db_zgxt使用者下的所有表(Dos控制檯下)
IMP80 FULL=Y FILE=Exp0326.DMP INDEXFILE=db_zgxt.SQL LOG=Imp0326_1.LOG
系統提示輸入使用者名稱和口令,回答完畢,系統就開始將檔案Exp0326.dmp匯入到db_zgxt使用者下。
其中,指定引數INDEXFILE後,系統就將建立表和索引的語句寫到一個檔案,這裡是db_zgxt.sql中。該檔案中包含了所有建立索引(CREATE INDEX)語句和建立表(CREATETABLE)語句,但是這裡所有建立表的語句均加了註釋標誌。在任何文字編輯器中開啟並編輯該檔案,去掉所有建立表語句的註釋標誌,將所有的表空間名稱由A替換為B,同時對所有的建立索引語句加上註釋標誌。這些作完以後,在SQL/PLUS中執行該指令碼檔案,這些表就被建立,其表空間由A變為B。
4. 採用匯入引數INDEXES=N 和IGNORE=Y將db_zgxt使用者的表資料匯入庫中(Dos控制檯下)
IMP80 FULL=Y INDEXES=N FILE=Exp0326.DMP IGNORE=Y LOG=Imp0326_2.LOG
其中,引數INDEXES=N是指將資料匯入資料庫中時不加索引。IGNORE=Y是指在匯入資料過程中,忽略表已經存在(table already exists)的錯誤。這樣Oralce就將資料和一些約束條件匯入到第3步建立的表中。
5. 建立索引
在文字編輯器中重新開啟在第3步中建立的db_zgxt.sql指令碼檔案,這次,將所有建立表(CREATE TABLE)的語句加上註釋標誌,然後將所有的建立索引(CREATE INDEX)語句去掉註釋標誌。在SQL/PLUS中再次執行該指令碼檔案。
至此,已經成功的完成了將db_zgxt使用者下的全部表從表空間A轉換到表空間B的工作。[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10455649/viewspace-976215/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何獲取 PostgreSQL 資料庫中的表大小、資料庫大小、索引大小、模式大小、表空間大小、列大小SQL資料庫索引模式
- Oracle資料庫表空間的資料檔案大小上限。Oracle資料庫
- Oracle 估算資料庫大小的方法Oracle資料庫
- 修改表結構遷移資料表來縮小表大小
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- phpmyadmin匯入資料庫大小限制修改PHP資料庫
- 查詢MySQL資料庫,MySQL表的大小MySql資料庫
- MYSQL-檢視資料庫或表的大小MySql資料庫
- oracle 回收表空間的資料檔案大小Oracle
- [Mysql]檢視每個資料庫大小以及每個表最後的修改時間MySql資料庫
- ORACLE資料庫修改資料庫名db_nameOracle資料庫
- 檢視oracle資料庫真實大小Oracle資料庫
- 查詢資料庫每個表佔用的大小資料庫
- sqlServer的資料庫回縮與表大小檢查。SQLServer資料庫
- 獲取資料庫表的資訊(大小,索引大小,建立時間,行數)資料庫索引
- 修改oracle redo log的大小Oracle Redo
- 修改Oracle資料庫字符集Oracle資料庫
- oracle資料庫修改連線數Oracle資料庫
- Oracle資料庫修改LISTENER的監聽埠Oracle資料庫
- PostgreSQL資料庫修改sql表的方法彙總SQL資料庫
- MySQL資料庫中庫、表名、欄位的大小寫問題MySql資料庫
- 如何檢視Oracle資料庫表空間大小(空閒、已使用),是否要增加表空間的資料檔案...Oracle資料庫
- [Oracle]Oracle資料庫資料被修改或者刪除恢復資料Oracle資料庫
- [轉帖]達夢資料庫-統計資料表資料量及空間表大小資料庫
- 修改資料庫的ORACLE的SGA和PGA的值資料庫Oracle
- SQL Server 2005 檢視資料庫表的大小 按照表大小排列SQLServer資料庫
- 修改Oracle資料庫字符集(zt)Oracle資料庫
- 使用NID修改Oracle資料庫名Oracle資料庫
- oracle 修改資料庫為歸檔模式Oracle資料庫模式
- Oracle資料庫表碎片整理Oracle資料庫
- 批量修改Mysql資料庫表Innodb為MyISANMySql資料庫
- POST表單資料大小的限制
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- oracle資料庫兩表資料比較Oracle資料庫
- MySQL命令檢視資料庫和表容量大小MySql資料庫
- 資料庫修改資料資料庫
- ZBlog的資料庫表是可以設定字首-修改ZBlog資料庫字首資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-練習:修改還原表空間到固定大小Oracle資料庫