用shell帮助解决ORA问题

今天碰到一个设计的严重问题,由于使用了外部文件来和sqlplus交互

sql大体结构如下

select xxxxx from xxxxx where table_name in ( "解析外部文件“)

在测试环境中没有什么问题,当某个用户表比较多的时候,就开始报如下的错误

*

ERROR at line 1003:

ORA-01795: maximum number of expressions in a list is 1000

********************************************************************************

因为需要,一定要解析这个外部文件,所以只能从别的方面进行考虑进行解决。

我加了了分页的改进,没500条记录分为一页,这样循环调用就可以生成最终的文件了。

v_page_size=500

v_page=1

v_start=1

v_len=`expr ${v_page} \* ${v_page_size}`

minus_file_len=`cat ${minus_list}|wc -l` 

#pages_flag=`expr ${minus_file_len} / ${v_page_size}`

pages_float=`echo "scale=2 ; ${minus_file_len} / 500"|bc`

pages_num=`echo '' | awk -v a=$pages_float '{print int(a+0.999)}'`

--上面的这一段基本就是要实现oracle中ceil的部分,比如有700条记录,500条一页,这样700/500就是1.4,根据需要,需要返回2.

然后开始循环,控制下标,

while [ ${v_page} -le  ${pages_num} ]

do 

echo ...............................

echo 'from Source :' $S_DB_STR

echo  from:$v_start

echo end:$v_len

echo page no: $v_page

echo ...............................

sed -n "${v_start},${v_len}p" ${minus_list} > $SCHEMA_DIR/table_list.log

minus_tab_list=`cat ${SCHEMA_DIR}/table_list._${v_page}.log|awk '{print "'\''" $1 "'\'',"}'`

get_tab_details  $S_DB_CONN_STR    --这个部分是调用sqlplus的部分,传入连接串

v_start=`expr ${v_page} \* ${v_page_size} + 1`

#v_page=$[ $v_page + 1 ]

v_page=`expr ${v_page} + 1`

v_len=`expr ${v_page} \* ${v_page_size}`

done

输出结果如下:

from:1

end:500

page no: 1

...............................

数据内容

from:501

end:1000

page no: 2

...............................

xxx

这样不管数据量有多大,都可以灵活的进行拆分。

时间: 2024-10-26 06:26:59

用shell帮助解决ORA问题的相关文章

用shell命令解决XAMPP数据库导入文件限制

经常折腾 WordPress 的朋友通常都会搭建一个本地环境,调试修改完了再发布到线上,至于如何在本地安装 WordPress,这个可以参考我之前写的一篇<轻松10步本地安装WordPress(图)>文章,这篇文章中推荐使用 XAMPP 这个集 Apache + MySQL + PHP 于一身的套装软件,今天的话题同样也是围绕 XAMPP. 为了真实还原线上环境,我们会把线上的数据库备份下来,用 XAMPP 的 phpMyAdmin 导入到本地,当然,如果数据量不大是一切正常的,但如果终于有一

SSRF导致命令执行可反弹Shell漏洞解决办法

迅雷官方论坛(discuz)被乌云平台检测出一个SSRF漏洞,攻击者通过SSRF成功反弹shell,漏洞存在于一个远程图片下载的接口,没有对url进行有效的合法性检测.今天临时解决了这个漏洞,记录一下修复方法. 漏洞还没有公开,现在是凭密码才能访问. 这个存在漏洞的url地址是/forum.php?mod=ajax&action=downremoteimg&message= 攻击者请求这个地址即可进行SSRF攻击: /forum.php?mod=ajax&action=downre

Mongo shell:最强大的 MongoDB 管理工具

云数据库 MongoDB 版 基于飞天分布式系统和高性能存储,提供三节点副本集的高可用架构,容灾切换,故障迁移完全透明化.并提供专业的数据库在线扩容.备份回滚.性能优化等解决方案. 了解更多 Mongo shell 是 MongoDB 的命令行管理工具,功能非常强大,最近社区很多人咨询的一些问题,比如 命令行看 json 格式比较吃力? 如何确定Secondary节点同步是否跟上? 怎么查看DB.集合使用了多少空间? 能否在shell 脚本里调用Mongo shell 怎么执行 MongoDB

Shell实现文本去重并操持原有顺序_linux shell

简单来说,这个技巧对应的是如下一种场景 假设有文本如下 复制代码 代码如下: cccc aaaa bbbb dddd bbbb cccc aaaa 现在需要对它进行去重处理,这个很简单,sort -u就可以搞定,但是如果我希望保持文本原有的顺序,比如这里有两个aaaa,我只是希望去掉第二个aaaa,而第一个aaaa在bbbb的前面,去重后仍旧要在它前面,所以我期望的输出结果是 复制代码 代码如下: cccc aaaa bbbb dddd 当然,这个问题本身并不难,用C++或python写起来都很

VB.NET启动外部程序

程序 在启动外部应用程序时,我们通常使用Win32应用编程接口或者VB的Shell函数解决.现在,在.NET框架中有个System.Diagnostics.Process类,通过这个类进行这个操作,你会发现方便了很多. 在传统VB程序中,你可以使用Shell函数启动一个应用程序.当你传送一个数据文件名的时候,VB在相应应用程序中打开这个数据文件.你可以使用一个任选的windowstyle参数控制所启动的应用程序的窗口方式.例如,在VB6中,下面这行代码将启动默认的文本编辑器(通常是记事本)并打开

oracle10g升级补丁后无法启动实例

升级oracle10g,启动oracle时出现以下错误: ORA-00704: 引导程序进程失败 ORA-39700: 必须用 UPGRADE 选项打开数据库 网上搜索了一下,发现需要配置一下才能启动oracle. 步骤如下: 1.startup upgrade 启动数据库. 2.在sqlplus里执行catupgrd.sql脚本,这个脚本用于重建数据字典视图脚本. 3然后重启数据库后,再执行utlrp.sql脚本,这个脚本用于编译无效对象. 4再次重启数据库,解决ora 39700.

SQL 调优1

                                             SQL 调优1 调整的方法调整的工具内存组件调整  shared_pool data_buffer pga IO性能文件确定 调整的方法:调整的流程 架构设计 建模 程序 数据库 硬件调整  每次只调整一个地方 top     消耗资源最多 执行的次数最多 执行的时间最长     达到优化的目标就不优化了     优化的过程中一定不要产生新的性能问题 ----->熟悉别人的生产环境 调整的工具:1   v$

Linux运维人员需要掌握一门编程语言吗?

最近经常有同行的朋友或者Linux初学者问我:运维人员是否需要学一门语言,那么该学哪种语言呢? 对于这个问题,我分两个方面回答: 首先,在大数据.云计算发展迅猛的今天,系统运维人员如果不懂一点开发语言的话,确实会举步维艰.因为在运维工作中,业务系统的繁多,线上服务器规模很大时,只能通过写脚本的方式(自动化也是脚本一种哦)自动化完成,不然,如此重复和繁琐的工作,靠人力是无法负担的.所以,学习一门可以让运维工作批量完成的语言,就显得很重要了. 那么,应该学习一门什么语言呢? 对于Linux系统运维人

大数据时代 命令行技术过时了吗?

文章讲的是大数据时代 命令行技术过时了吗,随着<关于促进大数据发展的行动纲要>(简称"<纲要>")日前正式下发,<纲要>提出,大数据成为推动经济转型发展的新动力.大数据产业正在成为新的经济增长点,将对未来信息产业格局产生重要影响.伴着这股潮流,出现了N多新技术如Hadoop.Spark.Hive等等,与这些时髦的技术相比,命令行好像应该被放进博物馆被人参观的古董.命令行的历史可以追溯到几十年前,而大数据的崛起才短短几年,命令行技术在数据科学这样新的应