用Table变量返回多行数据
要让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成。REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化。Oracle 9i 通过引入的管道化表函数纠正了后一种情况。下面是一个具体的例子:create type PersonInfo as object(id number,name varchar2(200)); create type PersonInfoArray as table of PersonInfo ;create or replace function GetPersonInforeturn PersonInfoArray pipelined is v_PersonInfo PersonInfo;begin for v_count in 1..30
一次RAC节点宕机的解决过程
1. 情况介绍海哥反馈大连某院的Oracle 10g RAC平均每个月都要宕机一次,一个节点自动重启,奇怪的是故障的时间没有规律,有时还发生在基本上没有业务的凌晨。医院目前使用的Windows 2003 Server(32 Bit),数据库版本是10.2.0.3。另外海哥还反映系统还伴有Ora-04031错误。2. 问题的诊断过程。 由于同时出现了down机和ora-04031错误,首先判断是不是由于内存耗尽,导致的一个节点down机,之前在32bit系统中遇到过类似错误;但由于down机也可能发生在系统压力很小的凌晨,这一判断首先被推翻。 向海哥索取了两个节点的alertSID
查询gv$session引发大量的PX Deq Credit: send blkd事件
一个用户提交了一个awr报告,发现有大量的PX Deq Credit: send blkd事件:Top 5 Timed Events EventWaitsTime(s)Avg Wait(ms)% Total Call TimeWait ClassCPU time 3,023 43.0 db file sequential read320,8001,205417.1User I/OPX Deq Credit: send blkd4529982,20714.2Otherlibrary cache lock19,034425226.0Concurrencylatch: library cache3,0233661215.2ConcurrencyOracle对这个事件的描述:This wait event indicates that we are doing a non-blocking test to see if any channel has returned a message. We should see that al
NFS保存rman备份时的mount选项
今天在用使用nfs保存rman备份时,出现如下提示,意思是nfs的mount参数不对:RMAN> backup datafile 1 format '/nfs/archive/%s_%U_%P.dbf';Starting backup at 15-SEP-09using target database control file instead of recovery catalogallocated channel: ORA_DISK_1channel ORA_DISK_1: sid=146 devtype=DISKchannel ORA_DISK_1: starting full datafile backupsetchannel ORA_DISK_1: specifying datafile(s) in backupsetinput datafile fno=00001 name=/u01/app/oracle/oradata/orcl/system01.dbfchannel ORA_DISK_1: starting p
mysql的安装
基本上按照这个链接的说明安装成功:http://tech.sina.com.cn/s/2008-05-05/07372174929.shtml过程只遇到了一个问题,在启动mysqld的时候,出错:[root@rhel local]# mysqld_safe 090624 22:09:18 mysqld_safe Logging to '/usr/local/mysql/data/rhel.err'.090624 22:09:18 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data090624 22:09:18 mysqld_safe mysqld from pid file /usr/local/mysql/data/rhel.pid ended日志中的错误为:/usr/local/mysql/bin/mysqld: File './mysql-bin.index' not found (Errc
断电引起ora-01200的数据库恢复
一个10g的库断电后,打开时出现ora-01200的错误:SQL> connect / as sysdba;已连接到空闲例程。SQL> startup;ORACLE 例程已经启动。Total System Global Area 612368384 bytes Fixed Size 1250428 bytes Variable Size 155192196 bytes Database Buffers 448790528 bytes Redo Buffers 7135232 bytes
linux下添加10g rac节点OUI-10009错误的解决办法
一linux下的10g RAC环境,使用$ORACLE_HOME/oui/bin/addNode.sh在新节点上安装数据库软件时,出现OUI-10009错误: OUI-10009 --> There are no new nodes to add 提示没有新添加的节点,可以使用如下命令添加节点 ./addNode.sh -silent "CLUSTER_NEW_NODES={rac3}" -logLevel trace -debug 如果节点名称是已经删除过的节点,安装时会提示已经安装了节点,这时候可以使用下列命令先更新节点信息,再安装新节点: $ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=Oracle_home "CLUSTER_NODE
linux下网卡bonding[转]
所谓bonding,就是将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP地址是不可能的。通过bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址。Kernels 2.4.12及以后的版本均提供bonding模块,以前的版本可以通过patch实现。[@more@]1.确认你目前使用的网卡,检查/etc/sysconfig/network-scripts目录下以ifcfg-开头的文件,应该为eth0, eth1...2. 配置虚拟网卡bond0可以使用DHCP,也可以配置static IP,最好通过vi编辑配置文件引用[root@server1 ~]# cd /etc/sysconf
断电后回退段损坏引起的ora-00600错误修复一例
一用户的817的库启动时出现如下错误:Recovery of Online Redo Log: Thread 1 Group 3 Seq 1608 Reading mem 0 Mem# 0 errs 0: D:ORACLEORADATAORACLEREDO01.LOGTue Feb 24 15:46:59 2009Errors in file D:oracleadminoraclebdumporacleSMON.TRC:ORA-01595: error freeing extent (6) of rollback segment (3))ORA-00600: internal error code, arguments: [4193], [291], [299], [], [], [], [], []Tue Feb 24 15:47:17 2009Completed: alter database open可以看到,数据库已经正确打开,但由于2号回退段损坏,导致了ora-01600 [4193]
分区交换的速度为什么快?
Oracle的分区交换功能,用来实现对数据“滑动窗口”操作,就是可以把数据从分区表中指定分区移出到一个表,或把一个表的数据移入到指定的分区中。[@more@] 分区交换的速度是非常快速的,只是数据字典的更新,在移动过程中,数据行的rowid都不会发生变化。实验过程如下:1. 创建分区表SQL> Create Table range_example(Id Number,Name Varchar2(20),DeptNO Varchar2(20)) 2 Partition By List(DeptNO) 3 ( 4 Partition p_mz Values('MZ'), 5 Partition p_zy Values('ZY') 6 ) 7 ;Table created2.插入数据,表有两个