僅僅是把一個表得資料復制到另一個表,emp表有幾十億得資料,現在想將2017年得資料用一張表存盤,2018年用一張表,僅僅用sql跑得話很浪費時間,想用存盤程序在后臺自己跑。
create table emp_20190731 as select * from emp
想把上面得陳述句用存盤程序在后臺實作,可自己沒學過,百度是沒實作自己想要得
求助一下。
uj5u.com熱心網友回復:
那你得好好看一下存盤程序的創建及使用。往年的資料如果不更新的話,直接用sql加上時間限定條件,執行很快的。今年的資料可以放到存盤程序中,再用job通過日志的方式控制增量,這樣可以實作自動添加和更新,記得加索引,不然要崩潰uj5u.com熱心網友回復:
完全沒必要用存盤程序。1、可以直接shell 后臺跑 eg
export ORACLE_SID=ORCL
vi m_t.sh
sqlplus -s / as sysdba <<EOF >> ./logfile
set serveroutput on;
set timing on;
alter session set nls_date_format='yyyymmdd HH24:MI:SS';
select sysdate from dual;
create table emp_20190731 nologging as select * /*+ parallel 4*/ from emp where id=2017;
select sysdate from dual;
create table emp_20190831 nologging as select * /*+ parallel 4*/ from emp where id=2018;
select sysdate from dual;
prompt get count from emp_20190731 emp_20190831;
select count(1) cnt, 'emp_20190731' as tname from emp_20190731;
select count(1) cnt, 'emp_20190831' as tname from emp_20190831;
select sysdate from dual;
exit;
EOF
sh m_t.sh >> /dev/null 2>&1 &
2、
也可以寫存盤程序
create or replace procedure bak_t (bak_name in varchar2, t_name in varchar2 , t_where in varchar2 )
as
v_sql varvhar2(2000);
begin
v_sql := 'create table '||bak_name||' nologging as select /*+ parallel 4*/ * from '||t_name||' where id= '||t_where;
dbms_output.put_line (v_sql);
execute immediate v_sql ;
end;
呼叫 plsql
call bak_t ('bak_emp_2017','emp',2017);
或者
begin
bak_t ('bak_emp_2017','emp',2017);
end;
sqlplus 中可以直接用
exec bak_t ('bak_emp_2017','emp',2017);
也可以用begin end 呼叫。
3、建議用 shell 加proc
uj5u.com熱心網友回復:
首先建表emp_2017,結構要和emp完全一致。如果不一致,就要將下邊代碼塊中的星號改成需要的內容。MOD(N,10) = 0,這里的N,是要emp里一個分別比較均勻的數字型別欄位,不能有空值。10是需要分成的行程數,0是第一個行程,還可以改成1,就是第二個行程……,一直到9,就是第十個行程。
DECLARE
i NUMBER;
cr emp%rowtype;
CURSOR userrows IS
SELECT
*
FROM
emp
WHERE
year = '2017'
AND
mod(n,10) = 0;
BEGIN
i := 0;
FOR c IN cr LOOP
INSERT INTO emp_2017 ( column_name1,column_name2,column_name3…… ) VALUES (
c.column_name1,
c.column_name2,
c.column_name3……
);
IF
i >= 1000
THEN
i := 0;
COMMIT;
END IF;
i := i + 1;
END LOOP;
COMMIT;
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/34726.html
標籤:高級技術
上一篇:oracle資料庫被入侵
