大資料量的兩個表資料複製的一些經驗總結

2021-06-22 20:48:03 字數 3372 閱讀 3371

1.如果兩個表的資料結構一樣,可以考慮很多種方式:

(1)create table as select * from tbl_name;

(3)引入指令碼:      

declare

maxnum number defult 5000;

cursorcuris

select*fromaa;--定義游標

type recistableofaa%rowtype;--定義型別

recs rec;

begin

opencur;--開啟游標

loop--迴圈條件

exitwhencur%notfound;--游標結束條件

fetchcur bulk collect--取游標裡的值

intorecs limit maxnum;--提交條件,每5000條提交

forall iin1 .. recs.count--這個是個計數器,用來確保提交的條數,也是迴圈

insertintobbvaluesrecs (i);--插入目標表

commit;--提交

endloop;--停止迴圈

closecur;--關閉游標1,

end;

這種方式適用於要兩個表結構一樣的情況。

2.兩個表結構不一樣,方法也是類似的:

3.

create or replace procedure "largedata_insert" (ip_table_name   in varchar2, --目標表

ip_table_column in varchar2, --目標字段

ip_table_select in varchar2, --select 查詢語句

return_result   out number --返回的結果1,表示成功,0表示失敗

) as

--適合大資料量的插入模板  create templates by chenzhoumin 20110614

runtime number;--執行總次數

i       number;--當前行數

amount  number;--總行數

s_sql   varchar2(10000);--sql語句

e_sql   varchar2(10000);--執行sql語句

countnumber number;--一次插入的資料量

begin

--set serveroutput on size 20000000000000

countnumber := 10000;

return_result := 0; --開始初始化為0

--核必邏輯內容,可根據具體的業務邏輯來定義,統計資料總行數

s_sql := 'select count(1) from (' || ip_table_select || ')';

execute immediate s_sql

into amount;

--每100萬提交一次

runtime := amount mod countnumber;

if (runtime > 0) then

runtime := 1 + trunc(amount / countnumber);

end if;

if (runtime = 0) then

runtime := 0 + trunc(amount / countnumber);

end if;

for i in 1 .. runtime loop

e_sql := 'insert into '||ip_table_name ||'

('||ip_table_column ||')

select '|| ip_table_column ||'

from

(select selectsec.*, rownum rownumtype

from ('|| ip_table_select ||') selectsec

where rownum <= '|| i * countnumber ||')

where rownumtype > '||(i - 1) * countnumber;

dbms_output.enable(99999999999999);

dbms_output.put_line(e_sql);

execute immediate e_sql;

--提交

commit;

end loop;

return_result := 1;

return;

exception

when others then

return_result := 0;

raise;

dbms_output.enable(99999999999999);

dbms_output.put_line('結束');

return;

end;

其實這個儲存過程當查詢到資料千萬以後也是挺慢的。

兩張大資料量表大資料量的比較

rdd兩張大資料量表大資料量的比較 大批量資料驗證的範圍。核心唯一驗證。範圍內 單位範圍內的所有人員快取。比較匯入的表內的人員是否在這個人員快取。如果不在那就顯示錯誤提示。匯入的人員就不會超過這個範圍也就限制了運算元據的範圍。對於儲存表,驗證當月這個單位內的所有記錄裡是否已經存在同規則的記錄。這個人...

大資料量的建表 導資料

跨機器轉移資料檔案 scp 在linux伺服器之間複製檔案和目錄,cp只能在本機複製,不可以跨伺服器 scp r 20170907.tar.gz username ip export 解壓 tar zxvf 20170907.tar.gz 或者 將電腦本地檔案在跨集群間hdfs傳檔案 建立hdfs資...

大資料量的分表方法

以下是幾種常見的分表演算法。1.按自然時間來分表 分庫 2.按數字型別hash分表 分庫 如果我們要儲存使用者的資訊,我們應用的註冊量很大,我們用單錶是不能滿足儲存需求的,那麼我們就可以用使用者的編號來進行hash,常見的是用取餘操作,如果我們要分30張表來儲存使用者的資訊,那麼使用者編號為1的使用...