日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

背景:項目中遇到的問題,需要二區兩臺數據庫之間同步一些表,以及導出sql文件同步至三區數據庫。

1 SQL文件目錄

新建SQL文件生成的目錄D:mptmsudataDNLTBDIR。

二區數據庫中執行下列語句:

create or replace directory DNL_TB_DIR
as 'D:mptmsudataDNLTBDIR';

2 數據庫修改

1)新建二區數據庫服務器到二區數據庫服務器的數據庫DATABASE LINK文件。

二區數據庫中執行下列語句:

create public database link XQDNJL
connect to YPTMS
using '192.168.10.8/mptmsu';

2)二區數據庫服務器新建表DNL_TBJL。

二區數據庫中執行下列語句:

-- Create table
create table DNL_TBJL
(
id VARCHAR2(25) not null,
tables VARCHAR2(25) not null,
czlx VARCHAR2(25),
sql VARCHAR2(2000) not null,
time DATE not null,
bak VARCHAR2(128) not null
)
tablespace MPTMSU
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column DNL_TBJL.id
is 'ID';
comment on column DNL_TBJL.tables
is '同步表名';
comment on column DNL_TBJL.czlx
is '操作類型';
comment on column DNL_TBJL.sql
is 'SQL內容';
comment on column DNL_TBJL.time
is '操作時間';

3 觸發器

在二區數據庫服務器說新建相關表的觸發器,觸發器實現的功能是東區2區向西區直接通過DBLINK直接執行;東區2區向東區3區通過生成SQL文件到D:mptmsudataDNLTBDIR目錄下;觸發器的每次操作都記錄到表格DNL_TBJL(id, tables,czlx, SQL, TIME, BAK)內。

下面以AEMTINFO表為例,具體的觸發器代碼如下:

create or replace trigger SYN_AEMTINFO
after insert or update or delete on AEMTINFO
for each row
/*------------------------------------------------------------------
功 能:東區2區向西區、東區3區傳送數據庫變化
功能說明:東區2區向西區直接通過DBLINK直接執行;東區2區向東區3區通過生成SQL文件到
D:mptmsudataDNLTBDIR目錄下;觸發器的每次操作都記錄到表格DNL_TBJL
(id, tables,czlx, SQL, TIME, BAK)內。
-------------------------------------------------------------*/
declare
integrity_error exception;
errno integer;
errmsg char(200);
tmp varchar2(1000);
tmpval varchar2(1000);
val varchar2(4000);
id varchar2(20);
dnltb utl_file.file_type;
begin
if inserting then
insert into AEMTINFO@XQDNJL
(EMTID,
SID,
SNAME,
STIME,
ETIME,
INTERVAL,
EARGS,
ADDDATE,
REMARK,
FLAG)
values (:NEW.EMTID, :NEW.SID, :NEW.SNAME, :NEW.STIME, :NEW.ETIME, :NEW.INTERVAL, :NEW.EARGS, :NEW.ADDDATE, :NEW.REMARK, :NEW.FLAG);
select 'insert into AEMTINFO (EMTID,SID,SNAME,STIME,ETIME,INTERVAL,EARGS,ADDDATE,REMARK,FLAG)
values ('
||''''||:NEW.EMTID||''''||','
||''''||:NEW.SID||''''||','
||''''||:NEW.SNAME||''''||','
||'to_date('||''''||to_char(:NEW.STIME,'yyyy-mm-dd hh24:mi:ss')||''''||','||'''yyyy-mm-dd hh24:mi:ss'''||'),'
||'to_date('||''''||to_char(:NEW.ETIME,'yyyy-mm-dd hh24:mi:ss')||''''||','||'''yyyy-mm-dd hh24:mi:ss'''||'),'
||''''||:NEW.INTERVAL||''''||','
||''''||:NEW.EARGS||''''||','
||'to_date('||''''||to_char(:NEW.ADDDATE,'yyyy-mm-dd hh24:mi:ss')||''''||','||'''yyyy-mm-dd hh24:mi:ss'''||'),'
||''''||:NEW.REMARK||''''||','
||''''||:NEW.FLAG||''''||');'
into val
from dual;
select (select to_char(sysdate, 'yyyyMMddHH24miss') from dual) ||
lpad(DNL_TBXL.nextval, 3, '0')
into id
from dual;
insert into DNL_TBJL
(id, tables,czlx, SQL, TIME, BAK)
values
(id,'AEMTINFO', 'INSET', val, sysdate, id);
dnltb := utl_file.fopen('DNL_TB_DIR', 'INSET-'||'AEMTINFO-'||id || '.sql', 'w');
utl_file.put_line(dnltb, val);
utl_file.put_line(dnltb, 'commit;');
utl_file.put_line(dnltb, 'exit;');
utl_file.fclose(dnltb);
elsif updating then
update AEMTINFO@XQDNJL
set EMTID = :NEW.EMTID,
SID = :NEW.SID,
SNAME = :NEW.SNAME,
STIME = :NEW.STIME,
ETIME = :NEW.ETIME,
INTERVAL = :NEW.INTERVAL,
EARGS = :NEW.EARGS,
ADDDATE = :NEW.ADDDATE,
REMARK = :NEW.REMARK,
FLAG = :NEW.FLAG
where emtid = :OLD.emtid;
select 'update AEMTINFO set '
||'EMTID = '||''''||:NEW.EMTID||''''||','
||'SID = '||''''||:NEW.SID||''''||','
||'SNAME = '||''''||:NEW.SNAME||''''||','
||'STIME = '||'to_date('||''''||to_char(:NEW.STIME,'yyyy-mm-dd hh24:mi:ss')||''''||','||'''yyyy-mm-dd hh24:mi:ss'''||'),'
||'ETIME = '||'to_date('||''''||to_char(:NEW.ETIME,'yyyy-mm-dd hh24:mi:ss')||''''||','||'''yyyy-mm-dd hh24:mi:ss'''||'),'
||'INTERVAL = '||''''||:NEW.INTERVAL||''''||','
||'EARGS = '||''''||:NEW.EARGS||''''||','
||'ADDDATE = '||'to_date('||''''||to_char(:NEW.ADDDATE,'yyyy-mm-dd hh24:mi:ss')||''''||','||'''yyyy-mm-dd hh24:mi:ss'''||'),'
||'REMARK = '||''''||:NEW.REMARK||''''||','
||'FLAG = '||''''||:NEW.FLAG||''''|| 'where emtid = '||:OLD.emtid||';'
into val
from DUAL;
select (select to_char(sysdate, 'yyyyMMddHH24miss') from dual) ||
lpad(DNL_TBXL.nextval, 3, '0')
into id
from dual;
insert into DNL_TBJL
(id, tables,czlx, SQL, TIME, BAK)
values
(id,'AEMTINFO', 'UPDATE', val, sysdate, id);
dnltb := utl_file.fopen('DNL_TB_DIR', 'UPDATE-'||'AEMTINFO-'||id || '.sql', 'w');
utl_file.put_line(dnltb, val);
utl_file.put_line(dnltb, 'commit;');
utl_file.put_line(dnltb, 'exit;');
utl_file.fclose(dnltb);
elsif deleting then
delete from AEMTINFO@XQDNJL where emtid = :OLD.emtid;
tmp := :OLD.emtid;
tmpval := 'delete from AEMTINFO where emtid=';
val := concat(tmpval, tmp || ';');
select (select to_char(sysdate, 'yyyyMMddHH24miss') from dual) ||
lpad(DNL_TBXL.nextval, 3, '0')
into id
from dual;
insert into DNL_TBJL
(id, tables,czlx, SQL, TIME, BAK)
values
(id,'AEMTINFO', 'DELETE', val, sysdate, id);
dnltb := utl_file.fopen('DNL_TB_DIR', 'DELETE-'||'AEMTINFO-'||id || '.sql', 'w');
utl_file.put_line(dnltb, val);
utl_file.put_line(dnltb, 'commit;');
utl_file.put_line(dnltb, 'exit;');
utl_file.fclose(dnltb);
end if;
exception
when integrity_error then
raise_Application_error(errno, errmsg);

end;

4 sql文件入庫批處理

通過windows系統自帶的計劃任務執行下面批處理實現數據入庫

1)三區區數據庫服務器新建表DNL_SQLJL。

三區數據庫中執行下列語句:

-- Create table
create table DNL_SQLJL
(
id VARCHAR2(25),
tables VARCHAR2(25),
czlx VARCHAR2(25),
sqlml VARCHAR2(2000),
sql VARCHAR2(2000),
time DATE,
bak VARCHAR2(128)
)
tablespace MPTMSU
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
-- Add comments to the columns
comment on column DNL_SQLJL.id
is 'ID';
comment on column DNL_SQLJL.tables
is '同步表名';
comment on column DNL_SQLJL.czlx
is '操作類型';
comment on column DNL_SQLJL.sqlml
is 'SQL文件目錄';
comment on column DNL_SQLJL.sql
is 'SQL內容';
comment on column DNL_SQLJL.time
is '操作時間';

2)三區區數據庫服務器新建計劃任務定期執行DQ3QRK-ZXWJ.bat批處理。

3)DQ3QRK-ZXWJ.bat批處理調用DQ3QRK-ZXSQL.bat來執行入庫操作。

DQ3QRK-ZXWJ.bat語句如下:

@echo off
REM
set Log=logDQ3QRKSQL-%date:~0,4%.%date:~5,2%.%date:~8,2%.log
REM
rem 第一步
dir D:mptmsudataDNLTBDIR* /b /a|findstr ".sql>" >D:mptmsudataDNLTBDIRDQ3QRKWJ.TXT
rem
cd /d %~dp0 && for /f "tokens=1-3 delims=-. " %%i in (D:mptmsudataDNLTBDIRDQ3QRKWJ.TXT) do %~dp0DQ3QRK-ZXSQL.bat %%i %%j %%k >>%Log% 2>&1
pause
exit

DQ3QRK-ZXSQL.bat語句如下:

@echo off
REM
REM set Log=logDQ3QRKSQL-%date:~0,4%.%date:~5,2%.%date:~8,2%.log
set RQ=%date:~0,4%%date:~5,2%
set SQLWJ=D:mptmsudataDNLTBDIR%1-%2-%3.sql
set SQLJL=D:mptmsudataDNLTBDIRsqljl.sql
REM
sqlplus -s yptms/yptms@mptmsu @%SQLWJ%
for /f "tokens=1 delims=;" %%i in (%SQLWJ%) do (set tmpsql=%%i
goto aa)
:aa
echo insert into DNL_SQLJL (ID,TABLES,CZLX,SQLML,SQL,TIME) values('%3','%2','%1','D:mptmsudataDNLTBDIR%RQ%%1-%2-%3.sql','%tmpsql%',SYSDATE); >%SQLJL%
echo commit; >>%SQLJL%
echo exit; >>%SQLJL%
sqlplus -s yptms/yptms@mptmsu @D:mptmsudataDNLTBDIRsqljl.sql
del /f /q D:mptmsudataDNLTBDIRsqljl.sql
IF NOT EXIST D:mptmsudataDNLTBDIR%RQ% md D:mptmsudataDNLTBDIR%RQ%
move /Y %SQLWJ% D:mptmsudataDNLTBDIR%RQ%

分享到:
標簽:Oracle
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定