下面的实验是如何处理Oracle 块损坏的情况:
1.创建测试表空间
SQL> create tablespace corrupt_tbs datafile '/u01/app/oracle/oradata/PROD/corrupt01.dbf' size 100M;
Tablespace created.
2.在该表空间上建立测试表
SQL> create table corrupt tablespace corrupt_tbs as select * from dba_objects;
Table created.
3,RMAN 做个备份,要养成好的习惯,多修改时一定要备份,DBA备份为重中之重
[oracle@even ~]$ rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on Mon Jan 14 00:15:59 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: PROD (DBID=215185106)
RMAN> backup tablespace corrupt_tbs;
4,模拟损坏数据文件(只能update,eg:把ABC该成BCD,否则会破坏ORACLE的存储结构,就恢复不了了)
[oracle@even ~]$vi -b /u01/app/oracle/oradata/PROD/corrupt01.dbf
5,全表扫描表发现报 01578
SQL> select count(*) from corrupt;
select count(*) from corrupt
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 15)
ORA-01110: data file 6: '/u01/app/oracle/oradata/PROD/corrupt01.dbf'
6,检查数据块
[oracle@even ~]$ cd /u01/app/oracle/oradata/PROD
[oracle@even PROD]$ dbv file=corrupt01.dbf blocksize=8192
DBVERIFY: Release 10.2.0.1.0 - Production on Mon Jan 14 00:24:53 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = corrupt01.dbf
Page 15 is marked corrupt
Corrupt block relative dba: 0x0180000f (file 6, block 15)
Bad check value found during dbv:
Data in bad block:
type: 6 format: 2 rdba: 0x0180000f
last change scn: 0x0000.0009545f seq: 0x1 flg: 0x04
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0x545f0601
check value in block header: 0xaca1
computed block checksum: 0x21b
DBVERIFY - Verification complete
Total Pages Examined : 12800
Total Pages Processed (Data) : 690
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 28
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 12081
Total Pages Marked Corrupt : 1
Total Pages Influx : 0
Highest block SCN : 611468 (0.611468)
7,export ORACLE_SID=PROD
rman target /
RMAN> BACKUP CHECK LOGICAL VALIDATE tablespace corrupt_tbs;
8,RMAN检查具体坏块,查看哪些具体坏块错误
SQL> select * from v$database_block_corruption;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
6 15 1 0 CHECKSUM
9,通过Rman恢复块损坏:
RMAN> blockrecover datafile 6 block 15;
Starting blockrecover at 14-JAN-13
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=153 devtype=DISK
channel ORA_DISK_1: restoring block(s)
channel ORA_DISK_1: specifying block(s) to restore from backup set
restoring blocks of datafile 00006
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/flash_recovery_area/PROD/backupset/2013_01_14/o1_mf_nnndf_TAG20130114T001623_8h5qgqvj_.bkp
channel ORA_DISK_1: restored block(s) from backup piece 1
piece handle=/u01/app/oracle/flash_recovery_area/PROD/backupset/2013_01_14/o1_mf_nnndf_TAG20130114T001623_8h5qgqvj_.bkp tag=TAG20130114T001623
channel ORA_DISK_1: block restore complete, elapsed time: 00:00:02
starting media recovery
media recovery complete, elapsed time: 00:00:03
Finished blockrecover at 14-JAN-13
10,看下是否还有01578错误
SQL> select count(*) from corrupt;
COUNT(*)
----------
50319
如果上面的还不行,则需要跳开坏块了
重复上面的实验 1,2,3,4,5,6,7 使用以下操作跳开坏块
alter session set events '10231 trace name context forever, level 10';
或者
begin
dbms_repair.skip_corrupt_blocks(
schema_name => 'HR',
object_name => 'CORRUPT', object_type => dbms_repair.table_object,
flags => dbms_repair.skip_flag);
end;
/
刷新内存
1. alter system flush buffer_cache; # 刷新buffer cache 组件
-- alter system flush shared_pool;
2. alter system checkpoint.
CocosBuilder动画等功能,还包括从2.1版本添加的一些新特性,本篇文章就介绍一下2.1中我非常喜欢的一个新特性--可以根据一个模板切割图片的节点--CCClippingNode。这个类提供了一种不规则切割图片的方式,在这种方式以前,我们可以使用纹理类自带的setTextureRect函数来切割矩形区域,这种方式就像是J2me的setClip方法一样整块的切割图片,比如我们要实现一个血条的时候,就可以使用这种方式进行切割,切掉我们不想显示的部分,而新特性中提供的CCClippingNode最大的不同之处就是裁减将不仅仅局限于矩形,可以根据任何形状进行裁减,而你要做的只是给一个“裁减模板”,这就好比是我们用剪刀剪形状,需要一个模具类的东西,然后我们拿着模具和要被裁减的纸顺着模具的边缘用剪刀剪就可以剪出一个模具的样子一样,首先来看这个类的常用函数(需要说明的是,这里介绍的函数只是这个类独有的,这个类继承自CCNode节点类,因此节点类有的函数也就不做介绍了):
getStencil:返回一个节点对象,这个对象就是之前提到的“裁减模板”。
setStencil:设置“裁减模板”。
getAlphaThreshold::这种裁减是可以改变裁减的透明度的,修改这个透明度就是通过设置这个阈值。
setAlphaThreshold:获得这个透明度阈值。
isInverted:之前说过的剪刀剪形状的例子,剪完形状以后,是显示被剪掉的部分,还是显示剩余的部分呢,默认isInverted值是false,是显示被剪掉的部分,设置为true则是显示剩余的部分。这个函数获得这个值。
setInverted:设置isInverted值。
使用这个效果,一般的过程是这样的:
//创建“裁减模板”
CCNode*stencil = this->stencil();
stencil->setTag( kTagStencilNode);
stencil->setPosition( ccp(50,50) );
//创建裁减节点类
CCClippingNode*clipper = this->clipper();
clipper->setTag( kTagClipperNode);
clipper->setAnchorPoint(ccp(0.5,0.5));
clipper->setPosition( ccp(s.width / 2 -50, s.height/ 2 - 50) );
//为设置裁减节点类设置“裁减模板”
clipper->setStencil(stencil);
this->addChild(clipper);
//设置裁减节点类所放的内容
CCNode*content = this->content();
content->setPosition( ccp(50,50) );
clipper->addChild(content);
通过这个新特性可以实现出很多有意思的效果,首先来学习一下cocos2D-x中的testApp的使用实例首先是一个类似ScrollView的滚动效果,在这之前,介绍cocos2D-x的另一个新特性—CCDrawNode,这个类不是一个新的功能,而是对原来功能的封装,在这之前,如果我们需要绘制矩形,圆形,点等形状,需要重新写一个类继承自节点或布景层,然后重写draw函数,现在使用CCDrawNode,可以直接使用这个类来绘制相应图形,相关函数如下所示:
drawDot:绘制点,参数给出坐标位置。
drawSegment:绘制片断,给出起始点,结束点,半径等参数。
drawPolygon:绘制矩形,可以分别给出填充颜色和边框颜色,还可以设置边框宽度。
实现类似ScrollView的滚动效果的代码如下:
//创建裁减节点类
CCClippingNode *clipper= CCClippingNode::create();
clipper->setTag( kTagClipperNode);
clipper->setContentSize( CCSizeMake(200, 200) );
clipper->setAnchorPoint( ccp(0.5, 0.5) );
clipper->setPosition( ccp(this->getContentSize().width / 2, this->getContentSize().height/ 2) );
clipper->runAction(CCRepeatForever::create(CCRotateBy::create(1, 45)));
this->addChild(clipper);
//创建
看资料的时候经常看到各种VGA,全都混了,无奈,找了些资料总结了下,分享给大家:
这些术语都是指屏幕的分辨率。
VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素;
HVGA:Half-size VGA,即:VGA的一半,分辨率为480×320,像三星盖世Ace S5830就是使用这分辨率;
QVGA:Quarter VGA,即:VGA的四分之一,分辨率为320×240,一般用于小屏手机 像三星盖世Mini S5570就是使用这分辨率;
WQVGA:Wide Quarter VGA,即:扩大的QVGA,分辨率比QVGA高,比VGA低,一般是:400×240,480×272;
WVGA:Wide Video Graphics Array,即:扩大的VGA,分辨率为800×480像素,像三星i9000就是使用这分辨率;
FWVGA:Full Wide VGA ,数码产品屏幕材质的一种,VGA的另一种形式,比WVGA分辨率高,别名 : Full Wide VGA, ,其分辨 率为854×480象素(16:9)。
以下是一些常见的分辨率