用Shell写的一段PostgreSQL到Oracle的数据传输脚本

只为实现功能,不求效率和可管理性等等。

代码如下:包含有注释和讲解

#!/bin/bash

. /home/testuser/.bash_profile

# 定义异常通知邮件组

TO_MAIL=” ”

# 判断是否已经在运行

test -f /home/testuser/script/run/target_table.run

# 退出代码和超时通知代码

if [ $? -eq 0 ]; then

SYNC_TIME_CHECK=”‘`ls -1 -l –time-style=+%F\ %T /home/testuser/script/run/target_table.run|awk ‘{print $6″ “$7}’`'”

psql -t -h /tmp -p 1921 -U testuser -d edb <<EOF 1>/home/testuser/script/target_table.timeoutstats 2>&1

select ’sync_time_out’ where now()-$SYNC_TIME_CHECK::timestamp without time zone>interval ‘1 hour’;

EOF

TIME_OUT_ERROR=0

TIME_OUT_ERROR=`grep -c “sync_time_out” /home/testuser/script/target_table.timeoutstats`

if [ $TIME_OUT_ERROR -ne 0 ]; then

echo -e “`cat /home/testuser/script/target_table.timeoutstats`\n\n`date +%F%T`\n sync target_table timeout!\n\nPlease Call Digoal!\n”|mutt -s “Sync Target Table timeout!” $TO_MAIL

echo -e “sync timeout”

fi

exit 3

fi

# 生成在运行标记

touch /home/testuser/script/run/target_table.run

# 获取最大ID

MAX_T=”‘`psql -t -h /tmp -p 1921 -U testuser -d edb -c “select max(id) from -e ’s/ //g’`'”

# 同步代码

psql -t -h /tmp -p 1921 -U testuser -d edb <<EOF 1>/home/testuser/script/target_table.stats 2>&1

begin;

select ’start sync: ‘||now();

delete from 

where

id < $MAX_T ;

insert into 

(col1,col2,col3,col4,col5,col6)

select

col1,col2,col3,col4,col5,col6

from 

where

id > ${MAX_T}

;

insert into 

(col1,col2,col3,col4,col5,col6)

select

col1,col2,col3,col4,col5,col6

from 

where

id > ${MAX_T} ;

commit;

EOF

# 异常捕获发送,异常的话不删除/home/testuser/script/run/target_table.run,防止后续数据出错

ERROR=0

ERROR=`grep -c “ROLLBACK” /home/testuser/script/target_table.stats`

if [ $ERROR -ne 0 ]; then

echo -e “`cat /home/testuser/script/target_table.stats`\n\n`date +%F%T`\n sync target data error!\n\nPlease Call Digoal!\n”|mutt -s “Sync target data error!” $TO_MAIL

echo -e “sync error”

exit 2

fi

# 删除运行标记

sleep 10

rm -f /home/testuser/script/run/target_table.run

#代码完

几个问题补充:

从postgresql到oracle使用的EDB DBLINK,时间字段不能进行传输,甚至连default值都用不了,报ORA-01861错误

01861, 00000, “literal does not match format string”

// *Cause:  Literals in the input must be the same length as literals in

//  the format string (with the exception of leading whitespace).  If the

//  “FX” modifier has been toggled on, the literal must match exactly,

//  with no extra whitespace.

// *Action: Correct the format string to match the literal.

解决办法是把时间改成char(14)直接写成字符。

还有一种折中的解决办法是在target端,也就是ORACLE端使用行触发器before for each row,生成一个sysdate。

时间: 2025-01-31 05:50:08

用Shell写的一段PostgreSQL到Oracle的数据传输脚本的相关文章

char-大侠快看我写的一小段代码

问题描述 大侠快看我写的一小段代码 #include #include //搜索x44x65x73x63x72x69x70x74x69x6Fx6E 偏移地址 DWORD ReadFile(char* str) { char data[11] = {0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6F, 0x6E}; HANDLE pfile = CreateFile(str,GENERIC_READ,0,NULL,OPEN_EXIS

我写的这段代码是不是有问题,都没效果。就是鼠标移入移出让它高亮。

问题描述 我写的这段代码是不是有问题,都没效果.就是鼠标移入移出让它高亮. 代码如图所示,我想实现鼠标移到li的时候把它的样式改为active,其实就是高亮.然后移除li的时候把li去除.悬赏的币不多,请见谅!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 解决方案 解决方案二: 上面Js中多了个分号,我把分号去掉,结果也一样,样式用的是boostrap 解决方案三: http://m.blog.csdn.net/article/details?id=50

这是我写的一段c语言程序,做了很久只能做到这样

问题描述 这是我写的一段c语言程序,做了很久只能做到这样 #include #include #include #define N 8 main() { int i,n=0,c=0; int a[N]; srand(time(NULL)); for(i=0;i<N;i++) { a[i]=rand()%2; printf("%8d%8dn",i,a[i]); } printf("n"); while(c<8) { for(i=1;i<N;i++)

spring jdbc-用spring mvc模式写了一段代码,但一直都会提示404,不知道错误在哪,求指点。

问题描述 用spring mvc模式写了一段代码,但一直都会提示404,不知道错误在哪,求指点. 用springmvc 和spring jdbc谢了一段代码,但一直提示404错误,不知道该如何解决,已经困扰很多天了.(Dao中只写了增加,没有写service,只是想试一下能不能连接到数据库,customer只有id和name) web.xml文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <web-ap

数据库-我写了一段mysql查询,但是两段order by的顺序却不一样,求助

问题描述 我写了一段mysql查询,但是两段order by的顺序却不一样,求助 第一段是不分页的 select T.ID ,TName.Name ,(select Count(UsingT.TID) from UsingT where UsingT.TID=T.ID) as LinkCount from T inner join TName on T.TNameID = TName.ID and TName.Name like @tname order by Name asc; <=重点在这里

源代码-按书上写了一段java捕获异常的代码,不知道问题出在哪里

问题描述 按书上写了一段java捕获异常的代码,不知道问题出在哪里 源代码如下: package com.Sixping.Ncre; public class Rethrow { public static void rt() throws Exception {//定义方法,抛出Exception类的异常 System.out.println("old exception in rt()"); throw new Exception("thrown from rt()&qu

源代码-按书上写了一段代码java异常处理,不知道为什么不能运行,求大神指教

问题描述 按书上写了一段代码java异常处理,不知道为什么不能运行,求大神指教 源代码如下: package com.Sixping.Ncre; import java.io.*; public class ExceptionCatch { public static void main(String[] args) { try { FileNotFoundException fis = new FileNotFoundException("text"); System.out.pri

javascript-看看我写额这段jquery有没有问题

问题描述 看看我写额这段jquery有没有问题 var sFood1 = $('#food1'), sFood2 = $('#food2'), sAge = $('#age'), sSex = $('#sex') //去掉第一个名列和最后一个操作列 , tdSums = $('#trSum td:gt(0)').not(':last') , tdAges = $('#trAge td:gt(0)').not(':last') , tdDiffs = $('#trDiff td:gt(0)').n

《卸甲笔记》-PostgreSQL和Oracle的数据类型的对比系列三:时间类型

PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来越多.数据库之间数据迁移的时候,首先遇到的,并且也是最重要的,就是数据类型之间的转换.下面根据自己的理解和测试,写了一些数据类型之间的差异以及迁移时的注意事项的文章,不足之处,尚请多多指教. 日期时间类型 Oracle日期时间类型有两类,一类是日期时间类型,包括Date, Timestamp wit