存档

‘Oracle’ 分类的存档

Oracle自动收集统计信息JOB失败解决

2014年8月1日 没有评论

Oracle自动收集统计信息JOB总是失败,原因大都因为数据量较大,在预计的时间窗口内统计信息未收集完毕。

1、查看JOB运行状态
阅读全文…

分类: Oracle 标签: ,

exp一张大表报ORA-01555和ORA-22922

2014年6月26日 没有评论

好早之前的一个活,一个pc server,windows下装的oracle9i,想换ibm p570小机,数据需从pc server迁移到小机,一张大表含blob类型字段,表数据量4T,当数据量导出到1.5TB时就会报ORA-01555和ORA-22922错。做了N多尝试,还是用了Oracle MOS的方案,原因还是在于有一些LOB数据库坏掉了,这里记录一下。

1 建一张临时表,用于存坏掉LOB相应行的rowid,例如:corrupt_lobs

SQL> create table corrupt_lobs (corrupt_rowid rowid, err_num number);

2 看一下表结构

DESC LOBDATA

Name Null? Type
———- ——— ————
ID NOT NULL NUMBER
DOCUMENT BLOB

阅读全文…

分类: Oracle 标签: , ,

amdu,从非挂载的asm提取文件

2014年6月8日 没有评论

ASM是10g时引入的,使用的人不多,偶尔有一些吃“螃蟹”的基本都是用在了linux下做rac,抑或是测着玩,原因在于大家对于新事物还都是观望的态度,传统的裸设备用久了也用熟了。而ASM是一个黑盒,如果ASM坏了,里面的数据文件等各种文件都读不出来岂不傻眼了,干着急没办法,只能求助于Oracle。
从11g开始,Oracle悄无生息的在$ORACLE_HOME/bin目录下多了amdu这个工具,手册上没有这个工具的任何信息,顶多是执行amdu -help会列出这个工具的各种选项,不过google或baidu一下内容就多了,会从各个搜索结果只言片语中立体的了解这个工具,细心一点也会知道Oracle mysupport上的DOC_ID:553639.1简单介绍了这个,Oracle也提供了10g的amdu的版本。
说了这么多,amdu倒底干啥用的,简单的说就是使用它可以从一个崩溃的ASM中把数据文件等各种文件读出来,它的存在为极大的增强最终用户使用asm的信心。它是给Oracle supporter的,不是面向最终用户的。不是每个最终用户都有Oracle服务,所以多学些知识没有坏处,如下以一个测试案例演示一下这个工具的使用。
阅读全文…

分类: Oracle 标签:

LogMiner

2014年5月16日 没有评论

LogMiner是Oracle数据库自带的一个工具,可以通过它分析在线日志和归档日志获取数据库过往详细、具体的操作,非常有用。

1 为什么会用到LogMiner?
主要出于以下几个缘由:
1)当数据库发生了误操作,需要不完全恢复,为确认误操作准确的时间点或SCN号,此时需用到LogMiner。
2)传统恢复一个上TB或是恢复一个几百GB表空间中的一个小表,标准的操作是把整个表空间恢复到之前的状态,然后再应用归档日志,加上搭建恢复环境的时间,整个时间会很长。通过LogMiner可以换一种恢复思维,能通过它解析到这个表上所有的DML操作,可以做反向修复。合理的使用会大幅降低此情况恢复的复杂度和时间。
3)可以把LogMiner当成最强大的数据库审计工具。
4)在过去的某个时间数据库很忙或是产生了大量的归档日志,通过LogMiner可以知道是哪些操作,哪个表占比较大,主要矛盾在哪。

2 几个概念
源库:生成归档日志和在线日志的库
目标库:执行LogMiner进行日志分析的库
字典:英文名为CATALOG,用于把日志中的内部信息翻译成实际的表名、列名等有价值信息
源库与目标库可以是同一个,也可以是不同的。如果不同,要求目标库数据库版本高于或等于源库;字符集要相同;操作系统、硬件平台要相同。
阅读全文…

分类: Oracle 标签:

RAC Rman备份考虑

2014年4月23日 没有评论

电信数据库大多做的是ORACLE RAC,数十TB级,因此备份的压力较大,需要在预计时间内完成全备份等任务。这个时侯很多人会想到备份从多结点走这样的方式,既保证了每个结点IO量保持在合适的范围,又会提升备份的性能,减少备份的时间。我们能见到一些技术书籍、技术文档描述的都非常简单,实测会发现依据这些描述在一些稍极端的情形(例如RAC向单结点恢复)恢复基本无法完成,备份变成了一种摆设。
以legato networker备份oracle rac为例,描述一下正确的设定有哪些。

1 legato networker配置注意项
计费库RAC系统包含两个个节点,分别名为jfdb1和jfdb2。每个节点是一个hp-ux操作系统,legato networker备份到IBM 3584带库,networker 存储节点软件安装在每个节点上。
在 NMC 界面中,两结点存储节点等配置都完成。
jfdb1结点为备份发起点点。(节点任意选择,也可以为jfdb2)在所有 RMAN 备份和还原脚本中, NSR_CLIENT 必须设置为节点jfdb1的主机名。
jfdb1的 NetWorker 客户端资源中:
“远程访问”属性设置为节点jfdb2的主机名称或*@*。
“存储节点”属性设置要修改为:
curphyhost
nsrserverhost

其它配置略。
阅读全文…

分类: Oracle 标签: , , ,

Oracle DRM

2014年4月16日 没有评论

1 前言
谈及DRM,好些人很陌生,又有一些人很兴奋。陌生的比较幸运,没遭遇过DRM BUG,。兴奋的人可能是被DRM折磨过,或是喜欢钻研Oracle技术。这是Oracle的一个新特性,Oracle 9i中提出,到10g时堂而皇之出现,到11g不断的优化完善.DRM被很多人评价为”臭名昭著”,所以在安装完Oracle RAC后不分青红皂白立即把DRM功能给关了,心想着从此高枕无忧了,我属于这一类,吃苹果打皮,虽然很多人说果皮很有营养,我坚持宁可不吸收这营养也不吸收毒素。
可换一种思维想一想,存在即合理,从Oracle 10g DRM被Oracle使用,虽然各色满屏的BUG这一特性也没被Oracle废弃掉,Oracle还不断的绞尽脑汁的完善这样一功能,说明这样的功能对于特定的情形是会获得很大性能收益的,这里不戴有色眼睛,客观的描述DRM的相关知识,使得我们在实践工作中更好的利用它。

2 DRM为何”臭名昭著”
自Oracle 10g正式引入DRM以来,这个新特性引发了很多故障,主要表现为DRM sync timeout,即同步超时,同时DRM需要LCK、LMD、LMS等进程的协作,某一环节由于BUG会引起DRM失败。一些严重的情况会使LMON及PMON等关键进程遇到481错误,进而导致实例被逐出,实例崩溃。在LMON的trace文件中,会看到类似如下信息:
阅读全文…

分类: Oracle 标签: ,

sql profile

2014年4月1日 没有评论

做为DBA很想让每一个SQL的执行计划都是优的,且不变化。在实际工作中有一类应用,用到的一些表是按月分区的,每次帐期切换一下,下一个帐期在使用时这些表的当月分区数据量会由0条记录变为数万条。因ORACLE自动收集统计信息的滞后性,不准确的统计信息引发了执行计划的改变,因此会引发性能的问题。

稳定执行计划大体有三种方法:
1)锁定统计信息,这比较适合参数类的表。
2)使用HINT方式,这需要开发程序变更程序,这样的方式对开发人员要求较高,而且死板,索引重建改个名就麻烦了。
3)使用类似sql profile这样的方式。9i的时侯用outline,10时推荐用sql profile,11g时推荐用SQL Plan Baselines。
阅读全文…

分类: Oracle 标签: ,

oracle死事务处理

2014年3月26日 没有评论

曾遇到两次死事务的问题,都是同事对一张大表清理时,PC机异常掉电,系统自动回滚造成的。smon会对死事务清理,会产生大量enq:TX锁等待,业务基本处理HANG的状态
一般说来DBA没有什么办法,只能乖乖的等着smon清理完,可业务等不急,如此下来一堆人围着你心情非常不爽。[@more@]1、如何查看是否有死事务?还有多少个块需要恢复?

用sys用户执行如下SQL:

SELECT KTUXEUSN ROLLBACK_SEGS_NUM,
KTUXESIZ UNDO_BLOCKS,
KTUXESLT,
KTUXESQN, /* Transaction ID */
KTUXESTA STATUS,
KTUXECFL FLAGS
FROM SYS.X$KTUXE
WHERE KTUXECFL = ‘DEAD’;

2、如何算一下需要多少时间恢复完?
可以看一下eygle的文章:http://www.eygle.com/archives/2007/09/smon_rollback_dead_transaction.html
阅读全文…

分类: Oracle 标签: ,

How to know one object’s dependence?

2014年3月26日 没有评论

在我们的日常的维护中,有时我们会调整一张表的表结构或是修改某一个底层一些的procedure等对象,而对其有依赖性的一些对象就会更得无效。事实上我们常需要看一下有哪些Object对于要修改的这个Object有依赖性以确实影响的范围,从而确定修改的时间。[@more@]

1 以HR用户下的Table A进行测试,建一Procedure参照它。

SQL> select * from tab where tname=’A’;
TNAME TABTYPE CLUSTERID
—————————— ——- ———-
A TABLE

CREATE PROCEDURE “HR”.”TEST” as
v1 number;
begin
select count(*) into v1 from a;
end;

2 发现dependence的方法。
阅读全文…

分类: Oracle 标签: ,

ORA-01438诊断

2014年3月26日 没有评论

ORA-014380, “value larger than specified precision allows for this column”这种报错很常见,大部时侯我们知道自己用的是什么语句,操作的是哪张表,但是哪个value引起的问题就很难判断了。
产生ora-01438的原因也不少,比如表上的trigger的级联DML操作引起的,bug的原因,但最主要的原因还是插入的列值过来引起的。
按习惯上讲,我们可以做一个1438的errorstack的trace,不过一般这个trace很大且用处也不大,因为只能从中看到哪个表、哪个列、哪条语句引起的问题,但是不清楚哪个值引起的问题。

如下以一个测试来粗略说明一个发现原因的方法。

1、准备测试条件:
1)表T1

SQL> desc t1
Name Null? Type
——————————- ——– ————
COL1 NUMBER(2)

阅读全文…

分类: Oracle 标签: ,