設定檔案輸出路徑:
sql> alter systemset db_create_file_dest='/home/oracle';
system altered
sql> showparameter db_create_file_dest;
name type value
db_create_file_dest string /home/oracle
建立兩個表空間用來儲存範圍分割槽表
sql> createtablespace ts_range_30000 datafile size 50m autoextend on;
tablespacecreated
sql> createtablespace ts_range_50000 datafile size 50m autoextend on;
tablespacecreated
建立分割槽表:
create tablet_rangetest
(object_idnumber(5),
object_namevarchar2(50),
create_datedate,
object_typevarchar2(20))
partition byrange(object_id)
partitionobject_id_30000 values less than (30000) tablespace ts_range_30000,
partitionobject_id_50000 values less than (maxvalue) tablespace ts_range_50000
插入資料:
insert intot_rangetest
selectobject_id,object_name,created,object_type from dba_objects;
建立索引分割槽:
create
index
ind_t_rangetest
ont_rangetest(object_id)
local (
partition
object_id_30000
tablespace
ts_range_30000 ,
partition
object_id_50000
tablespace
ts_range_50000 )
確定索引分割槽和表未分割槽位於同乙個表空間
檢查能不能以表空間傳遞的方式匯出:
sql> execdbms_tts.transport_set_check('ts_range_30000', true);
pl/sqlprocedure successfully completed
sql> select* from transport_set_violations;
violations
defaultpartition (table) tablespace system for t_rangetest not contained in tra
sys ownedobject ind_t_rangetest in tablespacets_range_30000 not allowed in pl
sys ownedobject t_rangetest in tablespacets_range_30000 not allowed in plugga
partitionedtable sys.t_rangetest is partially contained in the transportable se
發現system表空間沒有包含在傳遞的表空間中,表和索引都不允許傳遞
按照譚大師書中的方法解決
建立臨時表和臨時表的索引:
sql> createtable tmp_ts_range_30000 as select * from t_rangetest where 1=2;
table created
sql> createindex ind_tmp_ts_range_30000 on tmp_ts_range_30000(object_id);
index created
要交換的分割槽共包含
29553
條記錄
sql> altertable t_rangetest exchange partition object_id_30000 with tabletmp_ts_range_30000 including indexes with validation;
table altered
交換完畢
發現臨時表被交換到了ts_range_30000這個分割槽上
此時sql> execdbms_tts.transport_set_check('ts_range_30000', true);
pl/sqlprocedure successfully completed.
sql> select * from transport_set_violations;
violations
sys ownedobject ind_tmp_ts_range_30000 intablespace ts_range_30000 not allowe
d in pluggableset
sys ownedobject tmp_ts_range_30000 in tablespacets_range_30000 not allowed in
pluggable set
還是不行上網查了下 原來systen表空間不能這麼做,暈菜
沒辦法用普通使用者重複上面的工作
發現終於ok了可以交換了
sql> altertablespace ts_range_30000 read only;
tablespacealtered
sql> createor replace directory export as '/home/oracle';
directorycreated
expdp system/oracle directory=exportdumpfile=tts.dmp transport_tablespaces= ts_range_30000 transport_full_check=ylogfile=tts.log
匯出成功
拷貝tts.dmp和表空間檔案到目標計算機上
建立分割槽表:
create table t_rangetest
(object_id number(5),
object_name varchar2(50),
create_date date,
object_type varchar2(20))
partition by range(object_id)
partition object_id_30000 values less than(30000) ,
partition object_id_50000 values less than(maxvalue)
建立索引
create
index
ind_t_rangetest
ont_rangetest(object_id)
local (
partition
object_id_30000 ,
partition
object_id_50000 )
可見匯入成功了第一次報錯:
ora-39123: data pump transportabletablespace job aborted
ora-19721: cannot find datafile withabsolute file number 8 in tablespace ts_range_30000
發現自己把資料檔案拷錯了重新拷下匯入即可
檢視匯入的表和索引:
最後將匯入的臨時表交換到分割槽表中
alter table t_rangetest exchange partitionobject_id_30000 with table tmp_ts_range_30000
including indexes with validation;
最後查詢
臨時表中已經沒記錄了
分割槽表正常了
分割槽表的資訊也是ok的
Oracle表空間 表
表 table 表空間是對儲存系統檔案 使用者資訊等資料的乙個空間。oracle表空間屬於oracle中的儲存結構,是由資料檔案組成,乙個資料庫例項可以有n個表空間,每個資料庫至少有乙個表空間 system表空間 乙個表空間下可以有n張表。可以通過表空間來實現對oracle的調優 oracle資料庫...
Oracle 表空間和臨時表空間
表空間 此空間是用來進行資料儲存的 表 function 儲存過程等 所以是實際物理儲存區域。臨時表空間 主要用途是在資料庫進行排序運算 如建立索引 order by及group by distinct union intersect minus sort merge及join analyze命令 ...
oracle表空間的空間管理
表空間 tablespace 為資料庫提供使用空間的邏輯結構,其對應物理結構是資料檔案,乙個表空間可以包含多個資料檔案.本地管理表空間 locally managed tablespace簡稱lmt 8i以後出現的一種新的表空間的管理模式,通過本地位圖來管理表空間的空間使用。字典管理表空間 dict...