shell中使用重定向标准输入的错误处理一例
有如下shell程序demo.sh:#!/bin/shsqlplus -S demo/demo <<EOF select count(*) from dual;EXITEOF date[@more@]结果在linux下执行时,date命令没有执行,即在第二个EOF后就退出shell了。然后手工重写了这个shell(原来的是从另一个文件拷贝来的)demo2.sh,结果执行没有问题。接着用dos2unix命令转化该shell文件,希望是dos格式问题导致的,结果执行还是一样,date还是没有执行。怀疑是不可见字符导致的,将这两个shell文件传到windows下,用UltraEdit打开,比较其16进制,结果发现demo.sh下的EOF后多了空格'20',去除掉空格后执行就
Oracle下配置透明网关访问MS SQL SERVER
配置环境:Oracle服务器:192.168.1.218 Oracle9.2.0.1 for Windows SID:lrdbMS SQL服务器:192.168.1.244 SQL SERVER 2000 要访问的库:lfkf[@more@]1、安装 TRANSPARENT GATEWAY 选件(FOR MSSQL) 安装完成了以后有这样一个目录 $ORACLE_HOMEora90tg4msql2、 配置 LISTENER.ORA, 在SID_LIST_LISTENER下添加: (SID_DESC = (GLOBAL_DBNAME = sql2000) # 可自己命名 (PROGRAM = tg4msql) &n
删除重复数据的一种高效的方法
表demo是重复拷贝自dba_objects,有88万左右,不重复的是27323,没有索引方法一:delete from demo a where a.rowid <> (select max(rowid) from demo b where &nbs
linux下的automounter
使用mount命令挂接某个物理设备后,必须用umount卸载它。如果这个物理设备是个软盘或者活动硬盘,在没有umount的时候就移走了,系统向其写入的时候会出现问题。这个问题可以通过Automounter解决。如果automounted的目录在特定的时间段内没有被访问或者使用,将会自动unmount. [@more@]Automounter 的后台进程daemon叫做 autofs.他可以自动mount一个目录,也可以经过一定时间后自动umount它。相应的配置文件是/etc/auto.master 和 /etc/auto.misc同时要保持/misc 目录为空,linux会在这个目录上配置 automounts。1)/etc/auto.master将文件中
ORACLE临时表和SQLSERVER临时表异同
SQL SERVER临时表 临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。有本地和全局两种类型的临时表,二者在名称、可见性和可用性上均不相同。[@more@]本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft® SQL Server™ 2000 实例断开连接时被删除。全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。 例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安
谁制造了品牌盗版DVD?
奇观:盗版DVD贴防伪 老程是另一种游商。他背着一只鼓鼓囊囊的大挎包,每天定时出入于某些媒体、高校、研究所和国家机关。他的老顾客们每星期都等着老程的光顾,问一句:“今天带了什么新盘?” [@more@]老程会指着光盘包装上的一些标记诚恳地向老主顾们推荐: “这些都是品牌盗版!质量没问题。” “盗版?不就是质量差,老有马赛克,有时候放不出来,但便宜吗?”他的一位新顾客说。 这些评语,是上世纪90年代初从盗版软件开始,盗版给许多人留下的印象。但退伍军人老程说:“有些盗版现在很正规,形成了几种大品牌,丽晶、
使用PL/SQL模拟SQLLOAD的功能
原文出自Thomas Kyte《expert one-on-on》下面这个存储过程实现了从文件加载数据到数据库表的过程注意:要设置初始化参数utl_file_dir,在下面例子中其值为/home/oracle/work/data[@more@]首先创建一个错误信息表:create table badlog( errm varchar2(4000), data varchar2(4000) ); &nb
从mysql中将数据导入到oracle数据库中
这两天在折腾从mysql倒数据到oracle中,下面是一些步骤环境:Mysql 4 => Oracle 9.2.0.41、从Mysql中导出csv格式的数据[@more@]mysqldump -u mysql -p -T./ --fields-terminated-by=, --fields-enclosed-by=" mms send_done_log 输入密码:password 2、从导出的send_done_log.sql文件中找到建表语句,将其修改成符合oracle语法的建表语句 注意:Mysql导出空是"N",所以Mysql中可以为空的字段在oracle中都要改成varchar2类型3、使用
使用sqlldr装载数据的简单例子
创建测试表:create table DEMO( DEPTNO NUMBER(2) not null, DNAME VARCHAR2(14), LOC VARCHAR2(13));[@more@]例子1:装载定界数据类型为csv(Comma-Separated Value)C:sqlldr userid=scott/tiger control=load.ctl data=data.csv direct=yload.ctl内容如下:LOAD DATA  
imp时发生ora-01659的错误处理
今天从一个8i的库中导出一个大表,dump大约200M左右,然后导入9i的库,结果报错:[@more@]import done in ZHS16GBK character set and UTF8 NCHAR character setexport server uses US7ASCII NCHAR character set (possible ncharset conversion). importing SMS's objects into LINKRICH_MMSIMP-00017: following statement failed with ORACLE error 1659: "CREATE TABLE "T_MPN_OUTDATE" ("MOBILE" VARCHAR2(11), "HAPPEN_TIME" VARCHAR2" "(8), "PROV" VARCHAR2(5)
关于当前模式current_schema的切换问题
我们有时会在用户A下调用用户B下的存储过程,去用户B下的表的数据,但是这要求用户A拥有B下相关表的权限,并且在处理表时指定好表的模式通常的做法是在写存储过程时写出表的模式,例如:SCOTT.DEPT,但是有时存储过程没有这样写,而又不想改程序,还有一个方法就是在调用存储过程前设置current_schema[@more@]例如,把scott.dept的select权限授予hr用户 sqlplus scott/tigerSQL>grant select on dept to hr;然后用hr用户登录sqlplus hr/hrSQL> select count(*) from scott.dept; COUNT(*)---------- &
从Oracle9i中发送电子邮件
Oracle的包utl_smtp提供了从数据库中直接发送电子邮件的功能,这里介绍一下其使用方法网上找到的例子以及Oracle文档中的例子都没有提到authorized的问题,我的测试中使用的是163的免费信箱,发送时老是报错:ORA-20000: Failed to send mail due to the following error: ORA-29279: SMTP 永久性错误: 553 You are not authorized to send mail as <MAIL FROM:demo@163.com>, authentication is required后来在metalink上找到解决方法:要在程序中增加登录smtp服务器的过程![@more@] 测试环境: RedHat AS 3.0 Oracle
好书推荐:亚洲史
《亚洲史》(第四版)是美国历史学家罗兹·墨菲的最重要的著作之一。作者是一位中国历史和地理专家,他对亚洲事务及其历史的研究生涯已逾40年。[@more@]出版前言 亚洲是地球上一个辽阔而又多姿多彩的区域,它有着全球一半以上的人口和同样超过一半的世界历史经历,承载了世界上最古老的文明传统。无疑的,亚洲人及其文化“代表着全人类历史中最重要、最丰富、最多彩的篇章”。 《亚洲史》(第四版)是美国历史学家罗兹·墨菲的最重要的著作之一。作者是一位中国历史和地理专家,他对亚洲事务及其历史的研究生涯
linux下ssh连接另一台linux不用密码的方法
比如A、B两台linux机器,要从A的oracle用户下登录到B机的oracle用户下[@more@]1. 用oracle登录A、B两台机器,分别执行ssh-keygen -t rsa,目的是简单地在 /home/oracle下创建目录.ssh 运行该命令后会让你选一些选项,直接回车即可2. 现在从A登录作为oracle, 运行scp /home/oracle/.ssh/id_rsa.pub B:/home/oracle/.ssh/authorized_keys 3. 现在再从A运行$ssh B则不需要密码了4. 如果有C机也要不需密码连接到B机,则只要再C下执行ssh-keygen -t rsa,然后将 /home/oracle/.ssh
一个自动FTP的SHELL脚本
#!/bin/sh# transfers all txt file to target serverftp -i -n 192.168.1.33 >> $HOME/data_trans.log <<EOFuser oracle orapassbinmput *.txtbyEOF[@more@]
秦汉时期的中国和同时的世界
秦和孔雀帝国 中国历史发展到战国时期,呈现出一种新的矛盾现象:一方面,各国之间存在着尖锐的对立和冲突,另一方面,各国内部却在逐渐郡县化、一体化。从这种矛盾的趋势来说,各国内部郡县化、一体化的结果是国力和兵力的加强,由此而冲突更加剧烈;而剧烈冲突的结果却又是由兼并而统一。梁襄王问孟子:“天下恶乎定?”孟子说:“定于一。”他的确看出了,战国大动荡的前途是统一。[@more@]经过多年复杂的斗争,到战国晚期,秦已成为七国中最有优势的强国。秦王政于公元前246年即位,于公元前238年亲政。于是“续六世之余烈,振长策
【工作日志】数据迁移完整过程
任务:将旧数据库中的数据完全导出到新数据库中环境:旧数据库:CPU UltraSPARC-II 400MHz × 1 Mem 512M SunOS 5.8 Oracle 8.1.7.0 新数据库:CPU Intel 2.80GHz × 2 Mem 2048M RedHat AS 3.0 Oracle 9.2.0.4 [@more@]步骤:( 注:考虑篇幅, 本文中仅列出实际操作中部分代码 )1、使用toad > dba > generate database script工具生成旧数据库的脚本,从中提取出表空间和用户 的创建语句,将创建表空间
对IN & EXISTS NOT IN & NOT EXISTS的优化
在平时工作中,IN & EXISTS NOT IN & NOT EXISTS是使用频率比较高的SQL语句,所以对它们的优化工作是很有必要的测试环境:Oracle 9.2.0.1 for Windows2000[@more@]1、IN 和 EXISTS IN和EXISTS的处理流程是不一样的: IN的执行流程 select * from T1 where x in ( select y from T2 ) 可以理解为: select * from t1, ( select distinct y from t2 ) t2 where t1.x = t2.y; EXISTS的执行流程 select * from t1
显示段对象的空间信息show_space (适用于9i版本)
show_space这个函数最先是Tom在《expert one-on-one》中用到的,用来查看对象的空间使用情况,但是他用的适用于8i版本,9i有许多新特性没法用到,itpub上出了一个for 9i的版本,作者xzh2000,我做了一些改动便于自己使用[@more@]create or replace procedure show_space /* 描述:本程序是针对Oracle 920以上版本的 last updated 2004-12-14 by yaanzy 注意:表的类型(ASSM、MANUAL)一定要输入准确,否则程
发现一个SQL语句在RBO和CBO下居然返回不同结果
创建测试用表:create table aaa (a1 varchar2(10));insert into aaa values ('2004-12-09');insert into aaa values ('0000-00-00');commit;[@more@]运行语句1:select * from ( select a1 mon from aaa) c , ( select to_date(a1,'yyyy-mm-dd') mon from aaa where a1 >'2' group by to_date(a1,'yyyy-mm-dd') ) dwhere d.mon < sysdate;报错:ERROR 位于第3行: ORA-01843: 无效的日期执行计划如下:Execution Plan-----