在Oracle數(shù)據(jù)庫管理系統(tǒng)中 創(chuàng)建庫表(table)時(shí)要分配一個(gè)表空間(tablespace) 如果未指定表空間 則使用系統(tǒng)用戶確省的表空間 在Oracle實(shí)際應(yīng)用中 我們可能會(huì)遇到這樣的問題 處于性能或者其他方面的考慮 需要改變某個(gè)表或者是某個(gè)用戶的所有表的表空間 通常的做法就是首先將表刪除 然后重新建表 在新建表時(shí)將表空間指定到我們需要改變的表空間 如果該用戶已經(jīng)保存了大量數(shù)據(jù) 這種辦法就就顯得不是很方便 因?yàn)橛写罅繑?shù)據(jù)需要提前備份出來 下面介紹一種利用數(shù)據(jù)庫的導(dǎo)出/導(dǎo)入功能來實(shí)現(xiàn)重新組織數(shù)據(jù)庫表空間的方法 下面是一個(gè)簡(jiǎn)單的例子 假定要將用戶oa下的全部表從表空間A轉(zhuǎn)換到表空間B 具體步驟(在Oracle i for linux環(huán)境)如下 導(dǎo)出db_zgxt下的所有表(Dos控制臺(tái)下) 導(dǎo)出db_zgxt下的所有表(Dos控制臺(tái)下) 導(dǎo)出db_zgxt下的所有表(Dos控制臺(tái)下) EXP oa/password@pararmount_server FILE=d:\ _ _oa dmp LOG=d:\ _ _oa LOG 刪除oa下的所有表(在SQL/PLUS中) 可以采用批處理的方式刪除掉db_zgxt下的所有表 生成批處理的語句如下 其中set head off將表頭信息去掉SET HEAD OFFSPOOL c:\drop_tables sqlselect drop table ||table_name|| ; from user_tables;spool off;@c:\drop_tables sql;sql @drop_tables sql 采用導(dǎo)入?yún)?shù) INDEXFILE導(dǎo)入oa用戶下的所有表(Dos控制臺(tái)下) 把建表和索引的語句導(dǎo)出到文件 其中建表語句是加注釋的 并沒有實(shí)際導(dǎo)入IMP oa/password@paramount_server FULL=Y FILE=d:\ _ _oa dmp INDEXFILE=d:\altertablespace_table_index SQL LOG=d:\altertablespace LOG其中 指定參數(shù)INDEXFILE后 系統(tǒng)就將創(chuàng)建表和索引的語句寫到一個(gè)文件 這里是altertablespace_table_index SQL 中 該文件中包含了所有創(chuàng)建索引(CREATE INDEX)語句和創(chuàng)建表(CREATETABLE)語句 但是這里所有創(chuàng)建表的語句均加了注釋標(biāo)志 在任何文本編輯器中打開并編輯該文件 去掉所有創(chuàng)建表語句的注釋標(biāo)志 將所有的表空間名稱由A替換為B 同時(shí)對(duì)所有的創(chuàng)建索引語句加上注釋標(biāo)志 這些工作作完以后 在SQL/PLUS中運(yùn)行該腳本文件 這些表就被創(chuàng)建 其表空間由A變?yōu)锽 采用導(dǎo)入?yún)?shù)INDEXES=N 和IGNORE=Y將db_zgxt用戶的表數(shù)據(jù)導(dǎo)入庫中(Dos控制臺(tái)下) 采用導(dǎo)入?yún)?shù)INDEXES=N 和IGNORE=Y將oa用戶的表數(shù)據(jù)導(dǎo)入庫中(Dos控制臺(tái)下) IMP oa/password@paramount_server FULL=Y INDEXES=N FILE=d:\ _ _oa dmp IGNORE=Y LOG=d:\altertablespace LOG其中 參數(shù)INDEXES=N是指將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中時(shí)不加索引 IGNORE=Y是指在導(dǎo)入數(shù)據(jù)過程中 忽略表已經(jīng)存在(table already exists)的錯(cuò)誤 這樣Oralce就將數(shù)據(jù)和一些約束條件導(dǎo)入到第 步創(chuàng)建的表中 創(chuàng)建索引 在文本編輯器中重新打開在第 步中創(chuàng)建的altertablespace_table_index SQL 腳本文件 這次 將所有創(chuàng)建表(CREATE TABLE)的語句加上注釋標(biāo)志 然后將所有的創(chuàng)建索引(CREATE INDEX)語句去掉注釋標(biāo)志 在SQL/PLUS中再次運(yùn)行該腳本文件 至此 我們就成功完成了將oa用戶下的全部表從表空間A轉(zhuǎn)換到表空間B的工作 當(dāng)然你可以只導(dǎo)入一部分表 lishixinzhi/Article/program/Oracle/201311/17398
成都創(chuàng)新互聯(lián)公司作為成都網(wǎng)站建設(shè)公司,專注網(wǎng)站建設(shè)公司、網(wǎng)站設(shè)計(jì),有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問題,行業(yè)涉及加固等多個(gè)領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。
ORACLE中 表空間是數(shù)據(jù)管理的基本方法 所有用戶的對(duì)象要存放在表空間中 也就是用戶有空間的使用權(quán) 才能創(chuàng)建用戶
對(duì)象.否則是不充許創(chuàng)建對(duì)象 因?yàn)榫褪窍雱?chuàng)建對(duì)象 如表 索引等 也沒有地方存放 Oracle會(huì)提示:沒有存儲(chǔ)配額.
因此 在創(chuàng)建對(duì)象之前 首先要分配存儲(chǔ)空間.
分配存儲(chǔ) 就要?jiǎng)?chuàng)建表空間
創(chuàng)建表空間示例如下
CREATE TABLESPACE SAMPLE
LOGGING
DATAFILE D:\ORACLE\ORADATA\ORA \LUNTAN ora SIZE M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
上面的語句分以下幾部分
第一: CREATE TABLESPACE SAMPLE 創(chuàng)建一個(gè)名為 SAMPLE 的表空間
對(duì)表空間的命名 遵守Oracle 的命名規(guī)范就可了
ORACLE可以創(chuàng)建的表空間有三種類型:
( )TEMPORARY: 臨時(shí)表空間 用于臨時(shí)數(shù)據(jù)的存放;
創(chuàng)建臨時(shí)表空間的語法如下:
CREATE TEMPORARY TABLESPACE SAMPLE
( )UNDO : 還原表空間 用于存入重做日志文件
創(chuàng)建還原表空間的語法如下:
CREATE UNDO TABLESPACE SAMPLE
( )用戶表空間: 最重要 也是用于存放用戶數(shù)據(jù)表空間
可以直接寫成: CREATE TABLESPACE SAMPLE
TEMPORARY 和 UNDO 表空間是ORACLE 管理的特殊的表空間 只用于存放系統(tǒng)相關(guān)數(shù)據(jù)
第二: LOGGING
有 NOLOGGING 和 LOGGING 兩個(gè)選項(xiàng)
NOLOGGING: 創(chuàng)建表空間時(shí) 不創(chuàng)建重做日志
LOGGING 和NOLOGGING正好相反 就是在創(chuàng)建表空間時(shí)生成重做日志
用NOLOGGING時(shí) 好處在于創(chuàng)建時(shí)不用生成日志 這樣表空間的創(chuàng)建較快 但是沒能日志 數(shù)據(jù)丟失后 不能恢復(fù) 但是一般我們?cè)?/p>
創(chuàng)建表空間時(shí) 是沒有數(shù)據(jù)的 按通常的做法 是建完表空間 并導(dǎo)入數(shù)據(jù)后 是要對(duì)數(shù)據(jù)做備份的 所以通常不需要表空間的創(chuàng)
建日志 因此 在創(chuàng)建表空間時(shí) 選擇 NOLOGGING 以加快表空間的創(chuàng)建速度
第三: DATAFILE 用于指定數(shù)據(jù)文件的具 *** 置和大小
如: DATAFILE D:\ORACLE\ORADATA\ORA \LUNTAN ora SIZE M
說明文件的存放位置是 D:\ORACLE\ORADATA\ORA \LUNTAN ora 文件的大小為 M
如果有多個(gè)文件 可以用逗號(hào)隔開:
DATAFILE D:\ORACLE\ORADATA\ORA \LUNTAN ora SIZE M
D:\ORACLE\ORADATA\ORA \dd ora SIZE M
但是每個(gè)文件都需要指明大小 單位以指定的單位為準(zhǔn)如 M 或 K
對(duì)具體的文件 可以根據(jù)不同的需要 存放大不同的介質(zhì)上 如磁盤陣列 以減少IO竟?fàn)?/p>
指定文件名時(shí) 必須為絕對(duì)地址 不能使用相對(duì)地址
來源 () Oracle創(chuàng)建表空間_冬日陽光_新浪博客
第四: EXTENT MANAGEMENT LOCAL 存儲(chǔ)區(qū)管理方法
在Oracle i以前 可以有兩種選擇 一種是在字典中管理(DICTIONARY) 另一種是本地管理(LOCAL ) 從 I開始 只能是本地管
理方式 因?yàn)長(zhǎng)OCAL 管理方式有很多優(yōu)點(diǎn)
在字典中管理(DICTIONARY): 將數(shù)據(jù)文件中的每一個(gè)存儲(chǔ)單元做為一條記錄 所以在做DM操作時(shí) 就會(huì)產(chǎn)生大量的對(duì)這個(gè)管理
表的Delete和Update操作 做大量數(shù)據(jù)管理時(shí) 將會(huì)產(chǎn)生很多的DM操作 嚴(yán)得的影響性能 同時(shí) 長(zhǎng)時(shí)間對(duì)表數(shù)據(jù)的操作 會(huì)產(chǎn)生
很多的磁盤碎片 這就是為什么要做磁盤整理的原因
本地管理(LOCAL): 用二進(jìn)制的方式管理磁盤 有很高的效率 同進(jìn)能最大限度的使用磁盤 同時(shí)能夠自動(dòng)跟蹤記錄臨近空閑空
間的情況 避免進(jìn)行空閑區(qū)的合并操作
第五: SEGMENT SPACE MANAGEMENT
磁盤擴(kuò)展管理方法:
SEGMENT SPACE MANAGEMENT: 使用該選項(xiàng)時(shí)區(qū)大小由系統(tǒng)自動(dòng)確定 由于 Oracle 可確定各區(qū)的最佳大小 所以區(qū)大小是可
變的
UNIFORM SEGMENT SPACE MANAGEMENT:指定區(qū)大小 也可使用默認(rèn)值 ( MB)
第六: 段空間的管理方式:
AUTO: 只能使用在本地管理的表空間中 使用LOCAL管理表空間時(shí) 數(shù)據(jù)塊中的空閑空間增加或減少后 其新狀態(tài)都會(huì)在位圖
中反映出來 位圖使 Oracle 管理空閑空間的行為更加自動(dòng)化 并為管理空閑空間提供了更好的性 但對(duì)含有LOB字段的表不
能自動(dòng)管理
MANUAL: 目前已不用 主要是為向后兼容
第七: 指定塊大小 可以具體指定表空間數(shù)據(jù)塊的大小
創(chuàng)建例子如下:
CREATE TABLESPACE SAMPLE
LOGGING
DATAFILE D:\ORACLE\ORADATA\ORA \SAMPLE ora SIZE M
D:\ORACLE\ORADATA\ORA \dd ora SIZE M
EXTENT MANAGEMENT LOCAL
UNIFORM SEGMENT SPACE MANAGEMENT
* AUTO
SQL /
表空間已創(chuàng)建
要?jiǎng)h除表空間進(jìn) 可以
SQL DROP TABLESPACE SAMPLE;
lishixinzhi/Article/program/Oracle/201311/17970
這個(gè)可以通過alter方法,重新定義默認(rèn)表空間的:\x0d\x0asql:\x0d\x0aalter user username default tablespace userspace;\x0d\x0a解釋:以上語句就是說給username用戶重新指定表空間為userspace;\x0d\x0a擴(kuò)展:創(chuàng)建用戶的時(shí)候指定表空間。\x0d\x0asql:create user username identified by userpassword default tablespace userspace;
在使用oracle的 exp 和imp 導(dǎo)出導(dǎo)入的時(shí)候 有時(shí)遇到 需要導(dǎo)入的數(shù)據(jù)不是同一個(gè)用戶的 也不一定是同一個(gè)表空間 例如 源數(shù)據(jù)庫 上用戶為aaa 表空間aa 目標(biāo)數(shù)據(jù)庫 用戶為bbb 表空間bb 當(dāng)用imp導(dǎo)入以后查看發(fā)現(xiàn) bbb沒有aa這個(gè)表空間 但是還是導(dǎo)入進(jìn)去了 不過全部都跑到了users里面 這種情況時(shí)常有發(fā)生 特別是遷移數(shù)據(jù)庫的時(shí)候 那么為了更好的管理表空間和數(shù)據(jù)表 可以采用下面的方式 連接目標(biāo)數(shù)據(jù)庫 oracle@UCITDB:~ sqlplus /nolog SQL*Plus: Release Production on Fri Oct : : Copyright (c) Oracle All rights reserved SQL CONN /AS SYSDBA Connected SQL revoke unlimited tablespace from ucitdba; Revoke succeeded 刪除該用戶的表空間使用限制 SQL alter user ucitdba quota on users; User altered 修改表空間使用參數(shù) SQL alter user ucitdba quota unlimited on ucit; User altered 將目標(biāo)表空間的無限制使用權(quán)限賦給用戶 SQL quit Disconnected from Oracle Database g Enterprise Edition Release bit Production With the Partitioning OLAP and Data Mining options imp ucitdba/ fromuser=ucitdba touser=ucitdba file=/opt/oracle/oradata/backup/ucit_ dmp tablespaces=ucit full=y 具體地址根據(jù)自己的設(shè)置 回車搞定 lishixinzhi/Article/program/Oracle/201311/18725