热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

如何让Oracle表列管理更加简单?

  Oracle数据库是目前为止最复杂的一个数据库之一设置表列宽。也正是这种复杂性,让Oracle数据库能够面对企业各种各样的需求。不过大部分时候,数据库管理员

  Oracle数据库是目前为止最复杂的一个数据库之一设置表列宽。也正是这种复杂性,让Oracle数据库能够面对企业各种各样的需求。不过大部分时候,数据库管理员掌握一些技巧,可以让数据库维护工作变得简单。笔者这里就以Oracle数据库中表列的管理为例,谈谈这方面的问题。

一、 把列设置为UNUSED状态,代替删除设置表列宽

如何让Oracle表列管理更加简单?

当数据库部署完成之后,即使在数据库使用过程中,数据库管理员仍然可以对数据库的表进行维护,如删除列等等设置表列宽。删除列将删除表中每条记录的相应列的值,同时释放其所占用的存储空间。所以如果要删除一个大表中的列时,由于其必须对每条记录都进行相应的处理,为此这个删除列的操作会占用比较长的时间。

  如有个数据库管理员一次在设计一个人员管理系统时,一开始是把人员的住址跟人员信息表放置同一个表中设置表列宽。可是后来证明这个设计是错误的。一方面因为人员住址的字段比较长,而且有些由于住址难以确定,这个字段还是空的。另一方面,一个人员其可能住址变更了好几次,而出于管理的需要,又要保存起以前的住址信息。

  为此最后一个人员可能同时对应多个住址信息设置表列宽。所以后来数据库管理员调整了设计,另外建立了一张表,然后利用人员编号把它们关联起来。由于那时表中的纪录已经比较多了,如果要删除列的话,那么可能这个删除作业需要执行时间比较长。

为了避免在数据库使用高峰期间由于执行删除列的操作而占用过多的系统资源(而且时间比较长),为此笔者建议不要马上采用DROP关键字来删除列设置表列宽

  而可以先用UNUSED关键字把某个列设置为不活跃状态设置表列宽。如可以利用命令ALTER TABLE ADRESS SET UNUSED,把某个列设置为不活跃。如此设置之后,从用户的角度来看,被设置为UNUSED状态的列于被直接删除的列之间是没有任何区别的。

  用户无法通过查询或者在数据字典中看到这些列设置表列宽。而且即使在表中,也可以插入相同列名的列。简单的说,对于用户来说,这个设置为UNUSED的列就好像删除了一样。但是从数据库角度来说,在是不一样的。其这个列只是别设置为UNUNSED列,但是在数据库中仍然是存在的。

  也就是说,这个列所占用的存储空间没有被释放设置表列宽。为此即使在数据库运行的高峰时期,为列加入这个标记也不会占用多少的时间和系统资源。

为此,笔者的意见是,当数据库比较繁忙时而且数据库表中的纪录又比较多,则可以不从物理上删除这个列,而先把这个列标记为UNUSED状态设置表列宽

  这可以减少因为删除列而给数据库正常使用带来的负面影响设置表列宽。虽然这要牺牲一点硬盘空间,可是现在硬盘便宜。为了数据库的性能,牺牲这点硬盘空间是值得的。等到数据库比较空的时候,再把这些列删除即可。这对于用户来说,是不会受到任何影响的。这只是在技术处理上的问题。

为了便于管理这些UNUSED列,在Oracle数据库中还提供了一张视图(这张视图的名字为USER_UNUSED_COL_TABS),帮助数据库管理员来管理这些列设置表列宽。通过查询这张视图,数据库管理员可以了解数据库哪些表中存在UNUSED列。然后数据库管理员可以根据实际情况,一个月或者一年来清除一下。

  这不仅可以提高数据库的运行效率,而且也不会因为删除列的操作影响到用户的正常使用设置表列宽

二、 给列表添加相关的注释设置表列宽

俗话说,好记性不如烂笔头设置表列宽。在数据库设计的时候,给表或者列添加一些必要的注释,可以提高其可读性,也有利于后续的维护与升级。像笔者这种专业的数据库设计与开发人员,往往一个人需要负责很多项目,即同时要负责多个企业的数据库软件。

  当项目数量一多,一年后可能就不知道某个数据库的某张表到底用来做什么用途设置表列宽。即使采用了比较合适的表名字编码或者列名字编码规则,但是凭借这些简单的代码,仍然不能够直观的反应出这些代码的含义。为此,在必要的时候,我们往往需要给表或者列添加相关的注释,方便后续对其进行维护与升级。

如何让Oracle表列管理更加简单?

为了实现这个目的,我们可以利用COMMENT关键字设置表列宽。如COMMENT ON TABLE 表名 IS ‘注释内容’即可。在使用这个命令的时候需要注意的是,注释中的内容必须利用单引号括起来,而不是使用双引号。因为如果注释中含有特殊字符的话,如单引号、通配符等等,最好能够采用其他的字符代替。

  如果非要用这些字符的话,那么就需要采用转义字符,让数据库系统认为这是普通的字符设置表列宽。通常情况下,注释的内容可以多大4000个字节,足够数据库管理员用来表述表的用途。另外在注释的内容中可以包含标点符号、空格字符、特殊字符(不建议使用)等等。而且还可以跨越多个物理行,以提高可读性等等。

  不过虽然其提供了长达4000个字节的说明,但是数据库管理员在写注释的时候,最好能够短话短说设置表列宽。不然的话,以后要花大量的时间来读这些备注的内容,可不是一件好差事。未必笔者认为,在写这个表注释的时候,最好能够点到为止,而不要想写项目说明书那样写的面面俱到。

除了给表添加注释外,在Oracle数据库中还可以给列添加注释设置表列宽。这个添加的方法跟上面的类似,只需要把关键字ON TABLE更改为ON COLUMN 即可。当有多个人共同开发一个数据库时,最好能够在表或者列中添加必要的注释。即使不在这里添加说明,那么在独立的设计文档中,也需要进行详细的说明。

  一般情况下,笔者认为需要说明如下内容设置表列宽。一是创建者(谁创建的或者谁更新的);二是创建的时间(什么时候创建或者什么时候更新的);三是需要注明创建或者更新的目的;四是要注明这个列的一些约束条件。另外需要注意的是,如果后来有人更新这个表或者列的时候,如调整某个字段的大小,最好不要把原先的注释覆盖掉。

  而是直接在原有的注释后面加入新的注释设置表列宽。这些措施有利于后续的维护以及数据库的升级。

三、 重新组织表设置表列宽

有时候出于改善数据库表的性能等目的出发,需要对Oralce数据库的表进行重新组织设置表列宽。如在Oracle数据库中,如果对表进行频繁的DML操作,会使得这个表产生比较多的空间碎片与行迁移,从而给数据库的性能带来负面影响。

  这种情况在一些事务型的数据库中是比较常见的设置表列宽。此时就需要重新组织表,如可以将移动一个位置,从而减少碎片,提高数据库的性能。


推荐阅读
  • 探索Java 11中的ZGC垃圾收集器
    Java 11引入了一种新的垃圾收集器——ZGC,由Oracle公司研发,旨在支持TB级别的内存容量,并保证极低的暂停时间。本文将探讨ZGC的开发背景、技术特点及其潜在的应用前景。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • oracle 对硬件环境要求,Oracle 10G数据库软硬件环境的要求 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • Oracle 10g 和 11g 32位 OCI.DLL 文件下载
    32位 PL/SQL Developer 访问 64位 Oracle 11g 数据库时,需要使用 32位的 OCI.DLL 文件以确保正常连接和数据访问。本文将详细介绍如何获取并配置此文件。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 探索UNIX操作系统的家族树
    通过回顾历史,我们可以更好地理解技术的发展。本文将带你深入了解UNIX操作系统的起源和发展历程,揭示其在现代计算中的重要地位。 ... [详细]
  • 本文详细介绍了如何在 Oracle 数据库中进行筛选备份和恢复操作,包括权限授予、目录管理、数据导出和导入等步骤。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • 图数据库与传统数仓实现联邦查询使用CYPHER实现从关系数据库过滤时间序列指标一、MySQL得到研报实体在Oracle中的唯一ID二、Oracle中过滤时间序列数据三、CYPHER ... [详细]
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • [附源码]计算机毕业设计JAVAjsp医药管理信息系统
    [附源码]计算机毕业设计JAVAjsp医药管理信息系统项目运行环境配置:Jdk1.8Tomcat7.0MysqlHBuilderX(Webstor ... [详细]
author-avatar
宝林
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有