这两天遇到客户因为误操作,将RAC环境下的所有共享存储格式化掉了,客户只有一个最近的RMAN的0级全备(无数据文件,无控制文件,无归档日志,无redo日志),需要帮忙恢复。将大致的恢复过程记录一下。
0.恢复共享存储是第一步,给存储原厂打电话,原厂推是os的问题,让给os打电话,结果只能初始化了,最后只能恢复到被识别的状态,一切从头开始。
1.因为集群软件是装在本地的,所以恢复rac的集群环境,只需要将ocr和vdisk重新配置一下,就可以了。可以执行root.sh脚本来进行重新的配置,如果中间报一个已经被配置过的提示,那就先用dd清除ocr和vdisk的信息,并删除相应的目录文件,如下:
rm -rf /usr/tmp/.oracle /var/tmp/.oracle /tmp/.oracle /etc/oracle/* /var/opt/oracle/*
rm -rf /etc/init.cssd /etc/init.crs* /etc/init.evmd /etc/init.d/init.cssd /etc/init.d/init.crs
rm -rf /etc/init.d/init.crsd /etc/init.d/init.evmd /etc/rc3.d/K96init.crs /etc/rc3.d/S96init.crs
rm -rf /etc/rc.d/rc2.d/K96init.crs /etc/rc.d/rc2.d/S96init.crs
2.恢复完集群环境之后,开始恢复数据库。因为询问到客户有去年年底的一个RMAN的0级全备,以及控制文件的快照没有放到共享存储上,故可以采用重建控制文件+restore备份的方法来恢复。中途遇到很多问题,因为所有的日志备份均放到共享存储下的,故这次恢复在recover的步骤时是没有日志用来补充的。所以restore databse until 时间后,再recover,再alter database open resetlogs后,会报一个需要恢复数据文件的错误提示,操作的时候运气不好,刚好遇到的是需要恢复datafile 1,再折腾了几个小时候,终于发现按照正常的手段是行不通的.
3.因为没有日志,无法使得数据库达到一致性,所以只有采取修改隐藏参数的办法来忽略数据库的不一致,来强行打开数据库.先将数据库打到mount状态,在做完restore,recover之后,将隐藏参数修改 alter system set "_allow_resetlogs_corruption"=true scope=spfile;再shutdown数据库,启动到mount状态之后,alter database open resetlogs; resetlogs打开数据库后,运气仍然不是太好,又遇到了ORA-00600 2662号的错误.
4. 当使用修改_allow_resetlogs_corruption ,再打开数据库时遇到了ORA-00600 2662号的错误, 如果SCN相差不多,可以通过多次重起数据库解决 ,但是这次遇到的SCN相差很大(通过查v$datafile和v$datafile_header的CHECKPOINT_CHANGE#来判断),这个时候只有再修改另外一个隐藏参数 _minimum_giga_scn来解决问题._minimum_giga_scn的作用是推进SCN号,该参数值的单位是billion,也就是说设置了该参数后,SCN号会变成XX* (1024*1024*1024) ,XX可以通过2662的几个参数来确定. 2662后的参数[2662],[a],[b],[c],[d],[e]…[a] Current SCN WRAP,[b] Current SCN BASE,[c] dependent SCN WRAP,[d] dependent SCN BASE,[e] Where present this is the DBA where the dependent SCN came from.
5.当修改了2个隐藏参数之后,数据库终于能启动了,但是alert日志还是会报一些600的错误,暂时忽略.用exp(expdp可能会报错)将数据全部导出,重建新的实例,再用imp导入数据到新的库中.exp的时候需要注意一个参数compress,这个参数可以降低HWM,使的imp的时候,时间相对尽量少一些.
posted @
2012-04-12 00:24 xrzp 阅读(384) |
评论 (0) |
编辑 收藏
早上做个实验,update数据的时候报错ora-30036:无法按8扩展段(在还原表空间‘undotbs_new’中)
1.查询了一下undo表空间的使用,发现已经超过了80%
SELECT a.tablespace_name as tablespace_name,
to_char(b.total/1024/1024,999999.99) as Total,
to_char((b.total-a.free)/1024/1024,999999.99) as Used,
to_char(a.free/1024/1024,999999.99) as Free,
to_char(round((total-free)/total,4)*100,999.99) as Used_Rate
FROM (SELECT tablespace_name, sum(bytes) free FROM DBA_FREE_SPACE GROUP BY tablespace_name) a,
(SELECT tablespace_name, sum(bytes) total FROM DBA_DATA_FILES GROUP BY tablespace_name ) b
WHERE a.tablespace_name=b.tablespace_name
AND a.tablespace_name='UNDOTBS_NEW'
ORDER BY a.tablespace_name;
2.将undo表空间大小重新加大点,解决问题~
alter database datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\UNTOTBS_NEW_01.DBF' resize 2048M;
posted @
2011-11-07 10:30 xrzp 阅读(18035) |
评论 (0) |
编辑 收藏
v$sqltext:存储的是完整的SQL,SQL被分割
v$sqlarea:存储的SQL 和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息.v$sqlarea 忽略了执行计划等差异,只是在形式上sql文本看起来一样.相当于做了个聚合,是多个不同执行计划的sql的聚合和累计信息
v$sql:存储的是具体的SQL 和执行计划相关信息,v$sqlarea 可以看做 v$sql 根据 sqltext 等 做了 group by 之后的信息
v$sql_plan:代表了具体的sql的执行计划,通过下面3个字段做连接(与v$sql)
ADDRESS RAW(4),HASH_VALUE NUMBER,CHILD_NUMBER NUMBER
posted @
2011-11-07 00:00 xrzp 阅读(339) |
评论 (0) |
编辑 收藏
这几天安装oracle,检查包的时候,发现一些包没有装上,使用rpm来装的时候,又发现包的依耐性很重,所以就搭建一个本地的源,使用yum install来安装.
1.挂载安装介质
mount /dev/cdrom /mnt/cdrom
如果是实体机:
mount -o loop 镜像所在目录 挂载点
2.vi /etc/yum.repos.d/server.repo
[dange] #随意填
name=red hat #随意填
baseurl=file:///mnt/cdrom/RedHat/Server #光盘挂载,Server目录所在路径
enable=1 #yum开关
gpgcheck=1 #是否检查密钥
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release #密钥所在地
3.如果安装软件包提示没有key的话导入key
cd /mnt/cdrom
rpm --import RPM-GPG-KEY-redhat-release //安装验证文件,导入key
yum list //列出仓库中的所有软件,查看yum是否搭建成功
yum clean all //清空yum仓库
4.OK,可以直接使用yum install了
posted @
2011-10-20 09:22 xrzp 阅读(401) |
评论 (0) |
编辑 收藏
1.现象:装clusterware,执行第二个脚本的时候可能会报错
Running vipca(silent) for configuring nodeapps
/u01/app/oracle/crs/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
2. 解决方案:分别修改 $CRS_HOME/bin 目录下的srvctl和vipca文件,在vipca文件ARGUMENTS=""行之前和srvctl文件的export LD_ASSUME_KERNEL行之后增加 unset LD_ASSUME_KERNEL 语句.
修改之后再用root用户执行vipca就可以了.
posted @
2011-10-16 23:31 xrzp 阅读(306) |
评论 (0) |
编辑 收藏
Mount Options for Oracle files when used with NAS devices [ID 359515.1] |
|
| 修改时间 23-SEP-2011 类型 BULLETIN 状态 PUBLISHED | |
In this Document
Purpose
Scope and Application
Mount Options for Oracle files when used with NAS devices
RAC
Single Instance
References
Applies to:
Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 11.2.0.2 - Release: 10.1 to 11.2
Information in this document applies to any platform.
Oracle Clusterware, Oracle Real Application Clusters, NASPurpose
The purpose of this bulletin is to document the options with which the NAS systems should be mounted. This note does not cover the new dNFS feature that was introduced in 11g.
Scope and Application
This document is relevant to all environments using Oracle Clusterware & RAC.
Mount Options for Oracle files when used with NAS devices
RAC
In the table below
- Binaries is the shared mount points where the Oracle Home and CRS_HOME is installed.
- Datafiles includes Online Logs, Controlfile and Datafiles
- nfsvers and vers are identical on those OS platforms that has nfsvers. The ver option is an alternative to the nfsvers option. It is included for compatibility with other operating systems
- Please note that the mount options on each of the following cells are applicable only to those type of files listed in the column heading.
- For RMAN backup sets, image copies, and Data Pump dump files, the "NOAC" mount option should not be specified - that is because RMAN and Data Pump do not check this option and specifying this can adversely affect performance.
Operating System | Mount options for Binaries ## | Mount options for Oracle Datafiles | Mount options for CRS Voting Disk and OCR |
Sun Solaris * | rw,bg,hard,nointr,rsize=32768, wsize=32768,proto=tcp,noac, vers=3,suid | rw,bg,hard,nointr,rsize=32768, wsize=32768,proto=tcp,noac, forcedirectio, vers=3,suid | rw,bg,hard,nointr,rsize=32768, wsize=32768,proto=tcp,vers=3, noac,forcedirectio |
AIX (5L) ** | rw,bg,hard,nointr,rsize=32768, wsize=32768,proto=tcp, vers=3,timeo=600 | cio,rw,bg,hard,nointr,rsize=32768, wsize=32768,proto=tcp,noac, vers=3,timeo=600 | cio,rw,bg,hard,intr,rsize=32768, wsize=32768,tcp,noac, vers=3,timeo=600 |
HPUX 11.23 *** -- | rw,bg,vers=3,proto=tcp,noac, hard,nointr,timeo=600, rsize=32768,wsize=32768,suid | rw,bg,vers=3,proto=tcp,noac, forcedirectio,hard,nointr,timeo=600, rsize=32768,wsize=32768,suid | rw,bg,vers=3,proto=tcp,noac, forcedirectio,hard,nointr,timeo=600 ,rsize=32768,wsize=32768,suid |
Windows | Not Supported | Not Supported | Not Supported |
Linux x86 # ****
| rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp, vers=3, timeo=600, actimeo=0 | rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp,actimeo=0, vers=3,timeo=600 | rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp,noac,actimeo=0, vers=3,timeo=600 |
Linux x86-64 # ****
| rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp,vers=3, timeo=600, actimeo=0 | rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp,actimeo=0, vers=3,timeo=600 | rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp,noac,vers=3, timeo=600,actimeo=0 |
Linux - Itanium | rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp,vers=3, timeo=600, actimeo=0 | rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp,actimeo=0, vers=3,timeo=600 | rw,bg,hard,nointr,rsize=32768, wsize=32768,tcp,noac,vers=3, timeo=600,actimeo=0 |
* NFS mount option “forcedirectio” is required on Solaris platforms when mounting the OCR/CRS files when using Oracle 10.1.0.4 or 10.2.0.2 or later (Oracle unpublished bug 4466428)
** AIX is only supported with NAS on AIX 5.3 TL04 and higher with Oracle 10.2.0.1 and later (NetApp)
*** NAS devices are only supported with HPUX 11.23 or higher ONLY
**** As per BUG 11812928, the 'intr' & 'nointr' are deprecated in OEL 5.6 kernels and up including Oracle Linux 6. It is harmless to still include it, but the "NFS: ignoring mount option: nointr" will appears. This message can be ingnored.
# These mount options are for Linux kernels 2.6 and above for older kernels please check Note 279393.1
Due to Unpublished bug 5856342, it is necessary to use the following init.ora parameter when using NAS with all versions of RAC on Linux (x86 & X86-64 platforms) until 10.2.0.4. This bug is fixed and included in 10.2.0.4 patchset.
filesystemio_options = DIRECTIO
Single Instance
Operating System | Mount options for Binaries | Mount options for Oracle Datafiles |
Sun Solaris * (8, 9, 10) | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,proto=tcp,suid | rw,bg,hard,rsize=32768,wsize=32768,vers=3,[forcedirectio or llock],nointr,proto=tcp,suid |
AIX (5L) ** | rw,bg,hard,rsize=32768,wsize=32768,vers=3,intr,timeo=600,proto=tcp | rw,bg,hard,rsize=32768,wsize=32768,vers=3,cio,intr,timeo=600,proto=tcp |
HPUX 11.23 **** | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,timeo=600,proto=tcp,suid | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,timeo=600,proto=tcp, suid, forcedirectio |
Windows | Not Supported | Not Supported |
Linux x86 # | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,timeo=600,tcp | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,timeo=600,tcp,actimeo=0* |
Linux x86-64 # | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,timeo=600,tcp | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,timeo=600,tcp,actimeo=0* |
Linux - Itanium | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,timeo=600,tcp | rw,bg,hard,rsize=32768,wsize=32768,vers=3,nointr,timeo=600,tcp |
* actime=0 or noac can be used
References
http://now.netapp.com/Knowledgebase/solutionarea.asp?id=kb7518
http://linux.oracle.com/pls/apex/f?p=102:2:3947951439689189::NO::P2_VC_ID:424
相关内容
|
posted @
2011-10-16 23:16 xrzp 阅读(1518) |
评论 (0) |
编辑 收藏
1.检查时区:
检查/etc/sysconfig/clock设置:
ZONE="Asia/Shanghai"(Linux会拷贝/usr/share/zoneinfo/Asia/Shanghai 到/etc/locatime作为本地时区,如果我们需要改变时区,那么只需要修改/etc/sysconfig/clock,并且将对应的/usr/share/zoneinfo/Asia的时区文件拷贝成/etc/localtime即可)
UTC=false
ARC=false
2.安装NTP包:
rpm -ivh ntp-xxxxxx.rpm
或者:
yum install ntp
3.编辑/etc/ntp.conf文件:
服务端:
server 127.127.1.0
fudge 127.127.1.0 stratum 11
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
客户端:
server 192.168.0.11 prefer #192.168.0.11为服务端的ip地址
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
4.重启ntp服务:
service ntpd restart
5.等待5分钟,测试客户端更新时间:
ntpdate 192.168.0.11
Oct 16 21:09:28 ntpdate[8316]: step time server 192.168.0.11 offset -1791.709393 sec
6.在客户端将更新时间加入crontab:
(1).cp /usr/sbin/ntpdate /usr/bin/
(2).crontab –e
加入
*/1 * * * * /usr/sbin/ntpdate 192.168.0.11 ; hwclock –w
posted @
2011-10-16 23:14 xrzp 阅读(408) |
评论 (0) |
编辑 收藏
gunzip xxx.cpio.gz
cpio -idcmv < xxx.cpio
posted @
2011-10-16 23:02 xrzp 阅读(444) |
评论 (1) |
编辑 收藏
1.查看版本
crsctl query crs softwareversion
crsctl query crs activeversion
2.管理
srvctl start nodeapps -n <node1 hostname>
srvctl start nodeapps -n <node2 hostname>
srvctl start asm -n <node1 hostname>
srvctl start asm -n <node2 hostname>
srvctl start database -d <database name>
srvctl start service -d <database name> -s <service name>
crs_stat -t
srvctl stop service -d <database name> -s <service name>
srvctl stop database -d <database name>
srvctl stop asm -n <node1 hostname>
srvctl stop asm -n <node2 hostname>
srvctl stop nodeapps -n <node1 hostname>
srvctl stop nodeapps -n <node2 hostname>
crs_stat -t
posted @
2011-10-16 23:01 xrzp 阅读(249) |
评论 (0) |
编辑 收藏
当服务器没有装图形化界面的时候,如不能使用xhost之类的命令,就不能使用vnc了,那这个时候可以使用xmanager来代替
1.网上可以下载一个xmanager企业版,下载完后打开Xbrowser,在help-->about Xbrowser中输入注册码
2.在服务器端
DISPLAY=192.168.X.X:0.0
export DISPLAY
echo $DISPLAY
3.使用xmanager的xshell来打开图形化界面.(有可能会提醒运行一个rootpre之类的脚本)
posted @
2011-10-14 01:35 xrzp 阅读(497) |
评论 (0) |
编辑 收藏
在Redhat5之前通过/etc/sysconfig/rawdevices配置raw的控制文件,通过/etc/init.d/rawdevices来管理raw设备的启动和关闭.
在Redhat5之后,需要编辑/etc/udev/rules.d/60-raw.rules 这个文件.
1.假设已经把一个硬盘新建了几个区
fdisk -l /dev/sdc
/dev/sdc1
/dev/sdc2
/dev/sdc3
2.修改/etc/udev/rules.d/60-raw.rules
添加:
ACTION=="add", KERNEL=="sdc1",RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdc2",RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdc3",RUN+="/bin/raw /dev/raw/raw3 %N"
假设这个设备是给oracle用的,那再加上权限
KERNEL=="raw[1-3]*", NAME="raw/%k" OWNER="oracle" GROUP="oinstall", MODE="0660"
3.修改完之后重启服务
start_udev
4.查看
raw -qa 或者 ls -lrt /dev/raw/
5.取消映射
raw /dev/raw/rawX 0 0
posted @
2011-10-14 01:28 xrzp 阅读(439) |
评论 (0) |
编辑 收藏
1.停止数据库
2.停止Listener
3.用su或者重新登录到root将oracle安装目录删除
4.将/usr/bin下的文件删除(删除这三个文件后,Oracle就不能使用了)
rm /usr/local/bin/dbhome
rm /usr/local/bin/oraenv
rm /usr/local/bin/coraenv
5.将/etc/oratab删除
6.将/etc/oraInst.loc删除
7.将oracle用户删除(若要重新安装,可以不删除)
8.将用户组删除(若要重新安装,可以不删除)
posted @
2011-10-14 01:22 xrzp 阅读(335) |
评论 (1) |
编辑 收藏
做一个awr报告,在Load Profile可以查看到每秒的redo size(单位是byte),而redo log一般切换时间是1小时2-3次,按照3次来计算,就是20分钟切换一次,所以redo log的大小就 = (redo size per second) * 60 * 20.
如果不能做awr报告,就去查看alert日志,看日志的切换频率,根据切换的频率来确定redo log的大小.
可能会用到的sql语句:
select * from v$logfile;
select * from v$log;
alter database add logfile group x ('F:\oraredolog\REDO0x.LOG') size xxxM;
alter database drop logfile group x;
alter system switch logfile;
alter system checkpoint;
posted @
2011-10-10 13:34 xrzp 阅读(622) |
评论 (0) |
编辑 收藏
在虚拟机上起动系统的时候,每次都发现Sendmail服务很费时间,决定将其关闭了,反正也没怎么用.
1.关闭sendmail服务
[root@node1 ~]# /etc/rc.d/init.d/sendmail stop
Shutting down sm-client: [ OK ]
Shutting down sendmail: [ OK ]
2.
关闭sendmail自启动
[root@node1 ~]# chkconfig sendmail off
3.确认sendmail自启动已被关闭
[root@node1 ~]# chkconfig --list sendmail
sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off
posted @
2011-10-10 11:36 xrzp 阅读(352) |
评论 (0) |
编辑 收藏
V9.7中提供了更简单易用的降低高水位标记功能。只需要使用ALTER TABLESPACE命令就可以达到效果。同时DB2还提供了两个表函数MON_GET_TABLESPACE和MON_GET_EXTENT_MOVEMENT_STATUS来获取和监控表空间以及数据块移动信息。
1.MON_GET_TABLESPACE语法
MON_GET_TABLESPACE--(--tbsp_name--,--member--)
tbsp_name是表空间对象,如果是空值,则会对所有的表空间操作。member的默认输入是-1,指当前成员,如果是-2,则是所有数据库成员。这个函数的返回值说明:
tbsp_name:表空间名
tbsp_type:表空间类型
tbsp_state:表空间状态
tbsp_used_pages:已使用页
tbsp_free_pages:空闲页
tbsp_total_pages:总页
tbsp_page_top:高水位标记页
reclaimble_space_enabled:值1代表可回收空间
select * from table(MON_GET_TABLESPACE(null,-2));
2.获取表空间信息
SELECT varchar(tbsp_name, 16) as tbsp_name,
RECLAIMABLE_SPACE_ENABLED,
TBSP_USED_PAGES,
TBSP_FREE_PAGES,
TBSP_PAGE_TOP
from TABLE(MON_GET_TABLESPACE('', -2)) AS t
where t.TBSP_PAGE_TOP > t.TBSP_USED_PAGES
该语句筛选出了所有高水位标记大于已使用页的表空间
3.ALTER TABLESPACE 语法
ALTER TABLESPACE--tablespace-name----------------------------> >----+-REDUCE--+-------------------------------+--+-----------------------------+-+ | +-| database-container-clause |-+ '-| on-db-partitions-clause |-' | | +-| all-containers-clause |-----+ | | +-MAX---------------------------+ | | +-STOP--------------------------+ | | '-integer--+---------+----------' | | +-K-------+ | | +-M-------+ | | +-G-------+ | | '-PERCENT-' | +-LOWER HIGH WATER MARK--+------+--------------------------------------------+ | '-STOP-' | '----------------------------------------------------------------------------'
MAX参数可以指定最大限度的降低高水位标记来释放空间。在运行REDUCE命令后,在数据块移动的过程中,也可以使用STOP参数来停止表空间移动。如果是DMS表空间,则需要先运行LOWER HIGH WATER MARK子句降低高水位标记,再运行REDUCE子句释放表空间。如果是启用了自动存储的表空间,直接运行REDUCE子句即可。
自动存储表空间
ALTER TABLESPACE REDUCE 100 M(MAX)
DMS 表空间
ALTER TABLESPACE LOWER HIGH WATER MARK ALTER TABLESPACE REDUCE (ALL CONTAINERS 10 M(MAX))
4.MON_GET_EXTENT_MOVEMENT_STATUS语法
MON_GET_EXTENT_MOVEMENT_STATUS--(--tbsp_name--,--member--)
tbsp_name 是表空间对象,如果是空值,则会对所有的表空间操作。member 的默认输入是 -1,指当前成员,如果是 -2,则是所有数据库成员。这个函数的返回值说明:
tbsp_name:表空间名
tbsp_id:表空间id
member:成员
current_extent:当前正在移动数据块
last_extent:最后移动的数据块
num_extents_moved:已移动的数据块
num_extents_left:未移动的数据块
total_move_time:总移动时间(微秒)
5.监视表空间的移动
SELECT varchar(tbsp_name, 20) as tbsp_name,
NUM_EXTENTS_MOVED,
NUM_EXTENTS_LEFT,
TOTAL_MOVE_TIME
from TABLE(MON_GET_EXTENT_MOVEMENT_STATUS('TBS1', -2)) AS t
6.验证高水位标记的降低
SELECT varchar(tbsp_name, 16) as tbsp_name,
BSP_USED_PAGES,
TBSP_FREE_PAGES,
TBSP_PAGE_TOP
from TABLE(MON_GET_TABLESPACE('TBS1', -2)) AS t
posted @
2011-10-08 10:20 xrzp 阅读(2920) |
评论 (1) |
编辑 收藏
1.查看表空间信息
使用list tablespaces show detail
需要关注的几个参数
Tablespace ID:db2dart工具需要以这个ID作为参数
表的类型:只有DMS管理的表空间才有HWM的标记属性
Used pages和High water mark:如果相等,说明高水位标记下没有空闲页可以被释放
2.查看HWM标记信息
使用db2dart dbname /DHWM /TSI tbsid
3.降低高水位标记建议
使用db2dart dbname /LHWM /TSI tbsid /NP 0
posted @
2011-10-08 09:52 xrzp 阅读(329) |
评论 (0) |
编辑 收藏
1.对索引结构进行统计
1.1analyze index indexname validate structure
联机文档的原文:Specify VALIDATE STRUCTURE to validate the structure of the analyzed object.
The statistics collected by this clause are not used by the Oracle Database optimizer, as are statistics collected by the COMPUTE STATISTICS and ESTIMATE STATISTICS clauses.
For an index, Oracle Database verifies the integrity of each data block in the index and checks for block corruption. This clause does not confirm that each row in the table has an index entry or that each index entry points to a row in the table. You can perform these operations by validating the structure of the table with the CASCADE clause.
这个命令主要是用来分析索引的数据块是否有坏块,以及根据分析得到的数据(存放在index_stats)來判断索引是否需要重新建立。
1.2 validate structure有二中模式:online, offline, 默认是offline模式。
联机文档原文:
Specify ONLINE to enable Oracle Database to run the validation while DML operations are ongoing within the object. The database reduces the amount of validation performed to allow for concurrency.
Specify OFFLINE, to maximize the amount of validation performed. This setting prevents INSERT, UPDATE, and DELETE statements from concurrently accessing the object during validation but allows queries. This is the default.
Restriction on ONLINE
You cannot specify ONLINE when analyzing a cluster or index.
Note:
When you validate the structure of an object ONLINE, Oracle Database does not collect any statistics, as it does when you validate the structure of the object OFFLINE.
以offline模式分析时,会对表加一个4级別的锁(表共享),对run系統可能造成一定的影响。
而online模式则没有表lock的影响,但当以online模式分析时, 在视图index_stats没有统计信息。
2.对索引状态进行统计
analyze index indexname compute statistics
联机文档原文:
COMPUTE STATISTICS instructs Oracle Database to compute exact statistics about the analyzed object and store them in the data dictionary. When you analyze a table, both table and column statistics are collected.
Both computed and estimated statistics are used by the Oracle Database optimizer to choose the execution plan for SQL statements that access analyzed objects. These statistics may also be useful to application developers who write such statements.
Column statistics appear in the data dictionary views USER_TAB_COLUMNS, ALL_TAB_COLUMNS, and DBA_TAB_COLUMNS. Histograms appear in the data dictionary views USER_TAB_HISTOGRAMS, DBA_TAB_HISTOGRAMS, and ALL_TAB_HISTOGRAMS; USER_PART_HISTOGRAMS, DBA_PART_HISTOGRAMS, and ALL_PART_HISTOGRAMS; and USER_SUBPART_HISTOGRAMS, DBA_SUBPART_HISTOGRAMS, and ALL_SUBPART_HISTOGRAMS.
总的来说,compute statistics是用来统计index的分析信息,来为CBO服务的。9i之后推荐使用dbms_stats。
ps:
for table的统计信息存在于视图:user_tables 、all_tables、dba_tables
for all indexes的统计信息存在于视图: user_indexes 、all_indexes、dba_indexes
for all columns的统计信息存在于试图:user_tab_columns、all_tab_columns、dba_tab_columns
3.一些sample
3.1使用validate structure分析一个索引是否需要重建
(1)analyze index index_name validate structure;
(2)select t.del_lf_rows_len /t.lf_blk_len from index_stats t where t.name = &index_name;
(3)如果结果大于20%,index就需要被rebuild了。
4.对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。
(1)可以并行进行,对多个用户,多个Table
(2)可以得到整个分区表的数据和单个分区的数据。
(3)可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区
(4)可以导出统计信息
(5)可以用户自动收集统计信息
5.DBMS_STATS的缺点
(1)不能Validate Structure
(2)不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。
(3)DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True
6.对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。
posted @
2011-09-13 10:31 xrzp 阅读(366) |
评论 (0) |
编辑 收藏
事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。
两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:
1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
2、不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
3、脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。
为了处理这些问题,SQL标准定义了以下几种事务隔离级别
![](/images/blogjava_net/kingkong/55.jpg)
Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。Oracle不支持脏读。
![](/images/blogjava_net/kingkong/44.jpg)
SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是Oracle 默认使用的是READ COMMITTED 设置隔离级别使用
SET TRANSACTION ISOLATION LEVEL
[READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]
posted @
2011-08-15 12:03 xrzp 阅读(304) |
评论 (0) |
编辑 收藏
1.概念设计:对用户要求描述的现实世界(可能是一个工厂、一个商场或者一个学校等),通过对其中住处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息储存、查询和加工的要求等。所建立的模型应避开数据库在计算机上的具体实现细节,用一种抽象的形式表示出来。以扩充的实体—(E-R模型)联系模型方法为例,第一步先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图)。第二步再将前面得到的多个用户的局部视图集成为一个全局视图,即用户要描述的现实世界的概念数据模型。
2.逻辑设计:主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。与此同时,可能还需为各种数据处理应用领域产生相应的逻辑子模式。这一步设计的结果就是所谓“逻辑数据库”。
3.物理设计:根据特定数据库管理系统所提供的多种存储结构和存取方法等依赖于具体计算机结构的各项物理设计措施,对具体的应用任务选定最合适的物理存储结构(包括文件类型、索引结构和数据的存放次序与位逻辑等)、存取方法和存取路径等。这一步设计的结果就是所谓“物理数据库”。
4.三者关系:由上到下,先要概念设计,接着逻辑设计,再是物理设计,一级一级设计。
posted @
2011-08-03 00:28 xrzp 阅读(339) |
评论 (0) |
编辑 收藏
直接alter index xxx rebuild tablespace xxx 不得行.
要酱紫,移动表的时候顺带一起移动:
ALTER TABLE 表名 MOVE
TABLESPACE 新表空间
LOB (字段名) STORE AS
(TABLESPACE 新表空间 );
posted @
2011-07-13 15:02 xrzp 阅读(302) |
评论 (0) |
编辑 收藏
1.报错:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/OraInstall2011-07-06_03-14-36PM/jre/1.4.2/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at sun.security.action.LoadLibraryAction.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.NativeLibLoader.loadLibraries(Unknown Source)
at sun.awt.DebugHelper.<clinit>(Unknown Source)
at java.awt.Component.<clinit>(Unknown Source)
2.出错原因:缺少系统安装包:rpm -ivh libXp-1.0.0-8.i386.rpm
posted @
2011-07-06 15:26 xrzp 阅读(274) |
评论 (0) |
编辑 收藏
摘要: oracle读取数据的最小单位是块.oracle读取数据的最大限制取决于OS和oracle对多块读I/O的限制(db_file_multiblock_read_count).物理上来说,一个sql读取某个记录,得将记录读取到DB Cache中,然后才能从中或者,这个称为物理读.如果这个数据已经存在于DB Cache中,那么前台进程可以直接冲DB Cache中读取数据,这个称谓逻辑读.逻辑上来说,有...
阅读全文
posted @
2011-06-12 01:23 xrzp 阅读(179) |
评论 (0) |
编辑 收藏
1.查看隐藏参数
脚本1:
SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
FROM SYS.x$ksppi x, SYS.x$ksppcv y
WHERE x.inst_id = USERENV ('Instance')
AND y.inst_id = USERENV ('Instance')
AND x.indx = y.indx
AND x.ksppinm LIKE '%&par%'脚本2:
select
x.ksppinm name,
y.ksppstvl value,
y.ksppstdf isdefault,
decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod,
decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE') isadj
from
sys.x$ksppi x,
sys.x$ksppcv y
where
x.inst_id = userenv('Instance') and
y.inst_id = userenv('Instance') and
x.indx = y.indx and
x.ksppinm like '%_&par%'
order by
translate(x.ksppinm,'_','')2.Oracle通过一个内部参数_small_table_threshold来定义大表和小表的界限.缺省情况下该参数等于2%的数量,如果表的buffer大小小于这个参数的定义,则oracle认为它是小表,反之为大表.
select (db_cache_size/块size)*0.02 from dual
posted @
2011-06-11 20:44 xrzp 阅读(288) |
评论 (0) |
编辑 收藏
SELECT d.VALUE || '/' || LOWER(RTRIM(i.INSTANCE, CHR(0))) || '_ora_' ||
p.spid || '.trc' trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1
AND s.SID = m.SID
AND p.addr = s.paddr) p,
(SELECT t.INSTANCE
FROM v$thread t, v$parameter v
WHERE v.NAME = 'thread'
AND (v.VALUE = 0 OR t.thread# = TO_NUMBER(v.VALUE))) i,
(SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d
posted @
2011-06-11 19:38 xrzp 阅读(176) |
评论 (0) |
编辑 收藏
posted @
2011-06-06 20:58 xrzp 阅读(2570) |
评论 (0) |
编辑 收藏
安装clusterware之前做一个检查,./runcluvfy.sh stage -pre crsinst -n rac1,遇到反馈错误
ERROR:
User equivalence unavailable on all the nodes.
Verification cannot proceed.
网上查了下,解决方法如下
root@rac1 # mkdir -p /usr/local/bin
root@rac1 # ln -s -f /usr/bin/ssh /usr/local/bin/ssh
root@rac1 # ln -s -f /usr/bin/scp /usr/local/bin/scp
在oracle用户下:
$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
再执行./runcluvfy.sh stage -pre crsinst -n rac1,rac2,就能正常检查了
[oracle@rac1 cluvfy]$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2
![](/Images/OutliningIndicators/None.gif)
Performing pre-checks for cluster services setup
![](/Images/OutliningIndicators/None.gif)
Checking node reachability![](http://www.blogjava.net/Images/dot.gif)
Node reachability check passed from node "rac1".
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
Checking user equivalence![](http://www.blogjava.net/Images/dot.gif)
User equivalence check passed for user "oracle".
![](/Images/OutliningIndicators/None.gif)
Checking administrative privileges![](http://www.blogjava.net/Images/dot.gif)
User existence check passed for "oracle".
Group existence check passed for "oinstall".
Membership check for user "oracle" in group "oinstall" [as Primary] passed.
![](/Images/OutliningIndicators/None.gif)
Administrative privileges check passed.
![](/Images/OutliningIndicators/None.gif)
Checking node connectivity![](http://www.blogjava.net/Images/dot.gif)
![](/Images/OutliningIndicators/None.gif)
Node connectivity check passed for subnet "172.16.0.0" with node(s) rac2,rac1.
![](/Images/OutliningIndicators/None.gif)
WARNING:
Make sure IP address "10.10.10.51" is up and is a valid IP address on node "rac1".
Node connectivity check failed for subnet "10.10.10.0".
![](/Images/OutliningIndicators/None.gif)
Suitable interfaces for the private interconnect on subnet "172.16.0.0":
rac2 eth0:172.16.40.52
rac1 eth0:172.16.40.51
![](/Images/OutliningIndicators/None.gif)
ERROR:
Could not find a suitable set of interfaces for VIPs.
![](/Images/OutliningIndicators/None.gif)
Node connectivity check failed.
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
Checking system requirements for 'crs'![](http://www.blogjava.net/Images/dot.gif)
Total memory check passed.
Free disk space check passed.
Swap space check passed.
System architecture check passed.
Kernel version check passed.
Package existence check passed for "make-3.79".
Package existence check passed for "binutils-2.14".
Package existence check passed for "gcc-3.2".
Package existence check passed for "glibc-2.3.2-95.27".
Package existence check passed for "compat-db-4.0.14-5".
Package existence check failed for "compat-gcc-7.3-2.96.128".
Check failed on nodes:
rac2,rac1
Package existence check failed for "compat-gcc-c++-7.3-2.96.128".
Check failed on nodes:
rac2,rac1
Package existence check failed for "compat-libstdc++-7.3-2.96.128".
Check failed on nodes:
rac2,rac1
Package existence check failed for "compat-libstdc++-devel-7.3-2.96.128".
Check failed on nodes:
rac2,rac1
Package existence check passed for "openmotif-2.2.3".
Package existence check passed for "setarch-1.3-1".
Group existence check passed for "dba".
Group existence check passed for "oinstall".
User existence check passed for "nobody".
![](/Images/OutliningIndicators/None.gif)
System requirement failed for 'crs'
![](/Images/OutliningIndicators/None.gif)
Pre-check for cluster services setup was unsuccessful on all the nodes.
posted @
2011-06-06 20:03 xrzp 阅读(3195) |
评论 (0) |
编辑 收藏
监控flash_recovery_area的使用情况可以查询2个视图:
1.V$FLASH_RECOVERY_AREA_USAGE:displays usage information about flashback recovery areas
SQL> select * from v$flash_recovery_area_usage;
![](/Images/OutliningIndicators/None.gif)
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE 0 0 0
REDO LOG 0 0 0
ARCHIVED LOG 30.81 0 61
BACKUP PIECE 0 0 0
IMAGE COPY 0 0 0
FLASHBACK LOG 12.99 8.54 70
FOREIGN ARCHIVED LOG 0 0 0
![](/Images/OutliningIndicators/None.gif)
已选择7行。
![](/Images/OutliningIndicators/None.gif)
SQL> select sum(PERCENT_SPACE_USED) from v$flash_recovery_area_usage;
![](/Images/OutliningIndicators/None.gif)
SUM(PERCENT_SPACE_USED)
-----------------------
43.82.V$RECOVERY_FILE_DEST:displays information about the disk quota and current disk usage in the flash recovery area.
SQL> select * from V$RECOVERY_FILE_DEST;
![](/Images/OutliningIndicators/None.gif)
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
---------------------------------------- ----------- ---------- ----------------- ---------------
/opt/oracle/flash_recovery_area 8589934592 3762538496 733315072 131
![](/Images/OutliningIndicators/None.gif)
SQL> select round(100*(a.space_used/space_limit),2) from v$recovery_file_dest a;
![](/Images/OutliningIndicators/None.gif)
ROUND(100*(A.SPACE_USED/SPACE_LIMIT),2)
---------------------------------------
43.8
posted @
2011-05-30 13:53 xrzp 阅读(1964) |
评论 (0) |
编辑 收藏
1.先将备份的控制文件和数据文件copy到原来的位置
2.mount数据库
3.RECOVER DATABASE USING BACKUP CONTROLFILE
4.ALTER DATABASE OPEN RESETLOGS;
代码如下:
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> host del D:\oracle\product\10.2.0\oradata\suredd\control*.ctl
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//** 在此先将备份的控制文件和数据文件还原*/
![](/Images/OutliningIndicators/None.gif)
SQL> startup mount
ORACLE 例程已经启动。
![](/Images/OutliningIndicators/None.gif)
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 230689668 bytes
Database Buffers 373293056 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 873855 (在 05/05/2011 15:47:47 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001
ORA-00280: 更改 873855 (用于线程 1) 在序列 #1 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 873855 (在 05/05/2011 15:47:47 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001
ORA-00280: 更改 873855 (用于线程 1) 在序列 #1 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\oracletest\backup\suredd\REDO01.LOG
ORA-00339: 归档日志未包含任何重做
ORA-00334: 归档日志: 'E:\ORACLETEST\BACKUP\SUREDD\REDO01.LOG'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 873855 (在 05/05/2011 15:47:47 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001
ORA-00280: 更改 873855 (用于线程 1) 在序列 #1 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\ORACLETEST\BACKUP\SUREDD\REDO02.LOG
ORA-00339: 归档日志未包含任何重做
ORA-00334: 归档日志: 'E:\ORACLETEST\BACKUP\SUREDD\REDO02.LOG'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> RECOVER DATABASE USING BACKUP CONTROLFILE
ORA-00279: 更改 873855 (在 05/05/2011 15:47:47 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00001_0750352730.001
ORA-00280: 更改 873855 (用于线程 1) 在序列 #1 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
E:\ORACLETEST\BACKUP\SUREDD\REDO03.LOG
已应用的日志。
完成介质恢复。
SQL> ALTER DATABASE OPEN RESETLOGS;
![](/Images/OutliningIndicators/None.gif)
数据库已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> select * from dd.t1;
![](/Images/OutliningIndicators/None.gif)
ID NAME
---------- ----------
1 test1
2 test2
![](/Images/OutliningIndicators/None.gif)
SQL>
posted @
2011-05-05 16:02 xrzp 阅读(411) |
评论 (0) |
编辑 收藏
直接摘录2段话:
1.Set NORESETLOGS case
The following commands will create a new control file and use it to open the database.
Data used by Recovery Manager will be lost.
Additional logs may be required for media recovery of offline.
Use this only if the current versions of all online logs are available.
2.Set RESETLOGS case
The following commands will create a new control file and use it to open the database.
Data used by Recovery Manager will be lost.
The contents of online logs will be lost and all backups will be invalidated.
Use this only if online logs are damaged.
posted @
2011-05-05 15:39 xrzp 阅读(349) |
评论 (0) |
编辑 收藏
1.控制文件全部丢失,在线重做日志丢失,如果有备份的2进制的控制文件也不能使用,为什么呢?因为用备份的控制文件进行恢复时(
RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL),
由于使用了备份的控制文件,备份之后的归档日志信息丢失,所以需要在线重做日志来进行介质恢复,而当前的情况是在线重做日志也丢失了,所以只能进行手工创建控制文件.
2.以alter database open resetlogs打开数据库
2.1如果当初关闭数据库时是非正常关闭,那么在打开数据库之前应该先RECOVER DATABASE USING BACKUP CONTROLFILE
3.添加temp文件
代码如下:
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del D:\oracle\product\10.2.0\oradata\suredd\control*.ctl
![](/Images/OutliningIndicators/None.gif)
SQL> host del D:\oracle\product\10.2.0\oradata\suredd\redo*.log
![](/Images/OutliningIndicators/None.gif)
SQL> startup nomount
ORACLE 例程已经启动。
![](/Images/OutliningIndicators/None.gif)
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 226495364 bytes
Database Buffers 377487360 bytes
Redo Buffers 7135232 bytes
SQL> edit
已写入 file afiedt.buf
![](/Images/OutliningIndicators/None.gif)
1 CREATE CONTROLFILE REUSE DATABASE "SUREDD" RESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO03.LOG' SIZE 50M
11 DATAFILE
12 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF',
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSAUX01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\USERS01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\EXAMPLE01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF',
17 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\UNTOTBS_NEW_01.DBF'
18* CHARACTER SET ZHS16GBK
SQL> /
![](/Images/OutliningIndicators/None.gif)
控制文件已创建。
![](/Images/OutliningIndicators/None.gif)
SQL> ALTER DATABASE OPEN RESETLOGS;
![](/Images/OutliningIndicators/None.gif)
数据库已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\TEMP01.DBF'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
![](/Images/OutliningIndicators/None.gif)
表空间已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> select * from dd.t1;
![](/Images/OutliningIndicators/None.gif)
ID NAME
---------- ----------
1 test1
2 test2
![](/Images/OutliningIndicators/None.gif)
SQL>
posted @
2011-05-05 15:25 xrzp 阅读(528) |
评论 (0) |
编辑 收藏
摘要: 1.错误描述:在做一次恢复后,数据库能正常打开,数据表也能正常查询,但过不了多久数据库会自动down掉
2.查看alert日志,发现如下信息
Thu May 05 13:30:26 2011
Flush retried for xcb 0x333acd74, pmd 0x33bdaa68
D...
阅读全文
posted @
2011-05-05 14:53 xrzp 阅读(9743) |
评论 (2) |
编辑 收藏
1.将备份的控制文件(这里的备份指的是2进制的备份文件,非trace那个)copy到原来的位置
2.启动到mount状态
3.recover database using backup controlfile until cancel
4.再找重做联机日志恢复数据
5.alter database open resetlogs
代码如下:
SQL> alter database backup controlfile to 'c:\CONTROL01.CTL';
![](/Images/OutliningIndicators/None.gif)
数据库已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del D:\oracle\product\10.2.0\oradata\suredd\CONTROL*.CTL;
![](/Images/OutliningIndicators/None.gif)
SQL> host copy c:\CONTROL01.CTL D:\oracle\product\10.2.0\oradata\suredd\
![](/Images/OutliningIndicators/None.gif)
SQL> startup mount
ORACLE 例程已经启动。
![](/Images/OutliningIndicators/None.gif)
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 213912452 bytes
Database Buffers 390070272 bytes
Redo Buffers 7135232 bytes
ORA-00205: ?????????, ??????, ???????
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> shutdown immediate
ORA-01507: ??????
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
ORACLE 例程已经关闭。
![](/Images/OutliningIndicators/None.gif)
============在此应该将备份的控制文件按照初始化文件里面设置的那样copy N份到指定的位置===================
![](/Images/OutliningIndicators/None.gif)
SQL> startup mount
ORACLE 例程已经启动。
![](/Images/OutliningIndicators/None.gif)
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 213912452 bytes
Database Buffers 390070272 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> recover database using backup controlfile ;
ORA-00279: 更改 761661 (在 05/05/2011 09:18:58 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001
ORA-00280: 更改 761661 (用于线程 1) 在序列 #11 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
=======以上失败的原因是:当前controlfile丢失,使用备份的controlfile打开数据库时,为不完全恢复,所以要使用until============
![](/Images/OutliningIndicators/None.gif)
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 761661 (在 05/05/2011 09:18:58 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001
ORA-00280: 更改 761661 (用于线程 1) 在序列 #11 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从过旧的备份中恢复
ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**由于使用了备份的控制文件,备份之后的归档日志信息丢失,
因此,这时需要手工输入需要恢复的联机重做日志文件*/
![](/Images/OutliningIndicators/None.gif)
SQL> SELECT GROUP#, SEQUENCE#, STATUS FROM V$LOG;
![](/Images/OutliningIndicators/None.gif)
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 11 CURRENT
3 10 INACTIVE
2 9 INACTIVE
![](/Images/OutliningIndicators/None.gif)
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 761661 (在 05/05/2011 09:18:58 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001
ORA-00280: 更改 761661 (用于线程 1) 在序列 #11 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\suredd\REDO03.LOG
ORA-00328: 归档日志在更改 759772 结束, 需要稍后的更改 761661
ORA-00334: 归档日志: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO03.LOG'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从过旧的备份中恢复
ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 761661 (在 05/05/2011 09:18:58 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00011_0750250093.001
ORA-00280: 更改 761661 (用于线程 1) 在序列 #11 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\suredd\REDO01.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
![](/Images/OutliningIndicators/None.gif)
数据库已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> select * from dd.t1;
![](/Images/OutliningIndicators/None.gif)
ID NAME
---------- ----------
1 test1
2 test2
![](/Images/OutliningIndicators/None.gif)
SQL>
posted @
2011-05-05 10:57 xrzp 阅读(666) |
评论 (0) |
编辑 收藏
1.归档日志已经备份并被删除掉原来的
2.在执行一些恢复操作时,可能会使用到以前的归档日志,但这个时候∵已经在原来的位置将归档日志删除,所以恢复时如果使用到归档日志的话会报错说找不着文件
3.解决方法:将归档日志copy回原来的位置,恢复时指定新的位置,或者使用SET LOGSOURCE,指向新的归档位置
代码如下:
SQL> recover tablespace ddtest;
ORA-00279: 更改 589779 (在 05/04/2011 14:46:43 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001
ORA-00280: 更改 589779 (用于线程 1) 在序列 #4 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
ORA-00308: 无法打开归档日志
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> recover tablespace ddtest;
ORA-00279: 更改 589779 (在 05/04/2011 14:46:43 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001
ORA-00280: 更改 589779 (用于线程 1) 在序列 #4 中
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 609885 (在 05/04/2011 15:13:08 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00005_0750250093.001
ORA-00280: 更改 609885 (用于线程 1) 在序列 #5 中
ORA-00278: 此恢复不再需要日志文件
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOGS\SUREDD\ARC00004_0750250093.001'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
已应用的日志。
完成介质恢复。
SQL> alter tablespace ddtest online;
![](/Images/OutliningIndicators/None.gif)
表空间已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> select * from dd.t1;
![](/Images/OutliningIndicators/None.gif)
ID NAME
---------- ----------
1 test1
2 test2
![](/Images/OutliningIndicators/None.gif)
SQL>
![](/Images/OutliningIndicators/None.gif)
注:
(1)或者将归档日志放到其他的地方,然后在指定日志时不用auto,而写新的路径
(2)SET LOGSOURCE '归档日志的放的位置',再recover ,然后使用auto
posted @
2011-05-05 00:29 xrzp 阅读(1312) |
评论 (0) |
编辑 收藏
1.还是用UE破坏所有的控制文件,并做checkpoint
2.连接数据库,将数据库启动到nomount状态
3.创建controlfile为noresetlog
4.recover数据库
5.归档所有日志
6.open数据库
7.添加temp表空间的数据文件
过程如下:
SQL> show parameter control
![](/Images/OutliningIndicators/None.gif)
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string D:\ORACLE\PRODUCT\10.2.0\ORADA
TA\SUREDD\CONTROL01.CTL, D:\OR
ACLE\PRODUCT\10.2.0\ORADATA\SU
REDD\CONTROL02.CTL, D:\ORACLE\
PRODUCT\10.2.0\ORADATA\SUREDD\
CONTROL03.CTL
======================此时破坏所有控制文件======================
SQL> alter system checkpoint;
alter system checkpoint
*
第 1 行出现错误:
ORA-00227: 控制文件中检测到损坏的块: (块 , # 块 )
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> select status from v$instance;
ERROR:
ORA-03114: 未连接到 ORALCE
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup nomount
ORACLE 例程已经启动。
![](/Images/OutliningIndicators/None.gif)
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 201329540 bytes
Database Buffers 402653184 bytes
Redo Buffers 7135232 bytes
SQL> edit
已写入 file afiedt.buf
![](/Images/OutliningIndicators/None.gif)
1 CREATE CONTROLFILE REUSE DATABASE "SUREDD" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\REDO03.LOG' SIZE 50M
11 DATAFILE
12 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF',
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\UNDOTBS01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSAUX01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\USERS01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\EXAMPLE01.DBF',
17 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
18* CHARACTER SET ZHS16GBK
SQL> /
![](/Images/OutliningIndicators/None.gif)
控制文件已创建。
![](/Images/OutliningIndicators/None.gif)
SQL> RECOVER DATABASE;
完成介质恢复。
SQL> ALTER SYSTEM ARCHIVE LOG ALL;
![](/Images/OutliningIndicators/None.gif)
系统已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> ALTER DATABASE OPEN;
![](/Images/OutliningIndicators/None.gif)
数据库已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> edit
已写入 file afiedt.buf
![](/Images/OutliningIndicators/None.gif)
1 ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\TEMP01.DBF'
2* SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M
SQL> /
![](/Images/OutliningIndicators/None.gif)
表空间已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> select * from dd.t1;
![](/Images/OutliningIndicators/None.gif)
ID NAME
---------- ----------
1 test1
2 test2
![](/Images/OutliningIndicators/None.gif)
SQL>
posted @
2011-05-05 00:01 xrzp 阅读(267) |
评论 (0) |
编辑 收藏
第一种情况:损坏的控制文件的磁盘位置仍能使用
1.将好的控制文件copy过去
2.startup
第二种情况:损坏的控制文件的磁盘位置不可用
1.在新的位置将好的控制文件copy过去
2.修改spfile,使得里面的控制文件的路径指向正确
3.startup
posted @
2011-05-04 23:36 xrzp 阅读(271) |
评论 (0) |
编辑 收藏
1.将数据库abort掉,然后破坏对应的数据文件
2.startup数据库,因为此时被破坏了,所以数据库只能到mount状态
3.当前情况是没有数据文件的备份,但是有完好的归档
4.∴可以利用create datafile来进行恢复
具体参看代码:
SQL> shutdown abort
ORACLE 例程已经关闭。
==============在这儿破坏数据文件==================
SQL> startup
ORACLE 例程已经启动。
![](/Images/OutliningIndicators/None.gif)
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> select status from v$instance;
![](/Images/OutliningIndicators/None.gif)
STATUS
------------
MOUNTED
![](/Images/OutliningIndicators/None.gif)
SQL> select * from v$recover_file;
![](/Images/OutliningIndicators/None.gif)
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- -------------------------------------------
6 ONLINE ONLINE FILE NOT FOUND 0
![](/Images/OutliningIndicators/None.gif)
SQL> select * from v$backup;
![](/Images/OutliningIndicators/None.gif)
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
5 NOT ACTIVE 0
6 FILE NOT FOUND 0
![](/Images/OutliningIndicators/None.gif)
已选择6行。
![](/Images/OutliningIndicators/None.gif)
SQL> edit
已写入 file afiedt.buf
![](/Images/OutliningIndicators/None.gif)
1 SELECT D.NAME, T.NAME AS TABLESPACE_NAME
2 FROM V$DATAFILE D, V$TABLESPACE T
3 WHERE T.TS# = D.TS#
4* AND D.FILE# = 6
SQL> /
![](/Images/OutliningIndicators/None.gif)
NAME
----------------------------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF
DDTEST
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
2 as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF';
![](/Images/OutliningIndicators/None.gif)
数据库已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> recover datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF';
完成介质恢复。
SQL> select * from dd.t1;
select * from dd.t1
*
第 1 行出现错误:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> alter tablespace ddtest online;
alter tablespace ddtest online
*
第 1 行出现错误:
ORA-01109: 数据库未打开
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> alter database open;
![](/Images/OutliningIndicators/None.gif)
数据库已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> select * from dd.t1;
![](/Images/OutliningIndicators/None.gif)
ID NAME
---------- ----------
1 test1
2 test2
![](/Images/OutliningIndicators/None.gif)
SQL>
注意:在这个地方要求:需要表空间创建后所有的归档日志,且控制文件中必须包含受损文件名
如果不是这样子的话,则会出现下面的情况:
SQL> select status from v$instance;
![](/Images/OutliningIndicators/None.gif)
STATUS
------------
OPEN
![](/Images/OutliningIndicators/None.gif)
SQL> SELECT * FROM V$RECOVER_FILE;
![](/Images/OutliningIndicators/None.gif)
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- -------
6 OFFLINE OFFLINE FILE NOT FOUND 0
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
2 as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF';
alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
*
第 1 行出现错误:
ORA-01178: 文件 6 在最后一个 CREATE CONTROLFILE 之前创建, 无法重新创建
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
查询联机文档:
ORA-01178: file string created before last CREATE CONTROLFILE, cannot recreate
Cause: Attempted to use ALTER DATABASE CREATE DATAFILE to recreate a datafile that existed at the last CREATE CONTROLFILE command. The information needed to recreate the file was lost with the control file that existed when the file was added to the database.
Action: Find a backup of the file, and recover it. Do incomplete recovery to time before file was originally created.
那只有用备份的数据文件进行恢复了.
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
2 as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS01.DBF';
alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
*
第 1 行出现错误:
ORA-01178: 文件 6 在最后一个 CREATE CONTROLFILE 之前创建, 无法重新创建
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL> host copy E:\oracletest\backup\suredd\DDTESTTBS02.DBF D:\oracle\product\10.2.0\oradata\suredd\
![](/Images/OutliningIndicators/None.gif)
SQL> recover datafile 'D:\oracle\product\10.2.0\oradata\suredd\DDTESTTBS02.DBF';
完成介质恢复。
SQL> select status from v$instance;
![](/Images/OutliningIndicators/None.gif)
STATUS
------------
OPEN
![](/Images/OutliningIndicators/None.gif)
SQL> alter tablespace ddtest online;
![](/Images/OutliningIndicators/None.gif)
表空间已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> select * from dd.t1;
![](/Images/OutliningIndicators/None.gif)
ID NAME
---------- ----------
1 test1
2 test2
![](/Images/OutliningIndicators/None.gif)
SQL>
由此可见,有备份是多么的重要啊!!!
posted @
2011-05-04 23:32 xrzp 阅读(671) |
评论 (0) |
编辑 收藏
1.先备份数据文件
SQL> select file_name,tablespace_name from dba_data_files;
![](/Images/OutliningIndicators/None.gif)
FILE_NAME TABLESPACE_NAME
------------------------------------------------------------ -----------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF DDTEST
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\EXAMPLE01.DBF EXAMPLE
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\USERS01.DBF USERS
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSAUX01.DBF SYSAUX
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\UNDOTBS01.DBF UNDOTBS1
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\SYSTEM01.DBF SYSTEM
![](/Images/OutliningIndicators/None.gif)
SQL> alter tablespace ddtest begin backup;
![](/Images/OutliningIndicators/None.gif)
表空间已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> alter tablespace ddtest end backup;
![](/Images/OutliningIndicators/None.gif)
表空间已更改。
2.用UE将ddtest对应的数据文件破坏
3.直接shutdown abort,再startup
![](/Images/OutliningIndicators/None.gif)
SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
![](/Images/OutliningIndicators/None.gif)
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 197135236 bytes
Database Buffers 406847488 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF'
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL>
4.查找需要恢复的数据文件
SQL> select status from v$instance;
![](/Images/OutliningIndicators/None.gif)
STATUS
------------
MOUNTED
![](/Images/OutliningIndicators/None.gif)
SQL> select * from v$recover_file;
![](/Images/OutliningIndicators/None.gif)
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- -------
6 ONLINE ONLINE FILE NOT FOUND 0
![](/Images/OutliningIndicators/None.gif)
SQL> select * from v$backup;
![](/Images/OutliningIndicators/None.gif)
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 0
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 0
5 NOT ACTIVE 0
6 FILE NOT FOUND 0
![](/Images/OutliningIndicators/None.gif)
已选择6行。
![](/Images/OutliningIndicators/None.gif)
SQL> edit
已写入 file afiedt.buf
![](/Images/OutliningIndicators/None.gif)
1 SELECT D.NAME, T.NAME AS TABLESPACE_NAME
2 FROM V$DATAFILE D, V$TABLESPACE T
3 WHERE T.TS# = D.TS#
4* AND D.FILE# = 6
SQL> /
![](/Images/OutliningIndicators/None.gif)
NAME
----------------------------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF
DDTEST
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
SQL>
5.将备份的数据文件直接copy到原位置(因为此时为mount状态,所以可以直接copy,不用offline),再recover,再打开数据库。如果是打开的,(此时做了alter system checkpoint 也能使得表空间不可用),那就将对应的表空间先offline,再执行recover,执行完recover后,再将表空间online。
![](/Images/OutliningIndicators/None.gif)
SQL> recover datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SUREDD\DDTESTTBS02.DBF';
完成介质恢复。
SQL> alter database open;
![](/Images/OutliningIndicators/None.gif)
数据库已更改。
![](/Images/OutliningIndicators/None.gif)
SQL> select * from dd.t1;
![](/Images/OutliningIndicators/None.gif)
ID NAME
---------- ----------
1 test1
2 test2
![](/Images/OutliningIndicators/None.gif)
SQL>
注:dd.t1这个表在ddtest这个表空间上
至此恢复完成.
posted @
2011-05-04 22:56 xrzp 阅读(356) |
评论 (0) |
编辑 收藏
1.进行联机表空间备份的步骤
(1)ALTER TABLESPACE users BEGIN BACKUP;
(2)!cp /…/users01.dbf /BACKUP/users01.dbf
(3)ALTER TABLESPACE users END BACKUP;
(4)ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER TABLESPACE BEGIN BACKUP 和ALTER TABLESPACE END
BACKUP 命令之间的间隔时间应尽量缩短,因为修改后的块写入重做日志文件
将导致生成更多的重做信息。因此建议每次执行一个表空间的联机备份。
2.备份状态信息,查询的视图:
(1)V$BACKUP:以确定哪些文件处于备份模式。发出ALTER TABLESPACE BEGIN BACKUP 命令后,状态将更改为ACTIVE。备份文件后,“状态” (STATUS) 列的值将更改为NOT ACTIVE。
(2)V$DATAFILE_HEADER:表空间的数据文件的FUZZY 列中的值将更改为YES,表明相应的文件处于备份模式。
ALTER TABLESPACE END BACKUP 命令后,FUZZY 列的值将更改为NULL
SELECT name, status, fuzzy FROM v$datafile_header;
3.联机表空间备份过程中出现故障
查询V$BACKUP 以检查备份状态
ALTER DATABASE DATAFILE ‘<file#>’ END BACKUP;
4.只读表空间备份
ALTER TABLESPACE query_data READ ONLY;
(1)发出ALTER TABLESPACE 命令后,会对所有与表空间相关联的数据文件执行检查点。然后使用当前SCN 冻结文件头。
(2)使表空间成为只读状态之后,必须备份该表空间的所有数据文件。
DBW0 进程只写入其表空间处于读写模式的数据文件,正常的检查点也只对这些文件执行。
5.只读表空间备份问题
(1)在将表空间更改为只读后,只需要一个备份。
(2)在使表空间成为读写状态之后,应恢复按照正常备份日程对该表空间进行备份。
(3)控制文件必须能正确标识处在只读模式下的表空间;否则,必须恢复该表空间。
6.手动备份控制文件
(1)创建二进制映像
ALTER DATABASE BACKUP CONTROLFILE TO ‘control1.bkp`;
(2)创建文本跟踪文件
ALTER DATABASE BACKUP CONTROLFILE TO TRACE as
;
(3)以下命令更改数据库配置并导致控制文件更改:
ALTER DATABASE [ADD | DROP] LOGFILE
ALTER DATABASE [ADD | DROP] LOGFILE MEMBER
ALTER DATABASE [ADD | DROP ] LOGFILE GROUP
ALTER DATABASE [ NOARCHIVELOG | ARCHIVELOG ]
ALTER DATABASE RENAME FILE
CREATE TABLESPACE
ALTER TABLESPACE [ADD | RENAME ] DATAFILE
ALTER TABLESPACE [READ WRITE | READ ONLY ]
DROP TABLESPACE
7.使用DBVERIFY 实用程序验证备份
(1)用于确保备份数据库或数据文件在还原之前是有效的
(2)遇到数据损坏问题时可作为有用的诊断辅助工具
(3)使用:%dbv file=/ORADATA/u03/users01.dbf logfile=dbv.log
posted @
2011-05-02 19:05 xrzp 阅读(416) |
评论 (0) |
编辑 收藏
V$ARCHIVED_LOG:显示控制文件中的归档日志信息
V$ARCHIVE_DEST:对于当前例程,说明所有归档日志目标、当前值、模式和状态。
INACTIVE 状态表示该目标未定义。VALID 状态表示该目标已启用且没有错误。
要检查每个目标的错误和发生错误的日志序列号,可使用以下查询:
SELECT destination,fail_sequence,error
FROM v$archive_dest
WHERE status='ERROR';![](/Images/OutliningIndicators/None.gif)
V$LOG_HISTORY:包含控制文件中的日志文件信息
V$DATABASE:归档的当前状态
V$ARCHIVE_PROCESSES:提供有关例程的各种ARCH 进程的状态的信息
ACTIVE 状态表明进程已启动并正在运行。当前正在归档的进程的状态为BUSY。正忙的进程的LOG_SEQUENCE 列显示该进程正在归档的当前日志序列号
posted @
2011-05-02 14:25 xrzp 阅读(674) |
评论 (0) |
编辑 收藏
1.LOG_ARCHIVE_DEST_n最多可指定十个归档目标
可以是本地归档:log_archive_dest_1 = "LOCATION=/archive1"
指定的位置必须是有效的,并且不能是一个NFS 装载的目录
也可以是远程归档:log_archive_dest_2 = "SERVICE=standby_db1"
指定的服务名通过使用本地的tnsnames.ora 文件进行解析
2.LOG_ARCHIVE_DEST_n 选项
(1)将归档位置设置为MANDATORY 或OPTIONAL。
MANDATORY:表示必须成功完成归档到该目标的操作才可以覆盖联机重做日志文件。
OPTIONAL:表示即使联机重做日志文件尚未成功地归档到该目标,也可以重新使用。这是缺省设置
(2)在出现故障之后、重试之前定义时间
REOPEN:REOPEN 属性定义发生故障时是否必须重新尝试归档到目标。如果为关键字REOPEN指定了值,如REOPEN=600,则若发生故障,在经过指定时间(以秒计)后,归档程序将尝试写入该目标。缺省值为300 秒。归档到目标的尝试次数没有限制。归档中的所有错误将在主站点的警报文件中报告。
如果未指定REOPEN,则可选目标上的错误将被记录并忽略。不再将重做日志发送到这些目标。在归档成功之前,强制目标上的错误将导致无法重新使用联机重做日志。只要归档不成功,归档目标的状态就设置为ERROR。
log_archive_dest_1="LOCATION=/archive/ MANDATORY REOPEN"
log_archive_dest_2="SERVICE=standby_db1 MANDATORY REOPEN=600"
log_archive_dest_3="LOCATION=/archive2/ OPTIONAL"
![](/Images/OutliningIndicators/None.gif)
posted @
2011-05-02 14:16 xrzp 阅读(769) |
评论 (0) |
编辑 收藏
1.在10g中,如果启用了归档模式,则自动归档,即使log_archive_start为false
2.在9i中要启用自动归档的话,需要alter system archive log start to '/path'
3.如果数据库设置了db_recovery_file_dest,就不能设置log_archive_dest
4.默认的归档日志存放于db_recovery_file_dest中,如果设置了log_archive_dest_n,那么归档日志不再存放于db_recovery_file_dest中,而是存放于设置的log_archive_dest_n目录中,如果想要归档日志继续存放在db_recovery_file_dest中,可以通过如下命令
alter system set log_archive_dest_2='location=USE_DB_RECOVERY_FILE_DEST';
5.log_archive_dest只能与 log_archive_duplex_dest共存,作用一样
6.如果设置的log_archive_dest_n不正确,那么ORACLE会在设置的上一级目录归档
7.指定多个archive进程工作 log_archive_max_process,最多10个
8.alter system archive log current通知server process去将写满的联机重做日志归档,用于手工归档
9.归档日志格式(log_archive_format):s/S:log sequence number,t/T:thread number,如果为单实例的话,thread===1
posted @
2011-05-02 10:31 xrzp 阅读(209) |
评论 (0) |
编辑 收藏
NOARCHIVELOG 模式
缺省情况下,数据库是以NOARCHIVELOG 模式创建的。
1.在NOARCHIVELOG 模式下操作数据库时有以下特性:
(1)重做日志文件以循环的方式使用。
(2)重做日志文件可以在检查点发生之后立即重新使用。
(3)重做日志被覆盖后,介质恢复将只能恢复到上一次完全备份。
2.NOARCHIVELOG 模式的含义
(1)如果某个表空间由于故障而不可用,将无法继续对数据库进行操作,除非删除了该表空间或从备份还原了整个数据库。
(2)只能在数据库关闭时对数据库执行操作系统备份。而且,必须使用NORMAL、IMMEDIATE 或TRANSACTIONAL 选项关闭数据库。
(3)必须在每次备份时完整备份所有的数据文件和控制文件。尽管也可以备份联机重做日志文件,但这是不必要的。由于此类备份中日志文件是一致的,无需恢复,因此,不需要备份联机日志。
(4)如果联机重做日志文件已被覆盖,则将丢失上次完全备份后的所有数据。
3.NOARCHIVELOG 模式下的介质恢复选项
必须从数据库的完全备份中还原数据文件和控制文件。如果使用导出实用程序来备份数
据库,则可使用导入实用程序还原丢失的数据。但是,通过这种方法恢复的数据并不完
整,在导出后执行的事务处理工作将丢失。
ARCHIVELOG 模式
在发生检查点并且已经通过ARCn 后台进程备份重做日志文件之前,不能重新使用填满的重做日志文件。控制文件中将有一个条目记录归档日志文件的日志序列号。
对数据库的最新更改在任何时候均可用于例程恢复,而归档重做日志文件可以用于介质恢复。
1.归档要求
(1)数据库必须处于ARCHIVELOG 模式。通过发出命令将数据库置于ARCHIVELOG 模式可以更新控制文件。可以启用ARCn 后台进程来实现自动归档。
(2)应该有足够的资源来存放生成的归档重做日志文件。
2.将数据库设置为ARCHIVELOG 模式的含义
(1)出现介质故障时,可以防止数据库丢失数据。
(2)可以在数据库联机时对其进行备份。
(3)由于介质故障导致表空间(非SYSTEM)脱机时,数据库的其余部分仍可用,因为表空间(非SYSTEM)可以在数据库打开时恢复。
3.介质恢复选项
(1)无论数据库处于联机或脱机状态,都可以还原损坏文件的备份副本,并使用归档日志文件将数据文件更新为当前的版本。
(2)可以将数据库恢复至特定的时间点。
(3)可以将数据库恢复至指定归档日志文件的末尾。
(4)可以将数据库恢复至特定的系统更改号(SCN)。
4.在设置归档日志模式时,应该考虑以下因素:
下述情况中,NOARCHIVELOG 模式可能比较合适:
(1)容许备份之间的数据损失(在开发、培训期间等)
(2)重新应用事务处理(从批处理文件)的速度更快
(3)数据极少更改(非OLTP)
下述情况中,ARCHIVELOG 模式则更合适:
(1)无法关闭数据库以执行关闭的数据库的备份
(2)不允许数据损失
(3) 使用归档重做日志文件比重新应用事务处理(OLTP) 更易于恢复
posted @
2011-05-02 01:20 xrzp 阅读(571) |
评论 (0) |
编辑 收藏
RAID 0+ 1
优点:
正常使用中,考虑性能上讲,RAID0+1 好,就是先做RAID 0 条带,再做 RAID 1 MIRROR,这样写入速度快,读的速度和RAID1+0一样.
缺点,一旦一个硬盘坏了,一半的硬盘无法工作,如果1个条带上各坏1个硬盘(RAID0+1只有2个条带),GAME OVER....即使是只有一个硬盘坏了,做数据恢复也很慢,因为一半的硬盘要rebuild(大家该知道为什么吧).
RAID 1+0
优点 数据安全性好,只要不是1个条带上的2个硬盘同时坏,没有问题,还可以继续跑数据.数据恢复快.
缺点 写性能稍微比RAID 0+1 差(读性能一样)
这里举个例子,20个硬盘
做RAID 0+1,共2个条带做MIRROR,每个条带10个硬盘,如果坏了1个硬盘,只能是另外一个完好的条带(10个硬盘)同时工作,这边条带9个好的硬盘也要休息.
做RAID 1+0,共10个条带,每个条带2个硬盘做MIRROR,如果坏了1个硬盘,没关系,其它19个硬盘还要同时工作,只要不是坏在一个MIRROR里面的,没事.
建议,硬盘很多时,同时坏的几率就比较大,建议使用安全系数高的RAID 1+0,宁愿损失点性能(其实差不多).
如果仅仅是4块硬盘或者不考虑安全,不是关键业务,只是为了追求速度快感,你可以选择RAID 0+1
posted @
2011-04-28 11:14 xrzp 阅读(161) |
评论 (0) |
编辑 收藏
RAID是通过磁盘阵列与数据条块化方法相结合,以提高数据可用率的一种结构.IBM早于1970年就开始研究此项技术.RAID 可分为RAID级别1到RAID级别6, 通常称为:RAID 0, RAID 1, RAID 2, RAID 3,RAID 4, RAID 5,RAID6.每一个RAID级别都有自己的强项和弱项. "奇偶校验"定义为用户数据的冗余信息, 当硬盘失效时,可以重新产生数据.
RAID 0: RAID 0 并不是真正的RAID结构, 没有数据冗余. RAID 0 连续地分割数据并并行地读/写于多个磁盘上. 因此具有很高的数据传输率. 但RAID 0在提高性能的同时,并没有提供数据可靠性,如果一个磁盘失效,将影响整个数据.因此RAID 0 不可应用于需要数据高可用性的关键应用.
RAID 1: RAID 1通过数据镜像实现数据冗余,在两对分离的磁盘上产生互为备份的数据. RAID 1可以提高读的性能, 当原始数据繁忙时,可直接从镜像拷贝中读取数据.RAID 1是磁盘阵列中费用最高的, 但提供了最高的数据可用率. 当一个磁盘失效,系统可以自动地交换到镜像磁盘上, 而不需要重组失效的数据.
RAID 2: 从概念上讲, RAID 2 同RAID 3类似, 两者都是将数据条块化分布于不同的硬盘上, 条块单位为位或字节.然而RAID 2 使用称为"加重平均纠错码"的编码技术来提供错误检查及恢复.这种编码技术需要多个磁盘存放检查及恢复信息, 使得RAID 2技术实施更复杂.因此,在商业环境中很少使用.
RAID 3: 不同于RAID 2, RAID 3使用单块磁盘存放奇偶校验信息. 如果一块磁盘失效, 奇偶盘及其他数据盘可以重新产生数据. 如果奇偶盘失效,则不影响数据使用.RAID 3对于大量的连续数据可提供很好的传输率, 但对于随机数据, 奇偶盘会成为写操作的瓶颈.
RAID 4: 同RAID 2, RAID 3一样, RAID 4, RAID 5也同样将数据条块化并分布于不同的磁盘上, 但条块单位为块或记录. RAID 4使用一块磁盘作为奇偶校验盘, 每次写操作都需要访问奇偶盘, 成为写操作的瓶颈. 在商业应用中很少使用.
RAID 5: RAID 5没有单独指定的奇偶盘, 而是交叉地存取数据及奇偶校验信息于所有磁盘上.在RAID5 上, 读/写指针可同时对阵列设备进行操作, 提供了更高的数据流量.RAID 5更适合于小数据块, 随机读写的数据.RAID 3 与RAID 5相比, 重要的区别在于RAID 3每进行一次数据传输,需涉及到所有的阵列盘.而对于RAID 5来说, 大部分数据传输只对一块磁盘操作, 可进行并行操作.在RAID 5中有"写损失", 即每一次写操作,将产生四个实际的读/写操作, 其中两次读旧的数据及奇偶信息, 两次写新的数据及奇偶信息.
RAID 6: RAID 6 与RAID 5相比,增加了第二个独立的奇偶校验信息块. 两个独立的奇偶系统使用不同的算法, 数据的可靠性非常高.即使两块磁盘同时失效,也不会影响数据的使用.但需要分配给奇偶校验信息更大的磁盘空间, 相对于RAID 5有更大的"写损失".RAID 6 的写性能非常差, 较差的性能和复杂的实施使得RAID 6很少使用.
posted @
2011-04-28 11:12 xrzp 阅读(158) |
评论 (0) |
编辑 收藏
web服务器数据库服务器分离-->垂直分割(按功能)-->分布式(按用户数)-->增加数据缓存层
页面静态化(apache?)
存储分离,页面图片分开
数据库的水平分割和垂直分割
各层的缓存技术:Oracle(cache group),hibernate(session缓存,sessionFactory缓存,好像名字叫Ehcache ),memcache,oscache
负载均衡:集群? 7层模型每一层都有解决方案
posted @
2011-04-28 11:05 xrzp 阅读(164) |
评论 (0) |
编辑 收藏
这个类型支持前后滚动取得纪录next()、previous(),回到第一行first(),同时还支持要去的ResultSet中的第几行absolute(int n),以及移动到相对当前行的第几行relative(int n),要实现这样的ResultSet在创建Statement时用如下的方法。
Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
ResultSet rs = st.executeQuery(sqlStr)
其中两个参数的意义是:
resultSetType是设置ResultSet对象的类型可滚动,或者是不可滚动。取值如下:
ResultSet.TYPE_FORWARD_ONLY只能向前滚动
ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个方法都能够实现任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。
resultSetConcurency是设置ResultSet对象能够修改的,取值如下:
ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。
所以如果只是想要可以滚动的类型的Result只要把Statement如下赋值就行了。
Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.excuteQuery(sqlStr);
posted @
2011-01-10 17:19 xrzp 阅读(379) |
评论 (1) |
编辑 收藏
我们根据统计信息的详细程度可以设置不同的级别,每种级别见STATS$level_DESCRIPTION;
0: 一性性能统计:包含回退段状态、字典缓存、SGA、系统事件、后台事件、会话事件、系统统计、等待统计、锁统计、闩锁统计
5: 增加了收集SQL的信息、并包括0级收集的信息。
6: 增强了在SQL收集信息方面的功能(列出占用资源较高的SQL),并包所有低级别的信息。
7 增加了收集段级别的统计信息(如段的逻辑读与物理读、行锁、ITL及buffer busy waits), 并包括所有低级别的信息。
10 : 增加了收集子LATCH锁的信息,并包括所有低级别的信息。
如果你收用statspack确定热表及热索引,那就需要使用7/10的级别来收集快照。
9I默认是5级
我们可以手工修改这个级别:
永久修改收集级别
SQL>EXECUTE STATSPACK.SNAP(I_SNAP_LEVEL=>0,I_MODIFY_PARAMETER=>’TRUE’);
临时修改
SQL>EXECUTE STATSPACK.SNAP(I_SNAP_LEVEL=>0);
posted @
2010-12-26 22:31 xrzp 阅读(345) |
评论 (0) |
编辑 收藏
一些常用的动态性能试图
1.先来张总的
2.
实例级别统计
![](/images/blogjava_net/kingkong/优化/pt2.jpg)
上面两个框是系统统计信息,包括了一些性能指标,有STAT关键字
下面两个框是事件统计信息,有EVENT关键字,包括了各种不同类型的等待事件信息
3.会话级别统计
![](/images/blogjava_net/kingkong/优化/pt3.jpg)
上面三个框是会话的系统统计信息,包括了一些性能指标,有STAT关键字。
下面三个框是会话的事件统计信息,包括了该会话各种不同类型的等待事件信息,有EVENT或WAIT关键字。
4.这些事件都列在V$EVENT_NAME视图中,拥有以下字段:
EVENT#
事件号
NAME
事件名
PARAMETER1
第一个参数名
PARAMETER2
第二个参数名
PARAMETER3
第三个参数名
![](/images/blogjava_net/kingkong/优化/p4.jpg)
5.事件统计信息
V$SYSTEM_EVENT: 所有会话对一个事件的总等待,它是累计信息。
V$SESSION_EVENT: 每个会话对一个事件的总等待,它是累计信息。
V$SESSION_WAIT:正在等待的当前活动对一个事件的等待,它是实时状态。
6.V$SYSTEM_EVENT:整个实例某个特定等待事件的统计值
![](/images/blogjava_net/kingkong/优化/wc1.jpg)
7.V$SESSION_EVENT:
某个会话特定等待事件的统计值
![](/images/blogjava_net/kingkong/优化/wc2.jpg)
8. V$SESSION_WAIT :当前会话正在等待的事件及统计信息,我们通过它能准确的发现当前性能问题的现象是什么
![](/images/blogjava_net/kingkong/优化/wc3.jpg)
WAIT_TIME
非0:最近一次等待的时间, (当STATE为waited known time,单位为厘秒)
0:当前正在等待
STATE
waiting:
正在等待中,该状态,通常seconds_in_wait会有值
waited known time:
现在已经不等待了,但提供了详细的等待信息
waited short time:
现在已经不等待了,但提供了简短的等待信息
posted @
2010-12-26 22:30 xrzp 阅读(208) |
评论 (0) |
编辑 收藏
一.调优的目标:
1.减少响应时间
2.减少数据库块访问
3.尽量把常用的块CACHE到内存中,提高访问的速度
4.提高OLTP的吞吐量
5.设置系统的负载
二.数据库的系统响应时间:
response time = service time + wait time
service's meaning:cpu used by this session
select * from v$sysstat t where t.name ='CPU used by this session';
![](/images/blogjava_net/kingkong/优化/cputime.jpg)
时间单位:9i以后单位是百万分之一秒
其中
Service Time = SQL解析时间 + 递归调用时间 + 其他时间
1.视图的使用
--实例级系统性能视图:v$sysstat
使用:(以CPU used by this session为例)
select * from v$sysstat t where t.name ='CPU used by this session';
--会话级系统性能试图:
select a.STATISTIC# from v$statname a where a.NAME like '%CPU used by this session%';
找到STATISTIC#,代入到下面
--当前所有session的
select * from v$sesstat b where b.STATISTIC# = &STATISTIC#;
--自己的session的
select * from v$mystat c where c.STATISTIC# = &STATISTIC#;
--或者直接
select b.sid, a.STATISTIC#, a.name, b.value
from v$statname a, v$mystat b
where a.STATISTIC# = b.STATISTIC#;
and a.name like '%xxxxxxx%'
2.sql解析时间(sql解析过程..比较重要,后面专门写一篇)
select name, sid, value "Total parse Cpu time"
from v$statname a, v$mystat b
where a.name like '%parse%'
and a.statistic# = b.statistic#
![](/Images/OutliningIndicators/None.gif)
3.递归调用时间是用在语义分析阶段查找数据字典或者PLSQL内部包造成的解析所花的CPU时间
select * from v$statname a where a.NAME like '%recursive cpu%';
实例级和会话级查询方法同上
4.其它CPU时间:通常占绝大多数,它是执行内存BUFFER搜索,索引和全表扫描涉及的IO操作所占有的CPU
select a.VALUE as "Total CPU",
b.VALUE as "Parse CPU",
c.VALUE as "Recursive CPU",
a.VALUE - b.VALUE - c.VALUE as "Others"
from v$sysstat a, v$sysstat b, v$sysstat c
where a.NAME = 'CPU used by this session'
and b.NAME = 'parse time cpu'
and c.NAME = 'recursive cpu usage';
5.等待常是由于并发,需要等待别的会话处理完独占的资源后所花的时间,这通常也是最常见的性能问题.
如果等待时间(wait time)占响应时间(Pesponse time)的大多数时,我们需要减小等待时间来提高系统性能。我们需要剥离等待时间来分析和优化等待时间
select d.EVENT, d.TIME_WAITED, d.AVERAGE_WAIT
from v$system_event d
where d.EVENT not in
('pmon timer', 'rdbms ipc message', 'smon timer',
'virtual circuit status', 'SQL*Net message from client')
not in 里面的event通常被认为是不会产生等待的事件
三.相关视图
1.v$sysstat
这个使徒列出系统统计数据.为找到与每个统计数据号(STATISTIC#)关联的统计数据
名称,请参阅V$STATNAME.
列 数据类型 说明
STATISTIC# NUMBER 统计数据号
NAME VARCHAR2 统计数据名
CLASS NUMBER 统计数据类别:1(用户);2(重做);
4(排队);8(高速缓存);16(操
作系统);32(并行服务器);64
(SQL);128(调试)
VALUE NUMBER 统计数据值
CLASS NUMBER 统计数据类别:
2.v$sesstat
这个视图给出用户会话的统计数据.为了找到与每个统计数据号(STATISTIC#)有关的
统计数据名称,请参阅V$STATNAME.
列 数据类型 说明
SID NUMBER 会话标识符
STATISTIC# NUMBER 统计数据名(标识符)
VALUE NUMBER 统计数据值
3.v$mystat
这个视图包含当前会话的统计数据。
列 数据类型 说明
SID NUMBER 当前会话的ID
STATISTIC NUMBER 统计数据号
VALUE NUMBER 统计数据值
4.v$statname
这个视图显示列在V$SESSTAT 和V$SYSSTAT 表中的统计数据的解码统计数据名。详细信
息,请参阅V$SESSTAT 和SYSSTAT。
列 数据类型 说明
STATISTIC# NUMBER 统计数据号
NAME VARCHAR2 统计数据名。参见表B-13
CLASS NUMBER 1(用户);2(重做);4(排
队);8(高速缓存);16(操
作系统);32(并行服务器);
128(调试)
posted @
2010-12-22 22:55 xrzp 阅读(264) |
评论 (2) |
编辑 收藏
摘要:
DB Name
DB Id
Instance
...
阅读全文
posted @
2010-12-20 23:06 xrzp 阅读(632) |
评论 (0) |
编辑 收藏
1.NESTED LOOP
![](/images/blogjava_net/kingkong/19153/r_nestloop.jpg)
对于被连接的数据子集较小的情况,nested loop连接是个较好的选择。nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查找,没有索引一般就不会是 nested loops。
一般在nested loop中, 驱动表满足条件结果集不大,被驱动表的连接字段要有索引,这样就走nstedloop。如果驱动表返回记录太多,就不适合nested loops了。如果连接字段没有索引,则适合走hash join,因为不需要索引。
可用ordered提示来改变CBO默认的驱动表,可用USE_NL(table_name1 table_name2)提示来强制使用nested loop。
2.HASH JOIN
![](/images/blogjava_net/kingkong/19153/r_hashjoin.jpg)
hash join是CBO 做大数据集连接时的常用方式。优化器扫描小表(或数据源),利用连接键(也就是根据连接字段计算hash 值)在内存中建立hash表,然后扫描大表,每读到一条记录就来探测hash表一次,找出与hash表匹配的行。
当小表可以全部放入内存中,其成本接近全表扫描两个表的成本之和。如果表很大不能完全放入内存,这时优化器会将它分割成若干不同的分区,不能放入内存的部分就把该分区写入磁盘的临时段,此时要有较大的临时段从而尽量提高I/O 的性能。临时段中的分区都需要换进内存做hash join。这时候成本接近于全表扫描小表+分区数*全表扫描大表的代价和。
至于两个表都进行分区,其好处是可以使用parallel query,就是多个进程同时对不同的分区进行join,然后再合并。但是复杂。
使用hash join时,HASH_AREA_SIZE初始化参数必须足够的大,如果是9i,Oracle建议使用SQL工作区自动管理,设置WORKAREA_SIZE_POLICY 为AUTO,然后调整PGA_AGGREGATE_TARGET即可。
以下条件下hash join可能有优势:
两个巨大的表之间的连接。
在一个巨大的表和一个小表之间的连接。
可用ordered提示来改变CBO默认的驱动表,可用USE_HASH(table_name1 table_name2)提示来强制使用hash join。
3.SORT MERGE JOIN
![](/images/blogjava_net/kingkong/19153/r_sortmerge.jpg)
sort merge join的操作通常分三步:对连接的每个表做table access full;对table access full的结果进行排序;进行merge join对排序结果进行合并。sort merge join性能开销几乎都在前两步。一般是在没有索引的情况下,9i开始已经很少出现了,因为其排序成本高,大多为hash join替代了。
通常情况下hash join的效果都比sort merge join要好,然而如果行源已经被排过序,在执行sort merge join时不需要再排序了,这时sort merge join的性能会优于hash join。
在全表扫描比索引范围扫描再通过rowid进行表访问更可取的情况下,sort merge join会比nested loops性能更佳。
可用USE_MERGE(table_name1 table_name2)提示强制使用sort merge join。
4.半连接
nested loops semi是nested loop连接的变种,又叫半连接。原理与nl相同,通常用于in,exist操作,这种操作join时候,通常查找到一条纪录就可以了,所以用semi表示。与semi相似的有一种叫anti,反连接,一般用于not in,not exists,也有nest loop anti和hash anti两种。
5.星形
![](/images/blogjava_net/kingkong/19153/star.jpg)
常用于OLAP系统
posted @
2010-12-19 23:49 xrzp 阅读(218) |
评论 (0) |
编辑 收藏
1.观察cache size,观察主机内存情况,判断SGA的内存分配是否合理
2.观察load profile的transaction情况,判断系统的繁忙程度
3.观察load profile的parse和hard prase值,观察是否存在过多的硬解析
4.观察top5 timed event查看系统的瓶颈所在
5.关注6个order by的sql语句
posted @
2010-12-19 23:15 xrzp 阅读(433) |
评论 (0) |
编辑 收藏
摘要: TABLE函数可接受查询语句或游标作为输入参数,并可输出多行数据。该函数可以平行执行,并可持续输出数据流,被称作管道式输出。应用TABLE函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表.
TABLE函数(它...
阅读全文
posted @
2010-12-19 22:53 xrzp 阅读(1670) |
评论 (1) |
编辑 收藏
配置 ASMLib,遇到一个问题,如图:
可能的问题:
1.linux的
selinux没有关闭
2.驱动不对.
1.关闭selinux
vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
![](/Images/OutliningIndicators/None.gif)
再重启:
[root@rac1 ~]# setenforce 0
[root@rac1 ~]# /usr/sbin/sestatus
[root@rac1 ~]# reboot
![](/Images/OutliningIndicators/None.gif)
2.如果第一个不能解决问题,再查看驱动是否正确.
[root@rac1 ~]# ll
total 2084
drwxr-xr-x 2 root root 4096 Dec 5 15:37 Desktop
-rw-r--r-- 1 root root 1462 Dec 5 15:29 anaconda-ks.cfg
-rw-r--r-- 1 root root 54768 Dec 5 15:29 install.log
-rw-r--r-- 1 root root 69369 Dec 5 15:29 install.log.syslog
-rwxrwxr-x 1 root root 330867 Dec 6 00:43 ocfs2-2.6.9-78.EL-1.2.9-1.el4.i686.rpm
-rwxrwxr-x 1 root root 1044312 Dec 6 00:53 ocfs2-tools-1.2.7-1.el4.i386.rpm
-rwxrwxr-x 1 root root 173056 Dec 6 00:51 ocfs2console-1.2.7-1.el4.i386.rpm
-rwxrwxr-x 1 root root 132372 Dec 5 21:09 oracleasm-2.6.9-78.EL-2.0.5-1.el4.i686.rpm
-rwxrwxr-x 1 root root 82542 Dec 5 21:11 oracleasm-support-2.1.3-1.el4.i386.rpm
-rwxrwxr-x 1 root root 13105 Dec 5 21:11 oracleasmlib-2.0.4-1.el4.i386.rpm
![](/Images/OutliningIndicators/None.gif)
注意标黄色的这个驱动应该为:
oracleasm-2.6.9-78.ELsmp-2.0.5-1.el4.i686.rpm..
去oracle官网上找到该驱动并下载下来,重新安装.
[root@rac1 ~]# rpm -ivh oracleasm-2.6.9-78.ELsmp-2.0.5-1.el4.i686.rpm
warning: oracleasm-2.6.9-78.ELsmp-2.0.5-1.el4.i686.rpm: V3 DSA signature: NOKEY, key ID b38a8516
Preparing
########################################### [100%]
1:oracleasm-2.6.9-78.ELsm########################################### [100%]
![](/Images/OutliningIndicators/None.gif)
搞定:
posted @
2010-12-07 00:43 xrzp 阅读(210) |
评论 (0) |
编辑 收藏
ORA-12514可能的原因:
1.主机没有启动数据库
2.主机有多个ip地址,没在/etc/hosts中配置全
3.监听器配置错误,一劳永逸的方法是采用静态注册的方式
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /home/db/oracle/product/10.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = test1)
(ORACLE_HOME = /home/db/oracle/product/10.2.0)
(SID_NAME = test1)
)
)
![](/Images/OutliningIndicators/None.gif)
posted @
2010-07-05 14:51 xrzp 阅读(215) |
评论 (0) |
编辑 收藏
硬解析需要更多的内存空间, 更多的并发控制对于频繁执行的语句性能会显著的降低,所以对相似的语句只有某些数值变化的语句改写成完全相同的文本,我们称其为绑定.
手工绑定:
EXECUTE IMMEDIATE 'UPDATE EMPLOYEE SET sal = :new_sal' USING v_sal;
不绑定:
EXECUTE IMMEDIATE 'UPDATE EMPLOYEE SET sal ='||new_sal;
系统绑定:
CURSOR_SHARING
exact:文本完全相同的SQL语句才可共享cursor, exact必须精确
force:server 端强制绑定变量
similar:存在histogram(直方图)时对于不同的变量值重新解析,相当于SIMILAR=EXACT, 不存时与force一样
posted @
2010-06-20 21:45 xrzp 阅读(158) |
评论 (0) |
编辑 收藏
1.
SQL> create table testlong(l1 long,id int);
![](/Images/OutliningIndicators/None.gif)
表已创建。
![](/Images/OutliningIndicators/None.gif)
SQL>
SQL> insert into testlong values('aaaaaaaa',1);
![](/Images/OutliningIndicators/None.gif)
已创建 1 行。
![](/Images/OutliningIndicators/None.gif)
SQL> commit;
![](/Images/OutliningIndicators/None.gif)
提交完成。
2.
SQL>
SQL> create table testcopylong as select * from testlong;
create table testcopylong as select * from testlong
*
第 1 行出现错误:
ORA-00997: 非法使用 LONG 数据类型
3.
SQL> create table testcopylong(l1 long,id int);
![](/Images/OutliningIndicators/None.gif)
表已创建。
![](/Images/OutliningIndicators/None.gif)
SQL> copy from scott/tiger append testcopylong using select * from testlong;
SP2-0519: FROM 字符串缺失 Oracle Net @database 描述
SQL> copy from scott/tiger@test_10.10.10.1 append testcopylong using select * from testlong;
![](/Images/OutliningIndicators/None.gif)
数组提取/绑定大小为 15。(数组大小为 15)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 80。(long 为 80)
1 行选自 scott@test_10.10.10.1。
1 行已插入 TESTCOPYLONG。
1 行已提交至 TESTCOPYLONG (位于 DEFAULT HOST 连接)。
4.
SQL> select * from testcopylong;
![](/Images/OutliningIndicators/None.gif)
L1 ID
---------- ----------
aaaaaaaa 1
![](/Images/OutliningIndicators/None.gif)
posted @
2010-06-09 14:09 xrzp 阅读(287) |
评论 (0) |
编辑 收藏