用資料交換方式把錶資料遷移到分割槽表例項

2021-05-25 08:00:04 字數 3938 閱讀 5073

--把kingstar.emp表的資料遷移到kingstar.emp_partition分割槽表中

--建立資料來源表結構  

drop table kingstar.emp; 

create table kingstar.emp as select * from scott.emp where 1=2; 

alter table kingstar.emp 

add constraint pk_emp primary key (empno) 

using index 

tablespace users 

pctfree 10 

initrans 2 

maxtrans 255 

storage 

(  initial 64k 

minextents 1 

maxextents unlimited 

); 

truncate table kingstar.emp; 

--插入資料   

insert into kingstar.emp values (1,』 蔡浪』,』d』,0,to_date(』20080801 12:22:13』,』yyyymmdd hh24:mi:ss』),1000,1000,10); 

insert into kingstar.emp values (2,』 蔡星』,』d』,1,to_date(』20080901 13:23:12』,』yyyymmdd hh24:mi:ss』),5000,5000,10); 

commit; 

--檢視遷移表中的資料    

select * from kingstar.emp; 

1 1  蔡浪 d 0 2008-8-1 12:22:13 1000.00 1000.00 10 

2 2  蔡星 d 1 2008-9-1 13:23:12 5000.00 5000.00 10 

--建立分割槽表 結構與kingstar.emp一樣

-- create table  

create table kingstar.emp_partition 

(  empno number(4), 

ename varchar2(10), 

job varchar2(9), 

mgr number(4), 

hiredate date, 

sal number(7,2), 

comm number(7,2), 

deptno number(2) 

)  tablespace kingstar 

partition by range(hiredate) 

(partition emp_max values less than(maxvalue))--由於交換資料時需指定分割槽,所以這裡不做詳細分割槽,資料交換完後進行分割槽的拆分  ; 

--進行資料交換

alter table kingstar.emp_partition exchange partition emp_max with table kingstar.emp; 

--查分割槽表資料 

select * from kingstar.emp_partition; 

1 1  蔡浪 d 0 2008-8-1 12:22:13 1000.00 1000.00 10 

2 2  蔡星 d 1 2008-9-1 13:23:12 5000.00 5000.00 10 

--查源表資料已被清空  

select * from kingstar.emp; 

--往源表插資料,索引失效 

insert into kingstar.emp values (1,』 蔡浪』,』d』,0,to_date(』20080801 12:22:13』,』yyyymmdd hh24:mi:ss』),1000,1000,10); 

insert into kingstar.emp values (2,』 蔡星』,』d』,1,to_date(』20080901 13:23:12』,』yyyymmdd hh24:mi:ss』),5000,5000,10); 

第 1 行出現錯誤: 

ora-01502: 索引 』kingstar.pk_emp』 或這類索引的分割槽處於不可用狀態 

--索引重建

alter index kingstar.pk_emp rebuild ; 

--再插入資料可以完成  

insert into kingstar.emp values (1,』 蔡浪』,』d』,0,to_date(』20080801 12:22:13』,』yyyymmdd hh24:mi:ss』),1000,1000,10); 

insert into kingstar.emp values (2,』 蔡星』,』d』,1,to_date(』20080901 13:23:12』,』yyyymmdd hh24:mi:ss』),5000,5000,10); 

--查詢資料    

select * from kingstar.emp; 

1 1  蔡浪 d 0 2008-8-1 12:22:13 1000.00 1000.00 10 

2 2  蔡星 d 1 2008-9-1 13:23:12 5000.00 5000.00 10 

--拆分分割槽,只能將乙個分割槽插成兩個分割槽,並且指定插分後的第乙個分割槽的內容如to_date(』200809』,』yyyymm』)就是該分割槽emp_200808存放200808這個月資料

--也就是相當於定義分割槽時的 partition emp_200808 values less then(to_date(』200809』,』yyyymm』))

-- into (partition emp_200810,partition emp_maxes); 指定拆分出來的less than 的分割槽名字和maxvalue的分割槽名字

alter table kingstar.emp_partition split partition emp_max at(to_date(』200809』,』yyyymm』)) into (partition emp_200808,partition emp_max); 

alter table kingstar.emp_partition split partition emp_max at(to_date(』200810』,』yyyymm』)) into (partition emp_200809,partition emp_max); 

alter table kingstar.emp_partition split partition emp_max at(to_date(』200811』,』yyyymm』)) into (partition emp_200810,partition emp_upper); 

alter table kingstar.emp_partition split partition emp_upper at(to_date(』200812』,』yyyymm』)) into (partition emp_200811,partition emp_max); 

--查詢分割槽資料  

select * from  kingstar.emp_partition partition(emp_200808); 

1 1  蔡浪 d 0 2008-8-1 12:22:13 1000.00 1000.00 10 

--修改分割槽名字

alter table kingstar.emp_partition rename partition emp_max to emp_upper;

如何把單庫資料遷移到分庫分表?

面試官 如何把單個資料庫的資料遷移到分庫分表裡面?面試官心理剖析 主要是看你在生產環境弄過?沒弄過的話看你有沒有思考過這個問題?因為在做分庫分表的時候肯定會遇到這個問題。回答 假設你的分庫分表中介軟體已經選好了,分庫分表的資料庫都已經建好了。分庫分表的功能也都已經測試通過了,可以上線了。資料遷移的系...

併發 六 用Exchanger實現資料交換

在多執行緒程式的設計中,最難處理就是各執行緒之間的耦合關係,所以jdk提供了很多用於解耦的類,例如blockingqueue blockingdeque等,這些類的特點是既可以適用於消費者 生產者模式,還可以適用於消費者與生產者混合模式。今天介紹的exchanger除了在資料交換方面表現得非常優秀之...

系統間資料交換的5種方式

工作中常會遇到系統對接,交換資料,將用過的對接資料交換方式簡要回顧一下。一,原始的方式,直接檔案交換 通過定義csv,xml,json等檔案,一方支援資料匯出,另一方支援資料匯入。最開始是人手工完成,做的好點的可以通過程式自動完成,比如資料提供方自動匯出後放入某個目錄,資料接收方定時訪問目錄獲取資料...