IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / 宋春风
IT 2016-02-14 00:06:24 / 累计浏览 2,660

Oracle字符类型存数字及查询数字时使用单引号走不走索引的问题

这篇文章解决的是一个在实际数据库开发中容易产生争议的问题:用varchar2类型存放的数字字段,在查询条件中给数字加上单引号,到底会不会导致索引失效?作者从团队内部的实际分歧出发,通过在Oracle 11.2.0.4.0版本上进行测试来验证结论。 文章首先通过建表和数据准备,复现了讨论的场景。核心对比点在于两种常见的错误认知:一种是认为“char类型存数字,查询不加单引号不走索引”;另一种则想验证“varchar2类型存数字,查询加单引号是否还会走索引”。作者通过具体的执行计划截图(文中虽未显示但提到测试信息),清晰地展示了不同写法下的索引使用情况。 最终得出了明确的结论:对于varchar2类型字段,无论在查询时是否为数字加上单引号,都能正常走索引。这个结果厘清了一个常见的误解,并为后续将varchar2字段改为number类型的设计决策提供了数据支持。对于DBA和开发人员而言,理解数据库在处理隐式类型转换时的具体行为,有助于编写出既准确又高效的SQL语句。

本机暂存
IT 2015-07-16 23:23:18 / 累计浏览 2,600

使用审计功能记录错误密码登陆信息

这篇讲的是如何利用Oracle数据库内置的审计功能,来定位UAT环境中用户频繁被锁定的根本原因。 在一次UAT环境恢复后,业务用户不断反映账户被锁定,且每个人都坚称自己输入的密码无误。作者原本打算新建触发器来记录错误登录尝试,但在检查配置时发现,当前使用的Oracle 11.2.0.4数据库,默认的审计功能实际上是开启的。 通过执行`show parameter audit`命令确认状态后,作者直接从审计日志入手,查询了`dba_audit_trail`视图。最终清晰地定位到问题根源:某个应用程序在连接时持续使用了错误的密码。审计日志详细记录了尝试登录的客户端程序、操作系统用户、终端以及具体时间,证据确凿。这不仅快速解决了“谁在用错密码”的罗生门,也避免了额外编写监控代码的开销。 这个案例提醒我们,在进行故障排查时,先摸清数据库现有功能与配置至关重要。Oracle默认开启的审计机制,就像一位默默工作的哨兵,在无需额外开发的情况下,为我们保留了关键的现场证据。

本机暂存
IT 2015-06-01 23:35:32 / 累计浏览 3,080

ORACLE怎样将CHAR类型字段转换成CLOB

这篇讲的是Oracle数据库中一个常见但细节不少的字段类型转换问题。文章直接切入实操,演示了如何将CHAR类型的字段转换为CLOB类型。它分了两种场景来具体说明:一种是目标列当前为空,另一种是列中已经存放了数据。 针对这两种情况,文章分别给出了转换的SQL思路和操作步骤。对于空列,操作可能相对直接,而列中已有数据时,则需要考虑数据的迁移与处理。通过具体的表结构示例(比如sdb_b2c_goods表)和代码演示,让读者能清晰地看到每一步操作。 对于需要调整表结构、迁移大文本数据的开发者或DBA来说,这篇文章提供了一个非常清晰的、分场景的解决方案参考,避免了自己摸索可能遇到的数据丢失或转换错误问题。

本机暂存
IT 2015-01-04 22:50:48 / 累计浏览 2,440

修改oracle当前会话的语言环境,解决oracle显示中文乱码的问题

这篇讲的是如何快速解决Oracle数据库在操作时出现中文提示显示为一串问号的常见问题。 作者从实际操作中的困扰出发,明确指出这种乱码的根源在于当前会话的语言环境设置不匹配。文章提供了具体、可操作的解决方案:首先通过 `SELECT userenv('language') FROM dual;` 命令来查看当前的语言环境配置,确认问题。接着,给出了两种修改方法:一是通过 `ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';` 命令临时修改当前会话,使其立即生效;二是通过修改环境变量等方式进行永久性设置,从根源上避免问题再次出现。 整个排查思路清晰,步骤直接,对于遇到类似字符集显示问题的数据库管理员或开发人员来说,是一份实用且能快速解决问题的参考。简单几条命令就能让提示信息恢复可读性,提升了工作效率。

本机暂存
IT 2015-01-04 22:49:39 / 累计浏览 2,980

oracle跟踪事件(dump)总结

这篇讲的是Oracle数据库中用于故障诊断的跟踪事件(dump)机制。文章系统梳理了跟踪文件的三种类型——后台报警日志、后台进程跟踪文件和用户跟踪文件,并详细说明了如何通过初始化参数或会话命令来触发dump操作。 核心内容聚焦于各种跟踪事件的具体用法。例如,通过`buffers`事件可导出SGA缓冲区信息,`blockdump`事件能定位特定数据块,`errorstack`事件则用于捕获难以获取的错误栈。文章还列举了诸如`10046`(SQL语句跟踪)、`10231`(全表扫描时跳过损坏块)等实用的内部事件号,并解释了其参数级别含义。 最后,文章提供了查看当前跟踪文件的简单示例。整体上,它像一份面向DBA和开发者的速查手册,将分散的Oracle诊断工具整理成可操作的条目,便于在性能调优或故障排查时快速定位并转储关键内存结构或日志信息。

本机暂存
IT 2015-01-04 22:47:30 / 累计浏览 15,200

如何查找消耗资源较大的SQL

这篇讲的是数据库性能优化中一个非常基础但关键的问题:如何找出那些最“吃”资源的SQL语句。作者没有从理论入手,而是直接从Oracle的V$SQLAREA视图出发,给出了一个可直接使用的查询语句。 这条SQL的设计很务实,它不仅找出了总磁盘读取(disk_reads)最多的查询,还计算了每次执行的平均磁盘读取次数(rds_exec_ratio)。通过这个比率,你能快速识别出是那些执行频繁但效率低的语句,还是那些单次执行就消耗巨大的语句。同时,语句关联了执行用户(username)和具体的SQL文本(Statement),让定位和后续优化有了明确目标。 对于需要快速诊断数据库性能问题的DBA或开发人员来说,掌握这几个从V$SQLAREA中提取关键信息的查询,就相当于有了一个高效的“探照灯”,能立刻照出系统中最耗资源的瓶颈所在,让优化工作不再是大海捞针。

本机暂存
IT 2012-10-22 21:53:05 / 累计浏览 6,060

一次SQL优化记录

作者在客户现场遇到一个性能糟糕的SQL查询,通过PL/SQL Developer执行时效率极低,影响了业务操作。他详细记录了整个排查与优化过程:首先定位到问题SQL,随后通过分析执行计划,发现表连接顺序不当与关键字段索引缺失是主要瓶颈。针对这两个核心原因,作者分别调整了连接顺序并补建了复合索引,最终使该查询的执行时间从数分钟缩短至毫秒级,优化效果显著。 这篇文章的价值在于它完整呈现了一个真实、典型的SQL性能问题从发现到解决的闭环思路。作者没有停留在简单的“加索引”建议,而是结合具体的执行计划与优化前后的数据对比,清晰展示了如何系统性地诊断和根治数据库查询性能问题。对于日常需要与数据库打交道的开发者和DBA来说,这种一步步分析问题的实战记录,比泛泛而谈的优化原则更具参考意义。

本机暂存
IT 2012-08-22 23:42:14 / 累计浏览 3,940

DBMS_SUPPORT包简单使用

这篇讲的是追踪SQL的另一种方法,但它的主角有点特殊——一个名为DBMS_SUPPORT的Oracle软件包。 与DBMS_MONITOR等常见工具不同,DBMS_SUPPORT最初是Oracle为内部支持人员提供的“秘密武器”。它最特别的地方在于,默认情况下数据库里根本找不到它(直接查询会报“对象不存在”的错误),官方公开文档里也没有它的身影。这种“非公开”的属性,让它带有一些内部调试工具的色彩。 作者从这个略显神秘的包入手,介绍了它的安装和基本使用方法。其核心价值在于提供了一种相对隐蔽的SQL追踪方式。在某些需要追踪SQL性能问题,又希望避免对当前系统或用户产生明显干扰的场景下,这种隐蔽性就派上了用场。文章通过实际的命令演示,让读者能快速了解如何启用这个不常被提及的功能。

本机暂存
IT 2012-08-09 23:50:20 / 累计浏览 4,080

substr、replace函数简单应用

这篇讲的是作者在日常ORACLE运维中,如何巧妙运用SUBSTR和REPLACE这两个基础字符串函数,来高效处理一批图片文件路径数据。他面对的是一张包含档号与图片路径字段的表,每条记录都类似于“/waiwubu/0220/18-0220-003-0001.JPG”这样的结构。 作者的核心操作,是利用SUBSTR函数精确地从这些冗长的路径字符串中“截取”出关键部分,例如提取出用于归档分类的“0220”目录或“0001”这样的文件编号。同时,他通过REPLACE函数,对路径中的某些固定字符串(可能是环境标识或命名规则的一部分)进行批量替换,从而统一或修正文件路径。 文章没有追求复杂的理论,而是直接展示了带有示例数据的具体SQL查询过程。这提醒我们,解决实际的数据整理与迁移问题时,往往不需要高深的技术,把最常用的工具用熟、用巧,就能显著提升工作效率。

本机暂存
IT 2012-08-02 12:32:26 / 累计浏览 3,800

使用ORACLE在线重定义将普通表改为分区表

这篇讲的是一个真实的运维案例:一张按全宗号分了77个分区的生产大表,在开发人员多次执行 `ALTER TABLE RENAME` 和 `CREATE TABLE AS SELECT`(CTAS)操作后,悄然退化成了普通堆表,导致查询性能显著下降。根源就在于CTAS只会复制数据和基础结构,却丢掉了原有的分区定义。 对于这种7x24不间断服务的关键业务表,想改回分区结构且不能停机,作者给出了利用Oracle 10g推出的在线重定义(DBMS_REDEFINITION)功能的标准解法。文章在一个OEL 5.4 + Oracle 10.2.0.1的虚拟机环境中,一步步演示了从创建测试表、检查重定义可行性,到执行重定义和最终验证的完整流程。这种操作风险高、步骤多,一个环节出错就可能影响线上服务。 这篇文章的价值不仅在于展示了一个具体的功能用法,更在于它揭示了CTAS这个看似无害的常用操作在特定场景下的隐形陷阱。对于负责数据库维护和性能优化的工程师来说,这个案例提供了处理“结构意外变更”的一个清晰思路和可复现的操作模板。

本机暂存
IT 2012-07-27 14:06:56 / 累计浏览 4,200

为什么不要把用户表存储到SYSTEM表空间

这篇讲的是一个看似简单却常被忽略的数据库性能问题:为什么我们一直被告诫不要把用户表存放到SYSTEM表空间。作者从日常的疑惑出发,深入探究了这条DBA铁律背后的原因。 他通过实际测试来验证:在Oracle 11.2.0.2.0环境中,分别创建了存放在USERS和SYSTEM表空间的测试表。测试揭示了关键点——系统会频繁对SYSTEM表空间进行自动维护操作(如数据字典更新),这一过程本身就会消耗CPU资源。如果将普通用户表混入其中,这些业务数据的读写就会与系统维护任务竞争资源,直接导致查询和操作的效率下降。 文章通过具体的测试案例和SQL操作步骤,将理论上的“最佳实践”转化为可观察的性能差异,清晰地指出了问题的根源是资源竞争。对于数据库开发和运维人员来说,这不仅是知道一条规则,更是理解其底层原理,从而在架构设计时做出更优选择。

本机暂存
IT 2012-07-12 22:58:28 / 累计浏览 2,820

oracle列级权限控制

这篇讲的是一个非常具体且有点刁钻的Oracle权限控制需求。客户有一张拥有超过150个字段的大表,需要精细地控制“扫描公司”这类外部人员的权限:他们只能看到其中部分字段,并且对于能看的字段,也只允许修改其中几个。 面对这个需求,作者首先想到视图,但很快意识到视图能解决“看”的问题,却无法直接约束“改”的范围。这促使他深入探索了Oracle的列级权限控制机制。文章没有停留在理论,而是通过一个清晰的实验——创建测试表、插入数据、尝试授权——逐步演示了如何利用Oracle内置的`COLUMN`级`SELECT`和`UPDATE`权限,来达成这个看似复杂的目标。 作者记录的测试过程,最终验证了这条技术路径的可行性。对于数据库管理员或开发人员来说,这是一个非常实用的案例:当传统的表级或视图权限无法满足业务上那种“部分可见、部分可改”的细粒度管理要求时,列级权限控制就是那个值得深入了解的解决方案。

本机暂存
IT 2012-07-07 22:53:30 / 累计浏览 3,320

ORACLE 11g新特性-允许DDL锁等待DML锁

这篇讲的是ORACLE 11g在锁机制上的一个重要改进。作者从11g之前版本的一个常见限制切入:当表上存在未提交的DML事务锁时,对该表执行的DDL操作(如TRUNCATE)会立即失败并报ORA-00054错误,即便等待一小会儿也不行,这给运维和开发带来了不少意外的中断。 11g改变了这一行为,引入了“DDL锁等待DML锁”的特性。通过一个清晰的对比实验,作者展示了差异:在11g中,后发的DDL操作会等待DML锁释放,而不是直接报错返回。这个机制上的转变,让数据库对象的结构变更操作拥有了更好的“耐心”,能适应更复杂的并发场景。 理解这一点,对于规划数据库维护窗口、诊断锁等待问题,以及设计高并发下的DDL策略都很有帮助。它让管理员在执行维护任务时,能更从容地安排操作顺序,而不必总是担心被即时的锁冲突打断。

本机暂存
IT 2012-07-07 22:48:18 / 累计浏览 2,000

ORACLE 11g新特性-虚拟列

在10g逐渐退出舞台、12c即将到来的当下,许多数据库环境仍停留在11g,深入了解其成熟特性依然必要。这篇技术分享聚焦于Oracle 11g引入的一项实用功能——虚拟列。 虚拟列并非物理存储的数据,而是在查询时根据定义的表达式动态计算得出的列。它允许在建表时就声明,例如根据已有字段(如`identifier`)通过函数(如`substr`)派生新字段。文章通过一个创建表`dbdream`的具体示例,展示了虚拟列的定义语法:使用`GENERATED ALWAYS AS`关键字指定计算表达式。 这个特性巧妙地简化了数据建模,无需在应用层反复处理派生逻辑,也减少了存储冗余,对优化查询和设计规范表结构很有帮助。作者从实践场景出发,清晰讲解了如何启用并理解这一功能。

本机暂存
IT 2012-05-15 23:44:18 / 累计浏览 3,160

利用sql load加载txt,csv及图片到数据库

这篇讲的是如何利用SQL*Loader工具,将MySQL导出的文本文件以及图片批量导入Oracle数据库。作者从一位朋友的求助电话出发——朋友想进行数据迁移,但在电话里始终说不清楚具体操作,于是作者直接通过几个实例来演示解决方案。 核心在于编写一个控制文件(.ctl),来精确定义加载规则。例如加载CSV时,文件里指定了源数据路径、目标表名、使用逗号作为字段分隔符,并明确了数据列(如GRADE, LOSAL, HISAL)与表字段的映射关系。通过类似`LOAD DATA`、`INFILE`、`FIELDS TERMINATED BY`这些关键指令,就能告诉Oracle如何解析和装填数据。文章不仅覆盖了标准的txt和csv文本,还提及了对图片等二进制文件的加载思路。 通过这种“直接上代码”的实战分享,作者把数据库导入这个常见但繁琐的运维操作,拆解成了可复制的步骤。对于需要处理跨平台数据迁移的DBA或开发者来说,这种基于控制文件的方案提供了清晰、可扩展的模板。

本机暂存
IT 2012-05-15 23:43:29 / 累计浏览 3,060

linux大磁盘分区工具parted

这篇讲的是在Linux下如何给超过2TB的大硬盘进行分区。 作者开篇点明了现实需求:如今大容量硬盘普及,但传统的MBR分区表存在2TB容量上限,导致很多传统工具无法处理。Linux自带的`parted`工具则是解决这个问题的好手。 文章重点对比了`parted`与另一个常用工具`fdisk`的核心差异。`parted`原生支持GPT分区表,能轻松管理大磁盘。更关键的是,它的操作是“实时”的,命令一旦执行就立即生效,而不像`fdisk`那样需要等到最后输入`w`才真正写入。这个区别至关重要,提醒管理员操作时必须格外谨慎。 为了帮助读者快速上手,文中还展示了`parted`工具的初始欢迎界面,给出了一个直观的起点。整体而言,文章从一个具体的技术痛点切入,清晰地介绍了解决工具及其关键注意事项。

本机暂存
IT 2012-05-15 23:42:34 / 累计浏览 4,620

将远程共享文件夹挂载到linux本地目录

客户要在不生成本地副本的情况下,将Windows虚拟机里10多T的扫描图片直接加载进数据库。这是一个典型的大数据量、高性能ETL场景,作者面对的核心矛盾是:物理主机无法直接挂载虚拟机磁盘,而传统的数据拷贝方式在数据量、时间成本和数据校验(MD5)上都不可接受。 文章首先探讨了在Windows虚拟机上安装Oracle客户端,使用SQL*Loader直接远程加载数据的方案。但由于安全策略限制(虚拟机无登录权限,数据目录仅开放读权限),该方案被否决。因此,作者转向了第二种思路:将Windows虚拟机上的扫描数据通过共享文件夹形式提供,然后将其挂载(mount)到Linux服务器的本地目录下。这样,从Linux应用的角度看,远程数据就像本地文件一样可以被直接访问和读取,为后续直接将数据流导入数据库(而非先落盘再导入)奠定了基础。文章给出了具体的实现验证开头,包括在Linux上创建测试表的SQL语句,预示着后续将进行实际的数据加载测试。

本机暂存
IT 2012-05-15 23:41:40 / 累计浏览 4,800

如何正确安装ORACLE使ORACLE状态最优

很多DBA在安装Oracle时习惯一路“下一步”,这种偷懒可能在未来埋下性能隐患和维护负担。这篇文章从安装实践出发,强调“正确安装”对数据库长期健康运行的重要性。 作者建议避免使用基本安装和模板建库,推荐选择“高级安装”并分步进行:先单独安装Oracle软件(尤其是企业版),后续再通过DBCA定制创建数据库。这样做的好处是,未来升级或打补丁时只需处理软件层,流程更简洁,无需在漫长的数据迁移中等待。 在数据库创建环节,文章特别指出了两个关键配置:慎用Enterprise Manager(OEM),因其本身可能引入性能开销;同时可在此步骤提前规划自动备份策略。整体思路在于,通过精简不必要的组件、分离软件与数据库安装,从源头上让Oracle环境更轻量、更易于管理。这样安装后的数据库确实更“健康”。

本机暂存
IT 2012-04-22 14:53:50 / 累计浏览 5,500

查看oracle数据库用户下的所有空表

这篇讲的是在Oracle数据库中,如何高效找出某个用户下所有没有存储数据的空表。作者从实际运维需求出发——清理无用对象、优化存储或排查问题时,常常需要快速定位这些“壳”表。文章没有停留在简单的`SELECT`语句上,而是对比了几种实用路径。 核心方案包括直接查询数据字典视图`DBA_TABLES`(或`USER_TABLES`),利用`NUM_ROWS`为0且无统计信息来初步筛选,但也指出了其局限性:`NUM_ROWS`统计信息可能未收集或不准确。更可靠的方法是结合`DBA_SEGMENTS`,检查表是否占用任何数据段,有段分配的才是真正有数据的表。文章还提到了编写一个PL/SQL脚本循环检查,或使用`DBMS_SPACE`包进行精确判断,这些方法虽然稍复杂,但结果最准确。 关键差异在于效率与准确性的权衡:简单视图查询速度快,但可能误判;段检查和脚本虽然耗时,但结果精确。文章最终建议,对于大型数据库,优先使用段级检查;对于快速排查,可辅以视图查询,并定期收集统计信息以保证其有效性。这种从问题场景到多种解法的梳理,对DBA和开发人员日常清理工作很有参考价值。

本机暂存