熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

更改Oracle數據庫表的表空間

2013-11-13 15:50:49  來源: Oracle 

  在Oracle數據庫管理系統中創建庫表(table)時要分配一個表空間(tablespace)如果未指定表空間則使用系統用戶確省的表空間
  
  在Oracle實際應用中我們可能會遇到這樣的問題處於性能或者其他方面的考慮需要改變某個表或者是某個用戶的所有表的表空間通常的做法就是首先將表刪除然後重新建表在新建表時將表空間指定到我們需要改變的表空間如果該用戶已經保存了大量數據這種辦法就就顯得不是很方便因為有大量數據需要提前備份出來下面介紹一種利用數據庫的導出/導入功能來實現重新組織數據庫表空間的方法
  
  下面是一個簡單的例子假定要將用戶oa下的全部表從表空間A轉換到表空間B具體步驟(在Oracle i for linux環境)如下
  
   導出db_zgxt下的所有表(Dos控制台下) 導出db_zgxt下的所有表(Dos控制台下)
  
   導出db_zgxt下的所有表(Dos控制台下)

  EXP oa/password@pararmount_server FILE=d:\__oadmp LOG=d:\__oaLOG
  
   刪除oa下的所有表(在SQL/PLUS中)
  
  可以采用批處理的方式刪除掉db_zgxt下的所有表生成批處理的語句如下
  
  其中set head off將表頭信息去掉
  SET HEAD OFF
  SPOOL c:\drop_tablessql
  select drop table ||table_name||; from user_tables;
  spool off;
  @c:\drop_tablessql;
  sql >@drop_tablessql
  
   采用導入參數 INDEXFILE導入oa用戶下的所有表(Dos控制台下)
  
  把建表和索引的語句導出到文件其中建表語句是加注釋的並沒有實際導入
  
  IMP oa/password@paramount_server FULL=Y FILE=d:\__oadmp INDEXFILE=d:\altertablespace_table_indexSQL LOG=d:\altertablespaceLOG
  
  其中指定參數INDEXFILE後系統就將創建表和索引的語句寫到一個文件這裡是altertablespace_table_indexSQL 中該文件中包含了所有創建索引(CREATE INDEX)語句和創建表(CREATETABLE)語句但是這裡所有創建表的語句均加了注釋標志在任何文本編輯器中打開並編輯該文件去掉所有創建表語句的注釋標志將所有的表空間名稱由A替換為B同時對所有的創建索引語句加上注釋標志這些工作作完以後在SQL/PLUS中運行該腳本文件這些表就被創建其表空間由A變為B
  
  采用導入參數INDEXES=N 和IGNORE=Y將db_zgxt用戶的表數據導入庫中(Dos控制台下)
  
   采用導入參數INDEXES=N 和IGNORE=Y將oa用戶的表數據導入庫中(Dos控制台下)
  
  IMP oa/password@paramount_server FULL=Y INDEXES=N FILE=d:\__oadmp IGNORE=Y LOG=d:\altertablespaceLOG
  
  其中參數INDEXES=N是指將數據導入數據庫中時不加索引IGNORE=Y是指在導入數據過程中忽略表已經存在(table already exists)的錯誤這樣Oralce就將數據和一些約束條件導入到第步創建的表中
  
   創建索引
  
  在文本編輯器中重新打開在第步中創建的altertablespace_table_indexSQL 腳本文件這次將所有創建表(CREATE TABLE)的語句加上注釋標志然後將所有的創建索引(CREATE INDEX)語句去掉注釋標志在SQL/PLUS中再次運行該腳本文件
  
  至此我們就成功完成了將oa用戶下的全部表從表空間A轉換到表空間B的工作當然你可以只導入一部分表
From:http://tw.wingwit.com/Article/program/Oracle/201311/17398.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.