Category Archives: 文章:技术相关

在Windows下管理Oracle9i 服务

在Windows 操作系统下安装Oracle 9i时会安装很多服务——并且其中一些配置为在Windows 启动时启动。在Oracle 运行在Windows 下时,它会消耗很多资源,并且有些服务可能我们并不总是需要。你会发现不使用Windows 图形界面就可以快速、完全地关闭数据库会很有用。 只要拥有管理员权限就可以通过net start 启动一个服务,或者通过net stop 命令停止一个服务,从而控制以下服务中的任何一个。在Windows XP 中,可以通过在控制面板的服务中改变想要禁用的服务(OracleOraHome…)的启动类型(Startup Type)参数,双击某个服务查看其属性,然后将启动类型属性从自动改为手动。 使数据库在本地工作唯一需要运行的服务是OracleServiceORCL 服务(其中ORCL 是SID)。这个服务会自动地启动和停止数据库(使用shutdown 中断)。如果安装了一个数据库,它的缺省启动类型为自动。如果主要是访问一个远程数据库,那么可以把启动类型由自动改为手动。 OracleOraHome92HTTPServer 服务(OraHome92 是Oracle Home 的名称)是在安装Oracle 时自动安装的Apache 服务器。一般情况下我们只用它来访问Oracle Apache 目录下的Web 页面,比如说JSP 或者modplsql 页面。 OracleOraHome92TNSListener 服务只有在数据库需要远程访问时才需要(无论是通过另外一台主机还是在本地通过 SQL*Net 网络协议都属于远程访问)。不用这个服务就可以访问本地数据库。 OracleOraHome92ClientCache 服务缓存用于连接远程数据库的Oracle Names 数据。正常情况下该服务的启动类型是配置为手动的。然而,除非有一台Oracle Names … Continue reading

Posted in 文章:技术相关 | Leave a comment

如何彻底删除Oracle

软件环境: 1、Windows 2000+ORACLE 8.1.72、ORACLE安装路径为:C:\ORACLE 实现方法: 1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务。 2、 开始->程序->Oracle – OraHome81->Oracle Installation Products-> Universal Installer 卸装所有Oracle产品,但Universal Installer本身不能被删除。 3、 运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。 4、 运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动 这个列表,删除所有Oracle入口。 5、 运行refedit, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application, 删除所有Oracle入口。 6、 开始->设置->控制面板->系统->高级->环境变量 删除环境变量CLASSPATH和PATH中有关Oracle的设定。 7、 从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标。 8、 删除\Program Files\Oracle目录。 9、 重新启动计算机,重起后才能完全删除Oracle所在目录。 10、 删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入 口目录及所有子目录,并从Windows … Continue reading

Posted in 文章:技术相关 | Leave a comment

[Oracle]为布尔字段值选择一种高效的设计策略

在设计数据库表结构时,选择一种高效的策略来存储一个可以在很多编程环境中使用的逻辑布尔值是非常重要的。(虽然 Oracle 没有 Boolean 数据类型来表示数据库字段,但是在 PL/SQL 中却具有 Boolean 数据类型。) 任何布尔定义的字段还应该被正确进行约束检查,以确保在插入/更新时输入了有效的值。 create table tbool (bool char check (bool in (‘N’,’Y’));insert into tbool values (‘N’);insert into tbool values (‘Y’); 最常见的设计是模拟很多 Oracle 的数据字典视图中使用的类似布尔的标志,选择‘Y’表示真,‘N’表示假。然而,要正确地与宿主环境交互,比如与 JDBC、OCCI 和其它编程环境交互,最好选择0表示假,选择1表示真,从而使getBoolean 和setBoolean 能够正确地处理它们。 We could define a Boolean as … Continue reading

Posted in 文章:技术相关 | Leave a comment

Windows右键菜单定制技巧

  加装了应用软件之后,鼠标器右键点桌面取“新建”时其弹出菜单有时会增加该软件的快速启动选项。但这一选项其实很少用得到。增加了这些菜单项反而使鼠标取“新建”项时菜单弹出变慢。一般情况下这些新增的菜单项很难去掉,但通过修改注册表可以将不需要的项目删除。放心,这一注册表修改属于既简单又安全的操作,只要按如下两条简单说明做,不会出问题。   打开注册表(不会?这样:开始->远行。输入“regedit”,回车。)   加亮HKEY_CLASSES_ROOT(就是用鼠标左键点一下这个目录)。   按Ctrl+F,查找ShellNew(注意大小写)   会找到许多ShellNew。找到后看ShellNew的上一级目录名,与桌面->右键->新建里的菜单项对照,通常都能从注册表目录名猜出那个是与“新建”菜单项相对应的。比如HKEY_CLASSES_ROOT.txtShellNew对应的是记事本(看中间的”.txt”)。   可以在注册表与桌面之间来回切换查看。   确定这是你要去除的菜单项后,将ShellNew改为ShellNewOld(不要漏了那个”New”).   改完一项可以立即到桌面点右键查看修改得对不对。改对了,该菜单项就会消失。这一注册表修改法的最大好处是,不需重启动就可以当场看修改效果。若发现改得不对(想消除的菜单项仍在),无非将刚改过的注册表目录从ShellNewOld改回ShellNew罢了。   有许多ShellNew是非显示的,在右键->新建中并无对应项,这些ShellNew跳过不理就是的。

Posted in 文章:技术相关 | Leave a comment

Oracle不同数据库间对比分析脚本

Oracle不同数据库间对比分析脚本(石骁騑 2001年09月20日 10:19)Oracle数据库开发应用中经常对数据库管理员有这样的需求,对比两个不同实例间某模式下对象的差异或者对比两个不同实例某模式下表定义的差异性,这在涉及到数据库软件的开发应用中是经常遇到的。一般数据库软件的开发都是首先在开发数据库上进行,开发到一定程度后,系统投入运行,此时软件处于维护阶段。针对在系统运行中遇到的错误、bug等,还有应用系统的升级,经常需要调整后台程序,数据库开发人员经常遇到这样一种尴尬的事情,维护到一定时期,开发库和运行库之间出现了一些差异,而这些差异又是什么。还有一种情况就是如果应用在很多地方同时使用,每次的后台升级,那些数据库作了升级,那些还没有作升级,如果没有详细记录的话,也会造成我们的尴尬事情。 另外,如果要搭建Oracle的高级表复制环境,在规划好了复制的架构以及复制的表后,在正式将需要复制的表加入到复制组之前,一个重要工作就是检查这些需要复制的表在主节点和主定义节点间的差异性。如果这些表定义间存在任何细微的差别,如某个字段在一个节点是允许Null,而在另一个节点是Not Null,在将表加入到复制组时都会出现这样的错误,“ORA-23309 object string.string of type string exists”,其实造成这个错误的原因就是复制主定义节点和主节点之间表的定义存在某些差异,系统认为是两个不同的表,但是在两个数据库中具有同样的名称。如果需要复制的表很多,手工对比两个节点复制表之间的差异是需要很大工作量,而且不一定准确。 业界有名的数据库软件辅助产品提供商美国Embarcadero公司(www.embarcadero.com)在其全套数据库解决方案中就相应提供了一个叫Change Manager的产品,该产品一个很大的用途就是对比分析不同实例间的差异。Oracle公司的OEM(oracle enterprise manager)包中也相应提供了一个工具叫做DB-Diff,也用来比较两个数据库间的差异。 其实对于普通的数据库开发在某种程度上说根本不需要上面提到的这些工具软件,况且这些产品不是随便可以得到并且使用的。针对上面提到的这些问题,提供了两个SQL脚本,可以轻松实现对比分析两个不同数据库实例间对象的差异以及表定义的差异。 一、对比两个不同实例下某模式中对象差异 在运行下面的脚本之前,必须首先创建当然数据库用户和需要对比的两个实例间的数据库联接。下面是运行该脚本的一个例子。在SQL/PLUS下运行该脚本,系统出现如下提示和运行结果: 对象属主(模式): repadmin第一个实例的数据库联接名称 (包括 @):@ora_zs第一个实例的数据库联接名称 (包括 @):@ora_sjjk 已选择2行。 已选择2行。 其中程序要求输入对象属主,也就是对比那个用户,这里是repadmin用户。然后是需要对比的实例联接名称,这里是ora_zs和ora_sjjk,最后给出对比报告。 附:PL/SQL程序脚本清单: set linesize 80set verify offset feedback offset pause off;accept obj_owner prompt ‘对象属主(模式): ‘accept … Continue reading

Posted in 文章:技术相关 | Leave a comment

Oracle系统中表外键的更名

Oracle系统中表外键的更名(石骁騑 2001年09月06日 10:16)Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系。外键涉及到两个表,其中一个称之为父项表,另一个称之为子项表。 父项表(parent table)是参照约束的基础,即通过检查这张表的有效数据情况来判断约束是否成立,它是参照约束的条件,影响约束,而不受约束的任何影响。 子项表(child table)是参照约束的对象,当其发生变化,如有新数据输入时,通过比较父项表中的有效数据状况,来判断这些变化是否符合约束条件,若不符合,则拒绝要发生的变化。 在实际应用系统中,开发者为了保证系统的完整性,一般要定义大量的外键。然而,如果外键的命名不规范,如采用系统自动生成的名称,则在以后的系统运行维护中会造成很大的麻烦。如在系统运行后,加载大量数据或者进行一些数据转换操作等时,出现外键错误时,根据系统提示的外键错误,根本不可能直接定位到那两个表间的外键发生错误,需要浪费很多时间查找造成错误发生的外键的父项表和子项表,然后才能进一步确定是那条记录违反了外键约束条件。通常,我们采用这样的命名规则来命名外键FK_Child_table name_Parent_table name。由于外键名称的最大长度限制在30个字符之内,对child_table_name和Parent_table name不一定和原表一模一样,可以采取一些简写的办法,但名称一定要能反映出约束的两个表。这里的命名,Child_table name指子项表,也就是约束表,Parent_table name是指父项表,也就是被约束的表。 下面来详细讨论如何将应用系统中不规范的外键命名修改为规范的外键名称。在讨论之前,需要提醒读者注意的是,完成下面的操作需要花费较长的时间,所以一定要规划在系统空闲时来完成。同时这里的外键更名,采用的方法是首先删除然后重建,涉及到删除应用系统对象的操作,所以在操作之前,为安全起见,应该备份应用系统。 一、生成系统目前的外键报告单首先生成系统目前模式下的所有外键情况报告单,SQL脚本如下: /******************************************************************************脚本1:列出当前模式下所有外键的报告表,可以将其spool到某个文件中******************************************************************************/ SELECT RPAD(child.TABLE_NAME,25,’ ‘) Child_Tablename,RPAD(cp.COLUMN_NAME,17,’ ‘) Referring_Column,RPAD(parent.TABLE_NAME,25,’ ‘) Parent_Tablename,RPAD(pc.COLUMN_NAME,15,’ ‘) Referred_Column,RPAD(child.CONSTRAINT_NAME,25,’ ‘) Constraint_Name FROM USER_CONSTRAINTS child,USER_CONSTRAINTS parent,USER_CONS_COLUMNS cp,USER_CONS_COLUMNS pc WHERE child.CONSTRAINT_TYPE = ‘R’ ANDchild.R_CONSTRAINT_NAME = PARENT.CONSTRAINT_NAME … Continue reading

Posted in 文章:技术相关 | Leave a comment