
数据库应用
文章平均质量分 68
宋哥
哥一个学通信工程的,阴错阳差的搞起了软件,计算机知识基本来自于自学。总结记录工作中碰到的问题及解决办法是一个良好的习惯,过去我用笔,现在用键盘并分享到网上,让更多人看到,自己也方便查找。
博客的名字“驽马十驾,才定不舍。”取自荀子的“劝学篇”,记录并分享工作中的点点滴滴,积少成多,虽然不是什么人才,但只要孜孜不倦,也能做出一点成绩。
展开
-
客户端报ORA-28040:没有匹配的验证协议错误
网络和配置什么的没有问题, 就猜想是不是客户端版本低了,因为我用的客户端是一个简易版的Oracle9,而数据库虽然不知道什么版本,但是Oracle10是没问题的。现在连接不上,数据库版本至少是Oracle11,更可能是Oracle12。登录服务器上,再用SQLplus连接数据库,版本果然是Oracle12。有问题网上找答案,一查果然如此,版本不匹配。重新安装Oracle客户端,问题解决。原创 2022-11-24 10:34:50 · 6472 阅读 · 1 评论 -
安装Oracle后数据库不能启动,出现ORA-27125错误
iamlaosong文HP DL580G9安装RHEL6.6+Oracle11后因导入数据太慢无法使用,找到厂家,测试后表示硬件没有问题,所能做的就是升级BIOS。重新安装时选择的是RHEL6.6+Oracle10,Oracle安装也还顺利,安装后测试正常,只是第二天设置Oracle自启动时发现服务器重启后Oracle却无法启动了,错误是:ORA-27125:unabletocrea原创 2016-10-20 09:50:14 · 3339 阅读 · 0 评论 -
修改Oracle用户默认表空间
作者:iamlaosong业务需要创建几个临时表,结果创建时提示表空间EMSDATA不存在。原来这是我创建用户时指定的默认表空间,后来由于项目变化,这个表空间删掉了,所以有此提示。create user emssxjk identified by emssxjk default tablespace emsdata temporary tablespace temp;简单的解决办法是再创建一个同名的表空间,另一个办法是修改默认表空间:alter user emssxjk default ta原创 2021-03-04 10:53:12 · 10378 阅读 · 1 评论 -
【VBA研究】Excel连接Oracle的几点说明
作者:iamlaosong通过VBA连接Oracle数据库查询数据,一般有两种OleDB连接驱动方法,一种是用微软的驱动,另一种用Oracle驱动,Provider需要根据实际情况修改。这儿对我使用的环境做个记录。1、Microsoft公司提供的OleDB驱动MSDAORA,据说只支持32位系统,我在32位系统下使用没有问题,其连接字符串如下: connectionString="Provider=MSDAORA;Data Source=dataSource;User Id=userid;P...原创 2021-01-07 17:29:58 · 2590 阅读 · 0 评论 -
Oracle的SQL怎样对字段值进行数据分段
作者:iamlaosong数据分析中用SQL取数时需要对邮件重量进行分段,简单的分段直接使用条件语句就可以了,例如:selectcasewhen jihezl <2 then '轻件'when jihezl>=2 and jihezl <20 then '重件'else '超重件'end as zlqj,也可以用decode函数嵌套完成这个功能,不过比较麻烦,也不直观,如上面的分段:selectdecode(sign(jihezl-2),-1,'轻件',0,..原创 2020-06-11 10:37:31 · 1548 阅读 · 0 评论 -
orale的tnsping与TCP/IP的ping命令的比较
iamlaosong评:本文流传甚广,被很多人引用。文章详细阐述了两条命令的内涵和差别,虽然有点啰嗦(尤其是最后那部分),但条理基本清晰,值得一看。看这篇文章的时候对其中的一个结论感到奇怪:tnsping需要使用TCP,所以需要3次握手建立连接,而ping只使用IP,所以不需要3次握手,这也就解释了为什么有的机器不能ping通,但是用tnsping确能测试通。思考了一下,觉得应该是笔误写反...原创 2017-08-16 16:22:28 · 681 阅读 · 0 评论 -
Redhat 6.4 安装 Oracle10g 血泪史
1.系统和软件,附下载地址VMware Workstation 10.7z[红帽企业Linux.6.4.服务器版].rhel-server-6.4-x86_64-dvd[ED2000.COM].iso10201_database_linux_x86_64.cpio.gz2.从0开始安装安装虚拟机,在虚拟机里安装Redhat6.4,然后把oracle10g安装转载 2016-12-20 17:44:39 · 4975 阅读 · 0 评论 -
SQL中各种Join语句(left、right、full、inner)的区别
iamlaosong文实际工作中常常需要将多个表的查询结果合成的一个查询中,我一般采用join语句进行连接,用的最多的就是left join,这么多join的差别是什么呢?简单的说就是最终结果以谁为主的问题。下面是个查询语句实例:select aa.city, aa.ssxs, aa.zj_code, aa.zj_mc, bb.clct, cc.dlv from原创 2017-02-24 16:09:51 · 6711 阅读 · 0 评论 -
oracle定时器job长时间执行无法结束
iamlaosong文我用job每天定时执行一些存储过程,以便对数据进行处理。正常情况下,这些存储过程执行完毕需要几十秒时间,但有时不知道什么原因一天都执行不完,导致第二天的job也无法顺利执行。如果不进行人工干预,这个job也许就再也不会执行下去了。通过查询和测试我知道卡死的原因是其中的一些SQL语句执行时间太长,就像服务器有时快有时慢一样,这些SQL语句执行也是时快时慢,猜想原因是不是or...原创 2016-12-22 10:59:37 · 11537 阅读 · 1 评论 -
Oracle的分析函数over(...)
iamlaosong文最近在用SQL实现一个查询功能时接触到了分析函数,如同发现了新大陆,很多功能可以用分析函数轻松搞定,速度还快,真是一个超级牛叉的功能。先说一下要实现的功能吧,总部下发的结算数据居然有重复,悲催的是他们下发的数据他们不管,让我们财务找出重复的,对于重复的数据,要求保留封发日期最大的那个,封发日期相同的,保留金额最大的那个。总部需要我们将需要删除的数据(不是保留的)报上去原创 2017-04-28 10:23:43 · 19759 阅读 · 0 评论 -
将sqlplus查询结果输出为文件
iamlaosong文日常工作中我会用PL/SQL Developer查询数据库表的数据并输出成Excel文件,但也有一些特殊情况下会在服务器上直接用sqlplus查询表数据,有时希望查询结果能保存到文件中以便查看,毕竟在文件中查看会方便多了。其命令如下:set head offspool song.txtselect * from song_temp;spool off原创 2017-04-27 15:37:11 · 15570 阅读 · 0 评论 -
关于oracle with table as的用法
作者:iamlaosong最近在论坛经常看到有人使用with table as语句,一般都是构建一个临时表,用于测试,经研究此语句的用法我理解有以下好处:1) 不用实际建表,可以轻松构建一个临时表,通过对这个表的处理测试一些功能;例如:with t as (select '010-82696948' telfrom dualunionallselect'020 8原创 2011-12-11 20:15:32 · 25015 阅读 · 0 评论 -
部分功能迁移到新服务器----如何在新服务器上建表和复制数据
iamlaosong文1、建表当我们在数据库服务器上建表的时候,可以先建表结构,再插入数据,例如:create table song_temp (code varchar2(20),descrip varchar2(100)) tablespace emsdata ;插入数据:insert into song_temp (code,descrip) values ('2300'原创 2016-11-02 15:10:04 · 656 阅读 · 0 评论 -
Oracle用户被锁及解决办法
iamlaosong文数据库服务器的报账号被锁的错误,先解锁再细查原因,应该是我改用户口令造成的,口令修改后,每天的数据导入程序中配置的口令没有及时修改,导致错误登录次数超限被锁,查数据导入情况,果然数据没有导入,再查数据导入日志,显示连接失败,证实了用户被锁的原因就是导入程序所致。解锁方法是用system用户(或者具有DBA角色的用户)登陆,进行解锁: SQL> alter user myuser account unlock; User altered.原创 2016-11-14 10:01:10 · 16142 阅读 · 0 评论 -
Oracle字符集的查看查询和Oracle字符集的设置修改
本文主要讨论以下几个部分:如何查看查询Oracle字符集、 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题。一、什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,转载 2016-10-21 09:54:07 · 361 阅读 · 0 评论 -
导入Oracle数据库中的汉字都是问号
iamlaosong文导入服务器Oracle数据库中汉字都是问号“?”,查数据库的字符集没问题,那么就是客户端的问题。查Oracle用户的环境变量,发现没有设置NLS_LANG,在.bash_profile文件中增加:export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK重新导入数据,汉字显示正常。另外,环境变量LANG用于Linux界面显示,和Or原创 2016-10-21 09:40:51 · 6122 阅读 · 0 评论 -
PL/SQL Developer中用dbms_output.put_line输出
iamlaosong文有人说PL/SQL Developer中用dbms_output.put_line输出前需要执行命令set serveroutput on才行,其实要看在什么窗口下,command窗口是这样,SQL窗口是一直有输出的,这条命令也不能在SQL窗口执行。只是这些输出要等程序执行完才能看到,可以用下面这段代码测试,将其复制到SQL窗口执行即可:declarei numbe原创 2016-09-08 17:07:50 · 25185 阅读 · 5 评论 -
Oracle ORA-12899错误的解决方法
iamlaosong文数据导入时报ORA-12899错误,即插入的数据长度超出字段的设置长度,实际长度并不长,这是由于Oracle字符集不同,汉字占的长度不同造成的。中文在ZHS16GBK中占2个字节,在UTF-8中却占3个字节,所以汉字导入UTF-8字符集的数据库就很容易出现字段长度不够,解决办法,一个是增加字段长度,还有就是修改字符集。如果系统中已经存在很多数据,建议修改字段长度,因为原创 2016-08-25 18:15:14 · 160905 阅读 · 3 评论 -
数据库定时备份脚本
作者:iamlaosong为了防止数据库服务器损坏,需要每天备份数据到客户端,数据保存在export目录下,下面是备份脚本:cd exportsetlocalset NLS_LANG=AMERICAN_AMERICA.AL32UTF8set rq=%date:~0,4%%date:~5,2%%date:~8,2%exp system/manager@clienttns file=all_%rq%.dmp rows=y log=all_%rq%.log owner=(user1,user2,user3)原创 2010-12-03 20:04:00 · 993 阅读 · 0 评论 -
ORA-01017/ORA-02063 DbLink建立错误问题分析及解决
iamlaosong文一个应用系统新增一个数据库服务器,因此需要建立一个数据链接以便访问,但链接建好后访问时总是报错,十分不解,网上找了一下,原来是版本问题。按其解决办法,访问成功。现将其内容摘抄如下,首先叙说一下我创建数据链接的正确步骤:1、在要创建链接的数据库服务器上的 [TNSNAMES.ORA]文件添加对被链接数据库的连接字符:ORCLG9 = (DESCRIPTION =...原创 2016-07-27 16:05:28 · 67339 阅读 · 2 评论 -
SQL count和case when配合统计给定条件下不重复的记录数
Iamlaosong文1、我们知道,SQL语句中用count函数统计记录数量,配合distinct关键字可以统计非重复的记录数量。例如:select count(*), count(city_name), count(distinct city_name) from tb_county 查询结果是:25342534 363增加查询条件可以查询不同条件下记录的数量,例原创 2017-06-30 09:43:25 · 68412 阅读 · 6 评论 -
Oracle小写字母同义词名称无法访问
iamlaosong文一般情况下创建同义词时名称即使是小写字母,创建出来后名称也会转换为大写字母,可是我在用PL/SQL Developer工具导出创建语句,修改名称时输入的是小写字母,因为名称加了引号,结果创建出来的同义词名称也是小写字母。正常的创建语句:create synonym song_temp_g9 for song_temp1@datalink_g9;1、根据现有原创 2017-06-12 10:00:09 · 789 阅读 · 0 评论 -
ORA-00600和ORA-08103错误处理
iamlaosong文工作需要每月将总部下发的结算数据导入到表中,然后进行统计清分。每个月的数据量很大,累计下来后数据量更大。用sqlldr导入数据速度比较快。本次用sqlldr导入8月结算数据后,进行统计时报错:ORA-00600: internal error code, arguments: [kcbz_check_objd_typ_3], [0], [0], [1], [], [], ...原创 2018-09-27 16:02:24 · 1874 阅读 · 0 评论 -
使用sqlldr导入数据时导入部分就停止了
iamlaosong文在使用sqlldr导入数据到Oracle时发现数据短少的厉害,检查日志发现有部分数据实际长度大于字段长度无法导入(存放在bad文件中),但这部分数据量并不大,实际数据有几十万条,但只导入2999条就停了,此时异常数据达到51条。增加字段长度重新导入,一切正常。看来这个异常数据条数是有限制的,超过了后面的数据就不再导入了。Oracle修改字段类型和长度语句:ALTER TABL...原创 2018-03-20 11:13:11 · 2903 阅读 · 1 评论 -
【VBA研究】Excel VBA利用ADODB访问数据库使用小结
作者:iamlaosong ▲连接Oracle数据库 Set cnn = CreateObject("ADODB.Connection") cnn.Open "Provider=msdaora;Data Source=dl580;User Id=emssxjk;Password=emssxjk;" dl580是tnsnames.ora中配置的服务名。▲创建记录集recordset...原创 2014-01-09 17:09:28 · 42350 阅读 · 0 评论 -
Access、SQLServer、Oracle常见的区别
我们日常接触的数据库有Access、SQL Server、Oracle;编写SQL语句的过程中,尽量使用一些通用的语句,但还是有些方面有些区别避免不了,现简单总结一下。 以下A代表Access,S代表SQL Server,O代表Oracle 1、取当前系统时间 A:Select Now() S:Select Getdate() O:Select Sysdate From Dual 2、...转载 2018-03-02 09:07:32 · 2193 阅读 · 0 评论 -
sqlldr 如何导入一个日期字段
iamlaosong文其实很简单,只要根据原始数据的格式,在控制文件中字段名后面加上日期格式字符串就行了。例如:load datainfile '订单1012-1031.csv'append into table emsapp_zywl_ddmxfields terminated by ','optionally enclosed by '"'(ddh,xqdh,lsrq dat原创 2017-11-27 14:50:44 · 6760 阅读 · 1 评论 -
【VBA研究】Excel在64位系统安装目录造成的ORA-06413:连接未打开错误
作者:iamlaosong我做的excel工具,连接oracle数据库查询数据,平时可以很好的运行,无论是XP和win7都可以。后来碰到一台win7(64位)的系统,发现无法连接数据库,报“ORA-06413:连接未打开”错误。错误描述: 用ORACLE的工具里的sqlplus可以连接,可是运行excel中的宏就是死活报“ORA-06413:连接未打开”错误。如下图:查找...原创 2015-04-22 16:11:14 · 5189 阅读 · 4 评论 -
Oracle数据库表空间使用量为负值
iamlaosong文在做Oracle日常检查时发现,这个应用表空间的下的一个datafile的使用空间为负值,觉得奇怪,后来到网上找了一下,据说是Oracle 10G的一个BUG,我正好用的就是Oracle 10G,造成这个负值的原因是删除大量的表和索引后,Oracle 10G的回收站功能会将sys、system的drop操作记录在回收站里,而设置的默认大小为2G。当从数据库删除大小超过2G的表时,就有可能会出现表空间里的部分数据文件的使用率为负数。原创 2017-11-06 18:14:29 · 2226 阅读 · 0 评论 -
如何将CSV文件导入到ORACLE
iamlaosong文将CSV文件导入到ORACLE的方法网上很多,比较常见的方法是用PL/SQL Developer的Text Importer和SQLLOADER,考虑到数据量大,觉得还是将文件FTP到服务器,再用SQLLOADER速度会比较快。Oracle 的SQLLOADER可以将外部数据加载到数据库表中。下面是SQLLOADER的基本特点:1)能装入不同数据类型文件及多个数据文...原创 2017-09-12 11:12:51 · 5234 阅读 · 0 评论 -
将多个txt文件导入到ORACLE
iamlaosong文将文本文件导入到数据库,如果不需要对文件进行处理,用sqlldr导入不仅方便,而且速度快。下面这个导入脚本,通过循环生成每个文本文件导入的控制文件,其中X'09'表示分隔符是TAB符,然后再调用sqlldr命令进行导入。#import datafile that unzip by timing job: jsunzip.sh#eidt by iamlaosong 2原创 2017-09-26 09:51:16 · 1918 阅读 · 0 评论 -
如何有条件的查询或删除表中的重复记录
iamlaosong文数据库中有重复记录,需要用SQL语句删除或者提出来,无条件的删除重复记录(就是保留一条,其它都删除)可以通过rowid删除,做删除之前可以先将查询语句写好,语句如下:select * from mytable awhere a.rowid != (select max(b.rowid) from mytable b where a.id=b.id and a.原创 2017-09-14 14:41:45 · 594 阅读 · 0 评论 -
SQL更新数据时多个字段时合在一起的写法
作者:iamlaosongOracle正常更新一个表中多个字段时,字段是分开写的,例如:update tb_county t set t.prov_name = '安徽', t.city_name = '合肥市', t.xs_mc = '庐阳区' where t.xs_code = '2300';可是,更新的值如果来自一个子查询,则这些字段是可以合在一起写的,例如:update tb_原创 2014-08-29 14:15:45 · 65862 阅读 · 7 评论 -
Oracle修改tnsnames文件后何时生效?
iamlaosong文这是个Oracle客户端的配置文件,说明客户端如何连接一个数据库。路径在安装路径下的network下admin目录中。当有客户端程序,比如SQLPLUS尝试一个新的连接,并且此连接包含了@连接字符串,则此次连接便会去tnsnames.ora文件中找有没有你这次指定的这个“连接字符串”,如果有的话,则读取此配置;如果没有找到的话,则会返回一行错误。由此可以看出,tnsn原创 2017-09-04 10:21:37 · 12116 阅读 · 0 评论 -
Oracle分组函数之ROLLUP魅力
iamlaosong文经常用Excel的人都知道分类汇总功能,rollup函数就可以实现这个分类汇总。以前都是简单的是用group by的分组功能,没想到还有这个rollup函数一说,试了一下,效果真的不错。rollup是对group by的扩展,因此,它只能出现在group by子句中,依赖于分组的列,对每个分组会生成汇总数据, rollup和group by联合一起使用,达到了按group...原创 2017-07-13 16:00:57 · 1047 阅读 · 2 评论 -
sql语句中in与exist not in与not exist 的区别
in和existsin 是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select * f转载 2013-11-04 17:52:02 · 1577 阅读 · 0 评论 -
oracle函数参数中=>的含义
作者:iamlaosong今天看到一个MD5加密的问题,oracle也提供MD5加密函数,网上搜了一下,加密函数是:DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'abc') 不过,其参数中出现了一个“=>”符号,那么这个符号到底什么意思呢?oracle实参与形参有二种对应方式:1、一种是位置方式,和面向对象语言参数传递类似;2原创 2015-03-10 16:36:34 · 5760 阅读 · 0 评论 -
Oracle中的MD5加密
作者:iamlaosong因为要用到MD5加密,所以在网上搜了一下相关资料,并进行仔细研究。其核心就是MD5编码的数据包函数:DBMS_OBFUSCATION_TOOLKIT.MD5,这里涉及到RAW类型,其实就是原始的代码值。MD5加密的结果就是16个byte值,也就是是RAW类型,是显示不出来的,要正确显示,需要经过Utl_Raw.Cast_To_Raw转换,这个函数的作用是将每个字节的值用十六进制字符表示出来。为了说明清楚,举例如下:假定一个字节的二进制值是0100 0001,十六进制表示就是41原创 2015-05-04 15:09:39 · 35034 阅读 · 0 评论 -
【VBA研究】利用ADO实现VBA连接Oracle并执行存储过程
VBA调用Oracle存储过程完整的程序,已调试成功。原创 2013-07-12 10:26:37 · 12095 阅读 · 0 评论 -
PL/SQL Developer中调试oracle的存储过程
唉,真土,以前用Toad,一直用dbms_output.put_line调试存储过程,只觉得不方便,用上PL/SQL Developer后,习惯性的还是用这个方法,人都是有惰性的。今天分析存储过程生成的数据,实在觉得不便,网上搜了一下,PL/SQL Developer中调试oracle的存储过程的方法,其实很简单。我知道学会使用PL/SQL Developer的调试功能,对于编写复杂的存储过程,包,funtion...非常有帮助,对执行存储过程形成的结果进行分析时也很有用处,学习之后,果然方便,现将相关步骤原创 2014-10-30 12:11:07 · 39471 阅读 · 1 评论