| « | 三月 2010 | » | ||||
|---|---|---|---|---|---|---|
| 一 | 二 | 三 | 四 | 五 | 六 | 日 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
今天在调整一个SQL的时候发现有一个表使用了NVARCHAR2字段类型,在于VARCHAR2类型的字段连接时发生隐式转换(VARCHAR2 -> NVARCAHR2),导致SQL走了全表扫描。
SQL类似如下:
SELECT * FROM T1,T2 WHERE T1.NAME=T2.NAME AND T1.NAME='XXX';
其中T1的NAME类型为:NVARCHAR2
T2的NAME类型为:VARCHAR2 查看全文
在alert文件中,我们可能会看到这样的报错信息:
Wed Aug 20 17:16:37 2008
ORA-1652: unable to extend temp segment by 128 in tablespace DBA_TEMP
要解决这个问题,我们首先要导致这个问题的SQL,可能方法有几种: 查看全文
如果force_logging=no 则
对于普通表:
noarchive: append
archvie: nologging + append
临时表:
noarchive: append
archvie: append
如果force_logging=yes
对于普通表:
noarchive: 无法减少日志量
archvie: 无法减少日志量
临时表:
noarchive: append
archvie: append
由于临时表只保存临时数据,就算恢复不了也没问题,所以尽量不让它产生日志。
oradebug可以帮助我们做很多事情,如dump内存信息、设置事件、挂起进程等。本文主要介绍如何使用oradebug挂起进程。
查看全文
为一个RAC搭建standby和单节点搭建方法基本一致,我们可以把RAC看成是一个单节点的数据库,只需要保证所有节点的日志能传送到备库即可。
查看全文
为一个RAC搭建standby和单节点搭建方法基本一致,我们可以把RAC看成是一个单节点的数据库,只需要保证所有节点的日志能传送到备库即可。
查看全文
今天对一个排序分页查询进行了一次优化,优化后性能得到明显改观。下面用例子说明优化步骤。 查看全文
今天在处理一个会话满了的数据库,需要释放部分无用的session。根据V$SESSION的program可以简单确定PL/SQLDEV连过去的会话基本是无效会话,需要把这些会话都kill掉: 查看全文
今天接到开发人员报告:开发库的一个表不能更新数据。
登上开发库执行一下发过来的SQL,果然报错:
SQL> update CAT_AUTH_BAD_DRUG set PROCLAMATION_NUMBER = 'ss';
update CAT_AUTH_BAD_DRUG set PROCLAMATION_NUMBER = 'ss'
*
ERROR at line 1:
ORA-23474: definition of "NDMAIN"."CAT_AUTH_BAD_DRUG" has changed since
generation of replication support
今天登陆数据库时报错:ORA-00257 archiver error. Connect internal only, until freed。
查看全文
今天遇到一个bug,对临时表进行insert的时候产生异常多的redo,下面模拟过程:
查看全文
一般来说,数据库在创建完成后就不能修改字符集了,如要修改字符集,需要对原有数据进行导入导出后重建数据库来修改。但是也有一些例外的,如果从子集升级到超集,则可以直接修改而无需重建数据库。 查看全文
老话题了。
最近一个项目用到了透明网关,这里把配置过程简单记录下来,供大家参考。 查看全文
今天有朋友数据库启动报错,向我求助。其中报错信息如下:
SQL> startup
ORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information
最后发现问题出在参数设置冲突上,下面模拟这个过程。
这几天看了一下linux下的裸设备管理,做了一些笔记,不敢独享,共享如下:
(笔记的内容不一定正确,有错误请指出)
查看全文
本文主要介绍在linux下如何用静默方式卸载oracle软件。
在linux下卸载oracle软件比较简单,可以简单的把相关目录删除掉,然后清理一下/etc下oracle相关的文件就可以。
但还是有必要了解一下如何通过工具来卸载。
今天在linux上测试静默安装oracle时报错:
[oracle@suk1 database]$ ./runInstaller -silent -responseFile /soft/database/response/my.rsp
查看全文
最近做了一次跨平台的数据迁移,迁移要求是把部分用户的数据迁移到另一个数据库中。
源数据库环境是Solaris 10(x86_64) + ORACLE 10203 RAC + ASM
目标数据库环境是Linux AS 4(x86) + ORACLE 10203 + 文件系统
我在这次迁移用的是传输表空间技术。
查看全文
本文简单阐述在Linux AS 4中如何不用启动界面的情况下安装oracle 10g软件、创建数据库以及升级数据库,这就是oracle的静默安装。
查看全文
本文简单阐述在Linux AS 4中如何不用启动界面的情况下安装oracle 10g软件、创建数据库以及升级数据库,这就是oracle的静默安装。
查看全文
本文简单阐述在Linux AS 4中如何不用启动界面的情况下安装oracle 10g软件、创建数据库以及升级数据库,这就是oracle的静默安装。
查看全文
ORA-07445和ORA-00600是系统内部错误,一般是由于BUG引起的,要解决或者避免这些错误一般需要到metalink上查。metalink甚至专门推出了一个工具用于这两个错误的查找。
与普通错误不同的是,ORA-07445和ORA-00600是一系列错误的总称,引起错误的原因可能成千上万个,如何快速、准确地找出到错误的原因是解决这类问题的难点。
出现ORA-07445或ORA-00600错误时,一般都会产生一个trace文件,这个文件的路径和名称可以在alert文件中找到。
这篇文章主要是谈谈如何在trace文件找找出关键信息。
in和exists总结
今天在测试环境中,原来正常快速刷新的物化视图不能同步数据了,最后发现是因为在同一个库做exp、imp操作后使得物化视图日志失效了,不记录基表的数据变化了。
在解决问题的过程中发现了其他一些问题,这里一并记录。
最近做了一个rac数据库的迁移,中间涉及到很多部分内容,包括rac环境的搭建、ASM的设置、数据库的迁移、升级等。
本文是这次迁移工作的第八部分:迁移过程中遇到的错误。 查看全文
最近做了一个rac数据库的迁移,中间涉及到很多部分内容,包括rac环境的搭建、ASM的设置、数据库的迁移、升级等。
本文是这次迁移工作的第七部分:后续工作。
最近做了一个rac数据库的迁移,中间涉及到很多部分内容,包括rac环境的搭建、ASM的设置、数据库的迁移、升级等。
本文是这次迁移工作的第六部分:恢复数据库。
最近做了一个rac数据库的迁移,中间涉及到很多部分内容,包括rac环境的搭建、ASM的设置、数据库的迁移、升级等。
本文是这次迁移工作的第五部分:升级数据库。 查看全文
最近做了一个rac数据库的迁移,中间涉及到很多部分内容,包括rac环境的搭建、ASM的设置、数据库的迁移、升级等。
本文是这次迁移工作的第四部分:安装数据库软件。 查看全文
最近做了一个rac数据库的迁移,中间涉及到很多部分内容,包括rac环境的搭建、ASM的设置、数据库的迁移、升级等。
本文是这次迁移工作的第三部分:安装oracle clusterware。 查看全文
最近做了一个rac数据库的迁移,中间涉及到很多部分内容,包括rac环境的搭建、ASM的设置、数据库的迁移、升级等。
本文是这次迁移工作的第二部分:安装rac的准备工作。 查看全文
最近做了一个rac数据库的迁移,中间涉及到很多部分内容,包括rac环境的搭建、ASM的设置、数据库的迁移、升级等。
本文是这次迁移工作的第一部分:相关环境的说明。
今天用客户端链接一个测试库时出现错误ORA-00257: archiver error. Connect internal only, until freed。
数据库环境是SOLARIS 10 + 10203 RAC + ASM。
在rac中修改db_name的步骤与单实例步骤差不多,主要是要修改一些与cluster相关的参数。
查看全文
近段时间要在solaris下部署一套rac数据库,由于对rac了解不多,在安装过程中遇到许多问题,其中光crs就重装了3次。
这里简单记录一下如何在solaris下卸载crs。
查看全文
今天,在测试一个过程的是遇到一个ORA-00600错误:
Errors in file /opt/oracle/admin/citizen/bdump/citizen_j000_25812.trc:
ORA-00600: internal error code, arguments: [32695], [hash aggregation can't be done], [], [], [], [], [], [] 查看全文
我们都知道,全表扫描需要扫描HWM下的所有block,那么,
1、全表扫描时是按照什么顺序扫描block的?
2、一次IO能否跨越一个extent?
3、全表扫描是否一定对应着db file scattered read等待事件?
我们通过试验一一解答这些问题。
flashback database是10g推出的一个重大改进,它可以让我们不用做不完全恢复的情况下把数据库"回滚"到过去的某一个时间点。
你可以在创建数据库时设定flashback database,如果当时没有设置,可以按下面的步骤进行设置:
一致性读是oracle区别于其他数据库的重要特点之一,但一般来说,这个一致性读是sql级别的,只针对单个sql有效。
由于业务逻辑需要,我们可能需要在一个事务中的多个sql也能实现读一致性,也就是说,数据源在事务开始时就定下来了,不受其他会话影响。oracle的只读事务可以实现这个功能,它可以在事务级别上实现读一致性。
在yangtingkun的blog上看到《Oracle10g的简化连接方式》,并提及对建立dblink也适用。
本文在10g的环境下简单测试简化方式下建立dblink的方法。
今天在一台sun solaris 5.10系统使用vi报错:
# vi a
Unable to setup term:'unknown' missing in the terminfo database: No such file or directory
最近打算研究一下裸设备,于是在linux下测试了一下基于裸设备创建数据库看。以下是简单步骤: 查看全文
一直以来,我记住的一个知识点就是:SQLNET.AUTHENTICATION_SERVICES=(NTS)是使用OS认证的必须条件之一。
今天一个偶然的机会,才知道这个结论是不完全准确的。
主库出问题时,我们可以对备库做失败切换,使得应用继续运行。但是做失败切换的前提是:
主库的日志完全传送到备库上(包括联机日志上的redo信息),如果DATAGUARD是运行在最大保护或者最大可用模式下,这种切换一般没有问题。
但是如果DATAGUARD运行在最大性能保护模式下,可能需要用强行切换的方式来激活备库了。
强行切换与普通的失败切换的最大差别是:强行切换在数据库打开时需要resetlogs。由此带来的后果是:
1、可能有数据丢失
2、破坏了整个DATAGUARD的结构。
如果存在多个standby,则其他的standby在没有重建的情况下不能以被激活的库作为priamry,所有的standby必须要重建。
前两天把一个修改了一个分区表的索引后,执行job频频报错:
ORA-14098: index mismatch for tables in ALTER TABLE EXCHANGE PARTITION
这个错误是在分区表与一个普通表交换时发生的,检查发现,索引列是一致的,不知为何报错。
查阅相关资料后发现是因为分区表是全局索引,与用来交换的表的索引类型不一致造成的。下面简单重现错误:
如果主库出现故障无法修复的话,就需要在备库上做failover,使得应用可以继续运行。
查看全文
从9i以后,一般都不需要手工处理确实的日志,FAL自动会帮我们处理这些问题。
但是,并非我们就完全不用手工处理了,比如,你的磁盘空间爆满,归档日志在传到备库前被转移到其他地方,这种情况下FAL是不能解决问题的,需要手工处理一下。
查看全文
包含DBLINK的查询有两种:
1、所有的表都是DBLINK得到数据的远端表
2、既包含本地表,又包含远端表
在http://space6212.itpub.net/post/12157/304213中提到如果所有表都是远端表的话,那么该语句在远端执行,在得到结果后返回调用端。但是随便找了一个机器上做了几个测试就匆匆下结论了,今天遇到一个案例,推翻了这个结论。
查看全文
今天开发人员提了一个问题:如何根据自定义周期进行数据统计?
比如今天是2007/08/06,按7天作为一个统计周期,则统计时间周期分别是:2007/08/06 - 2007/08/12,2007/08/13-2007/08/19……
统计的时间段是不确定的。
这个问题归根到底是根据统计周期的长度把统计时间段划分为若干部分,这里提供一种方法,抛砖引玉,希望有更多的好方法。
在设计数据库的时候,可能不会考虑得太周全,添加或者删除联机日志的操作在所难免。
这篇文章就谈谈在DATAGUARD环境中如何添加或者删除联机日志。
查看全文
今天帮朋友解决oracle进程异常中断后不能登录的问题后,顺便帮他看了一下造成IDLE几乎为0的原因。
通过分析发现,都是因为不良SQL造成的。这些不良SQL的一个共同点就是:把运算放在了列端。
朋友的数据量非常大,我在本机上简单模拟现场,数据量上会小很多,但是仍然可以不同的写法对执行效率的差别。
今天一个朋友找我处理帮忙处理一个oracle问题,原因是用户不能登录了。
起因是这样的:
因为业务推广,访问量大增,造成oracle压力大增,系统IDLE几乎为0。我那朋友情急之下,把用户的连接都用kill -9的方式干掉了。
然后,就发现,怎么都登录不进去了,就挂在登录界面上,没有任何提示。
我登录上去看了一下,乖乖,ps -ef|grep ora_一个进程都没有了,也就是说,他把所有的连接包括oracle自身的关键进程都干掉了。
这个问题后来得到解决。下面在我本机简单模拟当时的场景,说说解决步骤和方法。
DATAGUARD的数据传输方式有两种:LGWR和ARCH。其中前者传送的是联机日志的redo,后者传输的是归档。
FAL是9i推出的DATAGUARD的一大改进,它可以自动传送备库缺失的日志,一般情况下,它是不需要手工干预的。
主库的日志要传输到备库,两者的密码文件中设置的口令必须一致。然而,如果我们不小心设置了不一致的密码,则需要重新生成备库的密码文件,但重置密码文件后,FAL还并不能自动处理日志的GAP,需要DBA做一些额外的工作。
在这种情况下,用LGWR和ARCH两种方式的处理方式有所区别,下面分别讨论: 查看全文
今天一个朋友问我,删除了一个存储过程是否可以恢复,想了想,恢复存储过程就相当于找到删除过程前SOURCE$表的数据,可以用flashback功能恢复。
下面的测试过程。
在DATAGUARD中,如果有备份,主库出现问题时,有多种恢复方式可选:
1、从备库拷贝相关文件到主库上恢复
2、拷贝备库备份到主库还原恢复
3、从主库备份还原恢复
本文主要讨论10G DATAGUARD中,主库丢失数据文件时,利用备库的备份恢复主库。
在DATAGUARD中,如果有备份,主库出现问题时,有多种恢复方式可选:
1、从备库拷贝相关文件到主库上恢复
2、拷贝备库备份到主库还原恢复
3、从主库备份还原恢复
本文主要讨论10G DATAGUARD中,主库丢失数据文件时,利用主库的备份恢复主库。
这种方式比较简单,和单机的备份恢复没什么区别。
简单来说,分布式事务是指涉及到多个数据库的事务。
本文通过例子讨论oracle处理分布式事务的原则及优化方法。
平台环境:
suk: linux as4 + oracle 9201
primary: windows xp + oracle 10.2.0.3
在DATAGUARD中,主库丢失文件时,有多种恢复方式可选:
1、从备库拷贝相关文件到主库上恢复
2、拷贝备库备份到主库还原恢复
3、从主库备份还原恢复
本文主要讨论10G DATAGUARD中,主库丢失数据文件时,用拷贝备库对应的数据文件方式恢复主库。
这种方法要分两种情况讨论:
一、备库文件SCN号比主库控制文件新
本文讨论10G DATA GUARD进行角色切换的步骤。
服务器信息:
primary:原主库,切换后就是备库
standby:原备库,切换后就是主库
最近,在使用10G的DG中遇到了几个错误(这里的错误主要指后台报错)。本文就这几个错误简单分析原因及解决方法:
查看全文
本为主要讨论在10G DG的最大可用保护级别下,如果备库发生故障,主库如何应对。
DG处于最大可用保护模式下,只有一个备库。
这篇文章主要讨论DG环境下如何切换保护级别。
数据库环境是linux as4 +10gr2。
查看全文
这篇文章主要介绍如何在10g下创建物理standby。
服务器信息:
主库:
IP:10.2.98.10
SID:Primary
备库:
IP:10.2.98.11
SID:Primary
OS平台都是基于linux,数据库版本是10.2.0.3
具体步骤如下:
我们知道,9i和10g下,用rman做全库备份时,rman会把数据文件、控制文件、参数文件等都备份,但是它们还有有差别的,先看看两者的备份日志:
查看全文
今天在用EXP/IMP迁移数据时出现问题。
环境是:
客户端:9201 + WINXP
源服务器:9204 + SOLARIS 8
目标服务器:9201 + WINXP
过程如下:
这篇文章主要讨论在不同standby_file_management设置下,当主库添加文件时,备库不能相应的创建文件时的解决方法。
查看全文
这篇文章主要讨论in、not in、exists、not exists什么时候可以使得外层的主查询用到索引。
先看例子:
今天在启动数据库的时候报错:
[oracle@standby dbs]$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on Sun Jun 17 03:32:27 2007
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup nomount pfile=?/dbs/initprimary.ora
ORA-00600: internal error code, arguments: [keltnfy-ldmInit], [46], [1], [], [], [], [], []
原因:
服务器hostname没有正确配置,通过hostname命令得到的主机名无法ping通,Oracle10g认为主机无法达到所以启动数据库报错。检查一下本机的hosts文件,发现因为修改主机名的时候没有把hosts文件对应的主机名做对应的修改,从而引发这个错误。
解决方法:
将hostname添加到/etc/hosts文件中,重新启动数据库。
NID是9iR2开始推出的一个命令行工具,它用来修改DB_NAME,DBID。你可以用此工具只修改DB_NAME或者DBID,也可以同时修改这两个东西。
NID的语法如下:
近期使用10G时遇到的两个问题:Memory Notification和ORA-3136
数据库版本是linux as4+10201。
今天做数据导出的时候遇到一个ORA-600:
ORA-00600: internal error code, arguments: [1234], [], [], [], [], [], [], []
ORA-00600: internal error code, arguments: [729], [18984], [space leak], [], [], [], [], []
这是UGA内存溢出的表现,溢出内存为729字节。
迁移需求:
1、两边数据保持一致
2、停机时间很短
3、不借助移动硬盘之类的设备
4、nocatelog
背景:
1、两边数据库和OS版本一致
2、DML操作比较频繁
3、原数据库数据量很大
在9i中,要得到SQL绑定变量的值,主要有以下几种方式:
1、sql_trace
2、10046
3、FGA
如果是10g,除了上面的三种方法外还可以使用:
4、V$SQL_BIND_CAPTURE(需要设置数据库参数,默认情况下保存的是15分钟前的绑定变量值)
5、审计
这篇文章主要介绍如何通过FGA的方式来得到绑定变量的值。
我们知道,在9i中,FGA只能审计SELECT 语句,而DML语句需要用普通审计或者触发器来记录。10g增强了FGA的功能,可以审计SELECT和DML语句了。
查看全文
重建索引有多种方式,如drop and re-create、rebuild、rebuild online等。下面简单比较这几种方式异同以及优缺点:
相关文章:
查看全文
重建索引有多种方式,如drop and re-create、rebuild、rebuild online等。下面简单比较这几种方式异同以及优缺点:
相关文章:
查看全文
重建索引有多种方式,如drop and re-create、rebuild、rebuild online等。下面简单比较这几种方式异同以及优缺点:
查看全文
今天在一个数据库服务器上生成pfile时报错:
SQL> alter system set db_cache_size=1200m scope=spfile;
System altered.
SQL> create pfile from spfile;
create pfile from spfile
*
ERROR at line 1:
ORA-07391: sftopn: fopen error, unable to open text file.
今天迁移数据库完成以后,在启动数据库时报错:
SQL> startup pfile=/u1/oracle/product/9.2.0/dbs/initzjtrade.ora
ORA-00600: internal error code, arguments: [OSDEP_INTERNAL], [], [], [], [], [], [], []
ORA-27302: failure occurred at: skgpwreset1
ORA-27303: additional information: invalid shared ctx
ORA-27146: post/wait initialization failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpsemsper
在yangtingkun老大的指点下,对主键刷新物化视图日志表的CHANGE_VECTOR$$有了进一步的认识,下面就对这个新的知识点做一个简单的总结。
查看全文
本文讲述如何用rman将一个库迁移到另一个服务器上。
服务器A:linux es4 + oracle9204 (源)
服务器B:linux es4 + oracle9204 (目标)
查看全文
oracle推出已经2年多了,但只在04年用过几个月,之后接触的数据库大部分是8i和9i,所以,很多10g的新特性没有接触到。
现在有时间可以学习10g了。打算用一系列的文章来记录学习10g新特性的心得。 查看全文
在低版本的oracle中,一旦对表进行了压缩,就不能添加删除字段了。但在10g下,可以对压缩表进行结构的变更。
看下面的例子:
查看全文
我们知道,压缩表可以使同样的数据占用更少的空间,它对空间的使用、性能的提高都有积极的影响。下面简单探讨一下oracle的压缩表。
查看全文
我们知道,在快速刷新物化视图中,源表必须建立物化视图日志来记录源表数据的变化,从而使得物化视图能够快速刷新。
今天以前一位同事提出这样一个问题:做一个update操作会产生两个mlog$日志。这与我印象中产生一条记录不同。
下面重现这个过程:
查看全文
对RAC接触不多,今天在测试环境启动RAC失败,经过一番努力,总算解决问题.下面简单记录一下:
查看全文
源表:物化视图数据源对应的表
基表:物化视图对应的表
本文主要内容包括:
1、如何使源表的数据变化不影响物化视图的快速刷新
2、建好物化视图后,当基表或者源表的结构发生变化对物化视图刷新的影响。
查看全文
主要功能:1、支持多收件人。
2、支持中文
3、支持抄送人
4、支持大于32K的附件
5、支持多行正文
6、支持多附件
7、支持文本附件和二进制附件
8、支持HTML格式
8、支持......
我们知道用start with ... connect by ...可以生成树。有时候我们需要对生成的树进行裁剪,得到我们真正需要的数据。
对树的裁剪分为去除节点和去除分支两种,它们的差别就是把条件放在不同的位置。
请看例子:
查看全文
一、概述
用FC5作为工作环境已经很长时间了,但一直没有安装oracle数据库,嫌麻烦,但是很多测试操作还是不敢在测试库弄,毕竟测试库也有不少开发人员在用,没办法只好在本机装一个数据库了。
在FC5上安装9204很麻烦,需要修改很多东西才能顺利安装。本人在安装的时候话了差不多三天才完全安装好,算是用时最多的一次安装了。
很多文档都说需要对GCC进行降级,但我发现安装过程不需要对GCC进行降级。
oracle锁的最小单元是行,oracle在锁定记录的时候直接在对应的行做一个标识,但我们并不能通过视图查询出被锁的行。(想想道理也很简单,如果每一个被锁的行对应一条记录,那么在大数据量更新的数据库是不可接受的)。
但是,我们可以通过其他方式查询出被锁的行。
今天看到yangtingkun在blog上遇到无法删除 db link的问题(http://yangtingkun.itpub.net/post/468/259496),我在半年前也遇到类似的问题,当时也作了简单的记录,现在贴出来,希望大家一起分析原因。
查看全文
最近在看tom的《oracle高效设计》一书,在高效的设计模式一章中,tom介绍了如何利用函数索引来实现一些特殊的约束。
查看全文
最近要监控一个没有安装oracle客户端的服务器,如果发现异常,将发送邮件通知。目前已经有现成的oracle发送邮件的存储过程,需要做的是从一个没有oracle客户端的服务器上调用该存储过程。在网上搜索一番后,发现AnySQL是一个不错的免客户端工具。
我们知道,rowid的最后三位是存储当前行在block中的行号。那么这个行号是什么东西呢?是不是就和rownum是一个概念呢?
是不是插入越晚的记录,行号就越大呢?
DBA日常工作的一个重要部分就是对数据进行监控了。其中监控方法有很多,可以用触发器,可以用审计。
相对来说,审计可以消耗更低的资源,但不能捕获正在执行的SQL;而触发器就可以做到,但是它消耗的资源较可观。
下面用一个例子介绍如何用触发器监控数据库的DML操作。
查看全文
最近打算把9i 的OCP教程看一遍,作一些简单的笔记,作为备忘。
PL/SQL看似简单,但实际使用起来还是有很多技巧和误区的。以下记录的是复习过程中想到的、和容易出现错误的地方。
这些东西在教程大部分是没有记载的。
第五章 聚合函数
查看全文
最近打算把9i 的OCP教程看一遍,作一些简单的笔记,作为备忘。
PL/SQL看似简单,但实际使用起来还是有很多技巧和误区的。以下记录的是复习过程中想到的、和容易出现错误的地方。
这些东西在教程大部分是没有记载的。
第四章:多表查询
查看全文
最近打算把9i 的OCP教程看一遍,作一些简单的笔记,作为备忘。
PL/SQL看似简单,但实际使用起来还是有很多技巧和误区的。以下记录的是复习过程中想到的、和容易出现错误的地方。
这些东西在教程大部分是没有记载的。
第三章:单行函数
查看全文
最近打算把9i 的OCP教程看一遍,作一些简单的笔记,作为备忘。
PL/SQL看似简单,但实际使用起来还是有很多技巧和误区的。以下记录的是复习过程中想到的、和容易出现错误的地方。
这些东西在教程大部分是没有记载的。
第二章:查询特定数据及排序
查看全文
最近打算把9i 的OCP教程看一遍,作一些简单的笔记,作为备忘。
PL/SQL看似简单,但实际使用起来还是很很多技巧和误区的。以下记录的是复习过程中想到的、和容易出现错误的地方。
这些东西在教程大部分是没有记载的。
第一章:编写基本的SQL语句
查看全文在日常工作中经常需要用10046跟踪一些进程,为了方便,写了一个可以方便查看trace的小脚本。 查看全文
我们知道,无论对多大的数据做DML操作,执行commit都可以很快完成,但如何删除建有全文索引的记录,在commit时可能会很慢。
根据推断可以知道是由于域索引造成的,那么在有域索引的情况下,commit时,oracle还做了那些额外工作呢? 查看全文
一、同步索引做了什么
我们知道,在数据被修改后,不能被查询到了,直到索引被同步。那么同步索引做了那些工作呢? 查看全文
oracle全文索引有很多种查询方式,最常用的可能是contains。下面就contains简单阐述oracle全文检索执行查询的运行机制。
一、----------------- 安装全文检索组件---------------------
1、建立ctxsys用户需要的表空间(如果需要用已存在的表空间,这一步可以忽略)
查看全文
最近数据库出问题:隔段时间(没有什么规律)有几个进程就占用了绝大部分的CPU,且一直运行的相同的SQL(不同的进程运行的sql可能会不一样)。如果不强行中止的话,这些进程会运行这个sql几天几夜也不会停止。
我把运行的sql单独拿出来运行,运行速度并不慢,最多不会超过5s。
数据库后台也没有什么相关的报错信息。
多方查找资料无果,只能考虑临时解决方法。
查看全文
由于32位下操作系统的进程访问4g(2的32次方)以下的虚拟地址,而这4g的地址又要为内核、可执行代码、共享库等保留地址空间,所以,实际上可以留给SGA的空间只有1.7G左右。
但32位的linux 为可执行代码、共享库保留的地址空间太大,我们可以降低这部分的地址空间,腾出更多的虚拟地址空间给SGA,从而达到扩展SGA的目的。
查看全文
在资料上看到过如果不是当前联机日志出问题,且如果日志未归档,可以用clear unarchived 命令清空归档日志,达到打开数据库的目的。
然而,很少资料提到clear后应该做一些什么后续工作来保证数据的安全。
对在日志损坏时,什么时候需要加入隐含参数打开数据库的问题一直没弄清楚,做了一下测试,总结如下:(我也不知道对不对,请高手指正)
查看全文今天打开邮箱,发现很多数据库报错信息: 查看全文
我们在做性能分析的时候需要出statspack报表,为了方便,我们一般使用job方式定时生成报表,但是这种方式有一定的潜在危险。如果忘记移除这个job,而statspack所在表空间没有限制大小的话,可能会把大量占用磁盘空间,引起数据库或操作系统崩溃,所以我们需要定期对一些过期的统计信息进行清除。
查看全文
9i提供了联机重定义表的方法,可以让你在基本不影响原表的DML情况下修改表结构。
实际上,联机重定义表并不是完全的联机重定义,在最后交换表名的时候会短暂地锁定原表和中间表,但这个过程很短暂,相对于传统方法来说,这是一个进步。
查看全文
在library cache pin和library cache lock(一)我们简单介绍了介绍library cache pin和library cache lock的成因,下面介绍如何解决library cache pin和library cache lock等待。
查看全文
一、概述
一个实例中的library cache包括了不同类型对象的描述,如:游标,索引,表,视图,过程,等等.
这些对象不能在他们被使用的时候改变,他们在被使用的时候会被一种library locks and pins的机制锁住.
一个会话中,需要使用一个对象,会在该对象上先得到一个library lock(null, shared or exclusive模式的)
这是为了,防止其他会话也访问这个对象(例如:重编译一个包或视图的时候,会加上exclusive类型的锁)或更改对象的定义.
总的来说,library cache pin和library cache lock都是用于share pool的并发控制的。pin和lock都可以看作是一种锁。
locks/pins会在SQL语句执行期间一直保持,在结束的时候才释放。
在itpub上有人问这样一个问题:
不少高手作了回答,这里记录一下,供以后查询
1、select * from v$db_object_cache where locks > 0 and pins > 0 and type='PROCEDURE';
2、select * from v$access where OBJECT=upper('PROCEDURE_NAME');
今天再重启测试库的时候,发现有这么一个报错信息:
ORA-00130: invalid listener address (ADDRESS=(PROTOCOL=TCP)(HOST=test2)(PORT=1521))
查看全文
orastress主要测试数据库的压力。它可以测试数据库的CPU或者内存的压力(以只读方式),也可以使用包括普通INSERT和直接路径INSERT两种方式测试数据库的I/O能力。
orastress只能运行在windows下,但它也可以测试远程服务器的压力。 查看全文
接oracle压力测试之orabm(二) 查看全文
近日浏览eygle的站点,对其中压力测试的专题很有兴趣,于是 多方参考文档后实践了一把,过程记录如下 查看全文
前段时间写了一篇文章,简单介绍如何使用outline,原文地址:
http://space6212.itpub.net/post/12157/145831
原来的文章主要针对非绑定变量的情况的,但在实际中我们会使用到绑定变量,今天我们就接着讨论下使用绑定变量时如何使用outline
查看全文
最近需要优化一个系统,由于多种原因不能修改原代码,故用outline来进行优化。
statspack上找出性能底下的SQL,这里以其中一个优化举例如何使用outline
查看全文
WINDOWS是很脆弱的系统,可能装完没几天就会崩溃,如果你在WINDOWS下装有oracle,那怎么来恢复这个数据库呢?
查看全文
今天,一直运行正常的物化视图刷新忽然执行不正常
SQL> exec dbms_refresh.refresh('WAI_REFRESH');
begin dbms_refresh.refresh('WAI_REFRESH'); end;
ORA-02019: connection description for remote database not found
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 794
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 851
ORA-06512: at "SYS.DBMS_IREFRESH", line 683
ORA-06512: at "SYS.DBMS_REFRESH", line 195
ORA-06512: at line 1
/*
用prebuild mv 方法迁移数据
原理:用perbuild方法建立的物化视图,在drop物化视图时,不会把其对应的基表删除。
好处:主要是利用物化视图增量刷新的方法减小down机时间。
*/
查看全文oracle内部提供发送邮件的包,用它能给我们对数据库的监控带来很大用处。 查看全文
今天在做两表关联update的时候,发现产生的日志量远远超出想象,update的sql如下:
update t1 set t1.name=(select t2.name from t2 where t1.id=t2.id)
其中t2只有几条数据。按我以前的观点,只更新t1表中id在t2存在的记录,但测试结果让我大吃一惊:
查看全文
今天接到开发人员报告:某些商品对应的图片字段经常被莫名其妙置空,导致在图片在界面上显示不出来。由于有可能更新该字段的程序很多,不能确定是那个程序更新了这些数据,所以需要用logmnr来分析日志,以确定是那个SQL对图片字段执行了更新。
查看全文
在实际工作中,往往先在开发库开发程序,然后再移植到产品库的,但这样也往往会出现问题,如在开发库中效率很高的SQL在产品库确运行得很慢。
由于SQL的运行效率受很多因数影响,所以在调试作用不大的情况下,可以用outline来稳定个别SQL的执行计划。
查看全文
今天在检查时,发现某个物化视图日志占用的空间超过150M,再检查看,该物化视图日志表的记录数有150W,由于其对应的物化视图没有会刷新一次,结合业务量分析可知:物化视图日志不能正常清除。
下面的解决步骤
查看全文
/* 作用:由于经常需要在SQL*PLUS查看执行路径,但oracle默认是不支持查看执行路径的,需要我们手工安装环境。
本脚本的目的就是快速安装查看执行计划的环境,并作相关授权。
安装完毕后,数据库的所有用户都可以在SQL*PLUS中使用set autotrace ......
参数:运行该脚本需要输入两个参数:
第一个是目标数据库的sys密码;
第二个参数是指向目标数据库的tnsname,如果连接的是本地数据库,则该参数留空,注意第二个参数要加"@"
作者:suk
本脚本在oracle 9i测试通过 */
查看全文
查询中经常遇到类似这个的情况:
select * from t where t.name like '%a%';
其中a是变量。像这种情况是不会走索引的,如果表很大,这将是非常耗费资源的。
优化这个查询有两种方法:
1、拆分name
2、全文检索
查看全文
今天接到开发人员报告:在用jdbc导入数据时遇到ORA-01461
ORA-01461 can bind a LONG value only for insert into a LONG column
Cause: An attempt was made to insert a value from a LONG datatype into another datatype. This is not allowed.
Action: Do not try to insert LONG datatypes into other types of columns.
这个错误一般发生在插入或者更新Varchar2类型的字段
查看全文
前段时间发连连一个查询数据库主外键关系的文章(http://space6212.itpub.net/post/12157/107584),但有个缺点:不能一目了然地查看多层级联关系,故今天根据以前对sql作了一些改进,以树状结构显式多层级联关系,这对于处理设置了级联删除的表非常有用
查看全文
接到一个需求,将正式库的表的结构及索引导入到测试库中,数据及触发器、存储过程等都不要。
这个需求的重点是得到表的列表,9i后提供sys_connect_by_path函数,利用这个函数可以轻而易举地得到这个列表了;
查看全文
今天对数据库进行例行检查,在alert文件发现如下错误:
ORA-00600: 内部参数错误,参数: [729], [12284], [space leak], [], [], [], [], []
上metalink查询,是一个bug,从7.0到10.1的版本都有可能遇到。引起这个错误的原因是进程内存泄漏,但这个不会对数据库造成恶劣的影响,可以在参数文件中加入以下语句来忽略这个错误:
event = "10262 trace name context forever, level 4000"
其中:level后接的数值表示忽略的内存大小范围,单位是byte,本例表示如果内存泄漏不超过4k就忽略掉,不会报错。
工作需要用物化视图对表结构和数据进行单向同步,由于源表结构变化时,物化视图需重建。
结合实际工作,将需要做的操作写成一个脚本:
define mv_name='&mv_name'
exec dbms_refresh.subtract('test.wai_refresh','&mv_name');
drop MATERIALIZED VIEW &mv_name;
create MATERIALIZED VIEW &mv_name REFRESH FAST WITH PRIMARY KEY for update as select * from &mv_name@wai.souchang.com;
BEGIN
DBMS_REFRESH.ADD (
name => 'test.wai_refresh',
list => '&mv_name',
lax => TRUE);
END;
/
commit;
在实际调用时,只需要输入一次源表的名称即可完成物化视图的重建。
由于测试需要,需要把外网数据定时同步到内网中,并且需要内网数据可以进行DML操作,且需要在下次同步时内网变化的数据需要全部丢弃。由于是单向同步,可以用可写物化视图来实现这个功能。
下面是主要步骤
查看全文
今天遇到一个很奇怪的问题
在配置高级复制时,新建了一个dblink,后来不知道做过什么操作,怎么也不能删除这个dblink
最后通过删除link$相关记录,然后再重新插入LINK$表的方式实现了删除数据库链接。
造成这种现象的原因现在也没有搞清楚
查看全文
在日常数据维护中,经常删除数据,要是这些数据所在的表有外键关联,又不设置成级联删除的话,就需要先清空子表的相关数据了。要找出所有的主外键的关联是一个比较头疼的事情,下面给出一个例子,可以得到某用户下的所有主外键关系:
查看全文
表结构如下:
SQL> desc item_tag
Name Type Nullable Default Comments
------------------- ---------- -------- ------- --------
ITEM_TAG_ID NUMBER(18)
ITEM_TAG_SEQ_NUMBER NUMBER(16) 9999999
TAG_ID NUMBER(16)
CREATE_DATE DATE SYSDATE
ITEM_ID NUMBER(18)
其中:TAG_ID和ITEM_ID组合建立了一个唯一性索引
求交集的三种方法:
查看全文
物化视图
1、快速刷新(增量刷新)时,需要建立materialized view log以便记录数据的变化(对应表MLOG$_master_name),所有对主表的数据变化都通过内部触发器记录到MLOG$_master_name,作为物化视图数据增量刷新的依据。
如果名为MLOG$_master_name的表已经存在,则oracle会在后面加上编号,如
MLOG$_master_name1
2、可写或者可更新物化视图,oracle会建立USLOG$_materialized_view_name记录发生在物化视图上的数据变化,以便将更新的数据退回主站点或者将更新的数据复位。对于只读物化视图是不会建立这个log的
一直以为物化视图和普通视图不同之处是物化视图是物理存在的、实际占用空间的,而普通视图是逻辑意义上的。今天发现错了:物化视图也是一个逻辑上的概念,只不过在建立物化视图时,它会自动生成一个与物化视图名称相同的表,实际数据都存在表里
测试如下:
查看全文
在昨天的方案中,并没有实现对由系统自动生成约束名的约束的修改和删除的同步。
考虑到这种情况的同步较为复杂,决定通过before触发器防止SYS_XXXX之类对象的创建
触发器代码如下:
查看全文
工作需要同步两个用户的数据库结构,故写了一个简单的数据库结构同步方案,主要通过触发器+存储过程实现,目前还不完善
/*
源数据库:发出DDL语句的数据库
目标数据库:需要与被源数据库结构同步的数据库
注意:1)需要显示授权,如create table ,create index等,最好把用户拥有的角色对应的系统权限都显式授权
2)对由系统自动生成的约束的修改和删除未实现同步
*/
总体设想:尽量把分析表可能消耗的资源和对系统的影响降到最低
方案:对需要分析的表执行监控,然后定期分析oracle认为需要分析的表
主要用到DBMS_JOB+SP,重点在于既保证分析结果的准确性,又不会太影响业务的运转。
实现过程很简单……
查看全文
今天遇到一个需求,需要对两个数据库做数据同步,由于两个数据分别处于内网和外网,无法直接连通。由于数据量较大,同事建议用EXP做增量备份。我的观点是EXP的增量备份没有意义,因为增量备份最小的差异单元是表,也就是说只要一个表的数据有变动,那么这个表就要被全表导出。同事的观点是EXP的增量是只导出新增的数据行,并说以前做过测试验证过。
目前我们的数据库版本是9204。
后来我做了一个试验,证明他的观点是错误的
首先在数据库的suk用户下建立a、b两个表,并分别插入2、3条数据,执行导出:
C:>exp system/space6212 file='d:tempincri_com.dmp' inctype=complete log='d:
empincri_com.log' full=y
Export: Release 9.2.0.1.0 - Production on 星期五 3月 24 15:14:10 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
EXP-00041: INCTYPE 参数已废弃
今天要在网络上传文件,由于文件较大,打算让它在后台传输。
配置好ssh密钥匙,执行命令:
nohup scp firedrake_20060324.dmp root@lan106:/root &
过了一会,断开终端,重新登陆查看了一下,发现文件已经不再传输。
之后把命令写到一个脚本里,再执行
nohup ./a.sh &
断开终端后,传输也正常。
自己原来一直以为nohup也支持命令,才发现它只支持脚本!
1、安装oracle,DELL的服务器,4G内存,基于32位的linux平台上,在分配内存的时候,随手就分了55%的内存给oracle,结果安装的时候报错
ORA-27123: unable to attach to shared memory segment
找我过去帮忙,开始以为是kernel.shmmax出问题,调大了问题依旧,后来想起是32位平台下1.7SGA的问题,按照网上的步骤成功扩展了SGA,但是安装成功后,服务器重启时发现,OS启动过程中在启用SWAP时巨慢无比,估计要20分钟左右。多方查资料无果,问题依旧,郁闷!
2、在安装数据库时选错字符集,唯有自己重装数据库
3、去IDC托管服务器,网络死活连不上,IDC的人测试用他的仪器测试网线没有问题,用那个网线连到笔记本也可以正常上网,各种方法用了仍然没有结果。最后换了一根网线,OK了。再用自己带去的仪器测试之前的网线,测出问题了。得出两个结论:
(1)不能轻易相信别人的仪器
(2)服务器比笔记本娇贵
4、还是托管服务器的事情,在公司里运行得好好的系统,在IDC里调试过程发现,启动过程非常缓慢,需要人工干预才能进入系统。后来发现是服务器raid1中的一块硬盘出问题了,可能是在路上颠簸把硬盘弄松了,重新插拔硬盘,OK。
自己恭喜一下!