完全卸载Oracle 9i记事

1.停止Oracle服务 进入服务管理器,“开始-》运行-》services.msc”,停止那些Oracle服务, 他们都具有一个oracle或ora   的前缀。一旦停止了所有的Oracle服务, 我们建议将它们设置为手工启动模式(manual   start   mode)。

2.删除注册表中相关项   1)进入注册表编辑器;    2)、备份Windows   注册表。   启动Registry   Editor   并从菜单中选择   File   |   Export。     3)、用命令   regedt32启动Registry   Editor。找到HKEY_CLASSES_ROOT节点并删除所有以字符串   Oracle、ORA、ORCL开始的键。     4)、找到HKEY_LOCAL_MACHINE/SOFTWARE键并删除   Oracle   和   Apache   Group   键。     5)、删除HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\odbcinst.ini   下    面的Oracle   ODBC   Driver键。  

[...]

使用绑定变量和不使用绑定变量操作数据库

以下例子是在delphi中编程实现,数据库为oracle,具体的代码省略了,只说明情况。

1、不使用绑定变量

例子:删除同一张表的两条记录。

sql语句如下:

(1)delete from t_englishscore_score where STUDENTNUM=’200431500123′

and LESSONNAME=’test’ and YEAR=’2005′ and TERM=’上’;

(2)delete from t_englishscore_score where STUDENTNUM=’200431500123′

and LESSONNAME=’毕业设计’ and YEAR=’2007′ and TERM=’下’

此时查询v$sqltext视图(它能够反映oracle 中share pool中的sql解析共享情况):

ADDRESS

HASH_VALUE

SQL_ID

COMMAND_TYPE

PIECE

SQL_TEXT

0000000173D47990

2193311325

1mhba361bqjkx

7

0

delete from t_englishscore_score [...]

使用Merge语句同时执行插入和更新操作

考虑下列情况,对于一张表T,有(A,B)两列,进行下列操作:如果表T中存在A=‘a1’的记录,就更新对应的B列值为‘b1’;如果不存在,就插入这一条记录。

经典的处理方式是先查询,看记录是否存在,再确定是进行插入还是删除操作。

从oracle9i开始,就已经支持Merge语句,可以使用一条sql语句,同时执行插入和更新操作。

下面举一个例子,表t_englishscore_stuengname表,有studentnum和engname两列,现在需要处理一条记录:(’20011111111′,’Li Bo’),不确定是否插入还是更新,使用Merge语句如下:

merge into t_englishscore_stuengname t using (select ’20011111111′ as studentnum,’Li Bo’ as engname from dual) s on (t.studentnum=s.studentnum) when matched then update set t.engname=s.engname where t.studentnum=s.studentnum when not matched then insert (studentnum,engname) values(s.studentnum,s.engname);

有关Merge语句的详细说明参见下列网址,本文不予赘述。

[1] eygle. 使用Merge Into 语句实现 Insert/Update. http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html. [2] eygle. Merge用法:Oracle 10g中对Merge语句的增强. http://www.eygle.com/digest/2009/02/mergeoracle_10gmerge.html [3] google. www.google.com

[...]

在PL/SQL中计算采用四舍五入和delphi 6中计算采用四舍五入之间的误差

有系统用户反映,在其中使用delphi6的程序中计算一个数值为2.64,但是在另外一个模块中,相同的参数,计算出来却是2.63,之间相差了0.01。一查,后者是调用oracle中存储过程实现的,而前者在delphi6中实现。

在 仔细分析原因后,发现delphi 6中使用roundto或者simpleroundto都不是我们通常说的四舍五入,前者是采用银行家的四舍五入,即四舍六入五奇偶,而 simpleroundto这个函数也令人有点琢磨不透,有些是四舍五入,有些不是,比如对于 simpleroundto(12.95,-1)=12.9。

而在PL/SQL中,一律保留了1位,四舍五入,所以两种方法一比较,最后累计,就出现了误差。

解决方法,可以自己编辑一个函数处理,也可以按照下面一个网友的解释进行处理:

http://www.2ccc.com/idea.asp?articleid=1300 网友iamdream

以下是研究的结果(Delphi6):

RoundTo(及Round)函数使用所谓“银行家舍入法”<Banker’s Rounding>(对于舍入位后为5的情况,则舍入位为偶数,则舍,为奇数,则入),而Format函数则为正常的四舍五入法,取例如下:

0.145 RoundTo(0.145, -2) = 0.14

0.145 Format(‘%8.2f’, 0.145) = 0.15

0.155 RoundTo(0.155, -2) = 0.16

0.155 Format(‘%8.2f’, 0.155) = 0.16

另在进行浮点数的运算时,可能会出现0.14499999999999的情况,此时的值按数学上要求实际应为0.145,如用以上方法舍入到小数点后两位时,均不能达到想要的效果。

另SimpleRoundTo比RoundTo更接近四舍五入法,但不完全是四舍五入,如对0.145用SimpleRoundTo(0.145, -2)舍入时仍为0.14;

如果后面还有小数,如0.1450000001,此时舍入,则三者均为0.15!对1.145,SimpleRoundTo舍入为1.15!

故而如用RoundTo来四舍五入,则可在舍入位后的第二位加上5,如0.145,则加上0.0005,此时成为0.1455,再舍入时,就为0.15了!

因此四舍五入取两位小数时,只要先加上0.0001,然后用RoundTo或SimpleRoundTo即可。

“Memory Notification: Library Cache Object loaded into SGA”问题

最近AlertSid.log有错误如下: Tue Sep 15 00:00:06 2009 Memory Notification: Library Cache Object loaded into SGA Heap size 3708K exceeds notification threshold (2048K) Details in trace file /opt/oracle/admin/alpha/udump/alpha_ora_2177.trc KGL object name :XDB.XDbD/PLZ01TcHgNAgAIIegtw== Tue Sep 15 00:00:07 2009 Memory Notification: Library Cache Object loaded into SGA Heap size 4067K exceeds notification threshold (2048K) Details in trace file /opt/oracle/admin/alpha/udump/alpha_ora_2177.trc [...]

解决“Process m001 died……”问题,设置Processes数

最近服务器经常down掉,开始以为是机房空调坏了导致高温造成服务器自动停机的缘故,直到今天,空调弄好了,还down了,从alsertSid.log一查,有如下错误信息: Process m001 died, see its trace file Wed Sep 16 10:00:52 2009 ksvcreate: Process(m001) creation failed 原来是oracle进程数达到Processes上限了。在oracle中:sessions和processes的关系是: sessions=1.1*processes + 5 这样,通过修改processes可以同时修改process和sessions的目的。 解决过程如下: SQL> conn xxx/yyyy 已连接。 SQL> show parameter sessions;

NAME                                 TYPE        VALUE ———————————— ———– —————————— java_max_sessionspace_size           integer     0 java_soft_sessionspace_limit         integer     0 license_max_sessions                 integer     0 license_sessions_warning             integer     0 logmnr_max_persistent_sessions       integer     1 sessions                             [...]

关于SQL*Loader的用法

网上有很多好文,贴出网址以及一些摘要:

1、关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

http://www.blogjava.net/Unmi/archive/2009/01/05/249956.html

2、使用手册

http://www.psoug.org/reference/sqlloader.html

3、sqlldr语法

http://yumianfeilong.com/html/2007/03/20/49.html

4、faq

http://www.orafaq.com/wiki/SQL*Loader_FAQ

5、sqlloader,这篇很值得一看。

http://www.oracleutilities.com/OSUtil/sqlldr.html

其中写了一个自动生成控制文件的脚本:

—————————————————————— set echo off ver off feed off pages 0

accept tname prompt ‘Enter Name of Table: ‘ accept dformat prompt ‘Enter Format to Use for Date Columns: ‘

spool &tname..ctl

select ‘LOAD [...]

oracle下删除一个数据库

1、使用dbca。

2、手工删除日志、数据、控制、参数文件。

3、oracle10g以后,使用drop database命令:

shutdown abort; startup mount exclusive restrict; drop database;

Oracle10g重建EM

Oracle10G 的EM采用了web方式,并且分成了2个产品,database control和grid control。使用命令行工具emca可以创建,修改,重建或者删除dbcontrol的配置。而使用命令行工具emctl可以启动/停止EM console服务,察看服务状态等。

1.drop configuration files and repository run :

emca -deconfig dbcontrol db -repos drop

2. Logon SQLPLUS as user SYS or SYSTEM, and drop the sysman account and mangement objects:

SQL> drop user sysman cascade;

SQL> drop role MGMT_USER;

SQL> drop user MGMT_VIEW cascade;

SQL> drop public synonym MGMT_TARGET_BLACKOUTS;

[...]

Oracle10g EM无法连接数据库实例 & 正确修改DBSnmp和SYSMAN密码

SYSMAN和DBSNMP跟涉及到Oracle的EM,所以跟其他的用户修改密码方式有所区别。下面是这两个用户的默认密码和作用说明:

———————————————————————————-

DBSNMP

DBSNMP

The account used by the Management Agent component of Oracle Enterprise Manager to monitor and manage the database .

Oracle Enterprise Manager Grid Control Installation and Basic Configuration.

SYSMAN CHANGE_ON_INSTALL

The account used to perform Oracle Enterprise Manager database administration tasks. Note that SYS and SYSTEM can also perform these [...]