求解决玩fha时的运行时错误1004

关于fgo日服运营的一些疑问? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。19被浏览<strong class="NumberBoard-itemValue" title="2分享邀请回答1716 条评论分享收藏感谢收起63 条评论分享收藏感谢收起我完全是复制的精品区里那个FHA的解压密码,为啥还是失败了【fate吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:507,791贴子:
我完全是复制的精品区里那个FHA的解压密码,为啥还是失败了
G:\TDDOWNLOAD\HA.part1.rar: 加密文件 fate hollow ataraxia\bgimage.xp3 CRC 失败 (密码错误吗?)我复制的就是那个蘑菇速度填坑啊
索尼音乐是正版高品质无损音乐的付费下载网站,有超万首DSD/FLAC格式的Hi-Res曲库,其品质均超过无损音乐,成为追求发烧级音质的音乐爱好者首选的付费下载平台.
没错....人品问题,重下.....
115下东西如果RP不好,下载时文件损坏的话会出现原本没密码的文件要密码,密码正确也无法解压之类的情况得重下
贴吧热议榜
使用签名档&&
保存至快速回贴在Fate中都有什么为人熟知的梗? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。595被浏览<strong class="NumberBoard-itemValue" title="4,000分享邀请回答14922 条评论分享收藏感谢收起1.6K225 条评论分享收藏感谢收起Oracle Linux
oracle日常运维及应急故障处理手册
常见问题及处理方案
CPU使用率高的问题
通过操作系统命令toptopas glance等查看top进程号,确认是系统进程还是oracle应用进程,查询当前top进程执行的操作和sql语句进行分析。
根据进程号获取正在执行的sql
SELECT a.osuser, a.username,b.address,b.hash_value, b.sql_text fromv$session a, v$sqltext b, v$process p
where p.spid = &spid
& and p.addr = a.paddr
& and a.STATUS = 'ACTIVE'
& and a.sql_address =b.address
order by address,
数据库无法连接
数据库无法连接,一般可能是如下原因造成:
(1)数据库宕了
(2)监听异常
(3)数据库挂起
(4)归档目录满
(5)数据库或应用主机的网卡出现问题不能正常工作
(6)应用主机到数据库主机的网络出现问题。
1、数据库宕了
立即启动数据库。
2、监听异常
此时一般体现为:
监听进程占用CPU资源大;
监听日志异常。
此时,立即重启监听,监听重启一般能在1分钟之内完成。
3、数据库挂起
立即重启数据库。
4、归档目录满
(1)在没有部署OGG数据同步的情况下,立即清理归档日志文件。
(2)如果部署了OGG数据同步,查看OGG正在读取的归档日志文件,立即
清理OGG不再需要的日志文件。
5、数据库或应用主机的网卡出现问题不能正常工作。
立即联系主机工程师处理。
6、应用主机到数据库主机的网络出现问题。
立即联系网络维护人员查看。
CRS/GI无法启动
1、进入/tmp目录下,看是否产生了crsctl.xxxxx文件
如果有的话,看文件内容,一般会提示OCR无法访问,或者心跳IP无法
正常绑定等信息。
2、如果/tmp目录下没有crsctl.xxxxx文件
此时查看ocssd.log文件,看是否能从中得到有价&#20540;的信息。
可能的问题:网络心跳不通。
3、/tmp目录无crsctl.xxxxx且日志中没有报错信息,只有停CRS时的日志信
此时可能是RAC两个节点对并发裸设备的访问有问题,此时考虑:
(1)停掉两个节点的CRS。
(2)两个节点先同时去激活并发VG,然后再激活VG。
(3)重新启动CRS。
分析$GRID_HOME/log/nodename目录下的日志文件,看是否能从中找出无法启动的原因。
常见问题:
1、心跳IP不同。
2、ASM实例无法启动。
对CRS的故障诊断和分析,参加本文档中RAC部分的MOS文档.
数据库响应慢
应急处理步骤:
(1)找到占用CPU资源大的sql或者模块,然后停掉此应用模块。
(2)如果属于由于种种原因引起的数据库hang住情况,立即重启数据库,此时重启需要约15分钟时间。
重要说明:
如果重启数据库的话,会有如下负面影响:
(1)要kill掉所有连接到数据库中的会话,所有会话都会回滚。
(2)立即重启的话,不能获取并保留分析数据库挂起原因的信息,在后续分析问题时,没有足够信息用于分析问题产生的根本原因。
&&&& 一般正常重启的话,都需要手动获取用于分析数据库重启原因的信息,以便编写分析报告,但是在最长情况下,获取日志信息可能就要40分钟时间。此时一般做systemstate dump,且如果是rac情况的话,需要2个节点都做,且需要做2次或以上。
常规处理步骤,分如下几种情况处理:
(1)所有业务模块都慢。
(2)部分业务模块慢。
(3)数据库hang住。
此时首先查看系统资源,看是否属于CPU资源使用率100%的问题,如果是,参考本章“CPU使用率高的问题”解决办法。如果系统资源正常,那很可能是数据库hang住了,此时参考数据库Hang部分。
分析运行慢的模块的sql语句:
(1)看是否是新上的sql。
(2)看执行计划是否高效。
(3)优化运行慢的模块的sql语句。
应急处理方式:重启数据库。
常规处理方式:
(1)分析alert日志,看是否能从alert日志中,可以很快找到引起问题的原
(2)做3级别的hanganalyze,先做一次,然后隔一分钟以后再做一次。
并分析hanganalyze生成的trace文件,看是否可以找到引起数据库hang
住的会话的信息。
(3)做systemstate dump
此时生成systemstatedump的时间会比较长,尤其是在会话数量较多的情
况下。且生成dump文件的大小较大,在G级别以上。在生成一次以
后,过一分钟再收集一次,另外如果是RAC,那么两个节点都需要收
对hang做dump请参考“对数据库HANG做DUMP一章”。
数据误删除
此问题,没有应急办法,只能按如下步骤处理:
1、对于10g及以上版本,看是否可以通过闪回进行恢复。
2、查看测试环境数据库,看其中是否有需要的数据。
3、使用备份进行恢复,此方法一般花费时间较长。
快速shutdown数据库
1.&&&&&&停止监听
2.&&&&&&做一个检查点操作
3.&&&&&&杀掉所有LOCAL=NO的操作系统进程
AIX、HP-UX、Linux、Solaris:
$ ps -ef|grep $ORACLE_SID| grep LOCAL=NO | grep -v grep |awk '{print$2}'|xargs -i kill -9 {}
SQL& select 'orakill ' ||
(select value from v$parameter where name = 'instance_name') || ' '||p.spid
from v$process p, v$bgprocess bp
where p.ADDR = bp.PADDR(&#43;)
and bp.PADDR is null
and p.SPID
在命令行执行:
C:\& orakill db1 7642
C:\& orakill db1 7644
4.&&&&&&停止数据库
SQL& shutdown immediate
清理分布式事务
-- 9i需要设置_sum_debug_mode
SQL& alter session set &_smu_debug_mode& = 4;
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
column local_trna_id format a20
column global_tran_id format a25
SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, FAIL_TIME,STATE, MIXED
FROM DBA_2PC_PENDING;
LOCAL_TRAN_ID& GLOBAL_TRAN_ID&&&&&&&&&&&&& FAIL_TIME&&&&&&&&&&& STATE&&&&&&&&&&& MIX
-------------- -------------------------&&-------------------- ---------------- ---
12.29.103137&&TAXIS..29.-aug-:11 collecting&&&&&& no
SQL& commit force '12.29.103137';
Commit complete.
SQL& EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('12.29.103137');
PL/SQL procedure successfully completed.
SQL&&&&&&&&&&&&&&&&&&&&&&& --清理每个分布式事务都需要
1.&&&&&&相关参数
PARALLEL参数考虑
可以设置成物理CPU(不是逻辑CPU)数的两倍数目,然后调整
对于DataPump Export,PARALLEL参数必须要小于等于dump files数
对于DataPump Import,PARALLEL不要比dump文件数大很多,可以大一些。这个参数也指定了导入时创建索引的并行度。
PARALLEL只允许在企业版使用。
nohup expdp system/manager schemas=kdjm DIRECTORY=DUMP_FILES PARALLEL=3dumpfile=expCASES_%U.dmp logfile=nnsiexp.log &
通配符 %U,它指示文件将按需要创建,&#26684;式将为expCASES_nn.dmp,其中nn 从 01 开始,然后按需要向上增加
-- 监控长事务
set linesize 120
column opname heading 'Operation' format a25
column target heading 'Target' format a15
column pct heading 'Percent' format 999
column es heading 'Elapsed|Seconds' format 999999
column tr heading 'Time|Remaining|Seconds' format 99999
column program format a30
column machine format a16
select L.sid ssid,
&&&&&& substr(opname,1,25) opname,
&&&&&& target,
&&&&&& trunc((sofar/totalwork)*100)pct,
&&&&&&to_char(60*sofar**(last_update_time-start_time))/,
'9999.0') Rate,
&&&&&& round(elapsed_seconds/60, 2)es,
&&&&&& round(time_remaining/60, 2)tr,
&&&&&& program,
&&&&&& machine
& from v$session_longops L, v$sessions
where time_remaining & 0 and l.sid = s.sid
order by start_
在遇到坏块的时,一般应按以下的流程来处理:
1 如果坏块的对象是索引,重建索引
2 使用备份来进行恢复
3 使用10231事件,或者DBMS_REPAIR.SKIP_CORRUPT_BLOCKS过程,让oracle跳过坏块,然后用exp导出表和使用CREATE TABLE AS创建新表。
4 尝试使用SQL脚本将完好的数据复制到一个新表中,或者用EXP配合QUERY参数导出完好的数据。
5 手工修改坏块。
有两种情况是不能使用事件10231和DBMS_REPAIR.SKIP_CORRUPT_BLOCKS来跳过坏块的:
1 硬件问题造成OS层不能读取数据。
2 表中的非数据块,或者说是元数据块。比如段头,ExtentMap块。这种坏块是不能跳过的。
3 在表中存在有其他异常的块,从单个块来看都没有损坏,checksum&#20540;也是正确的,但是有的块在段内却是有问题的。比如在段的高水位下存在未&#26684;式化的块,查询这样的表时,会报ORA-8103错误;如果块的object id与段在数据字典里的data object id不相符,则会报ORA-1401错误。
Oracle数据文件的坏块,可分为物理坏块和逻辑坏块。物理坏块(也称为介质坏块),指的是块&#26684;式本身是坏的,块内的数据没有任何意义。而逻辑坏块,指的是块内的数据在逻辑上存在问题。比如说索引块的索引&#20540;没有按从小到大排列。物理坏块一般是由于内存问题、OS问题、IO子系统问题和硬件问题,逻辑坏块是由于ORACLEBUG等原因引起。
对数据库中的坏块进行验证。
RMAN& back
恢复一个数据文件上的多个坏块
RMAN& blockrecover datafile 14 block 56,107,276,517;
检验后我们查V$DATABASE_BLOCK_CORRUPTION
SQL& select * from v$database_block_
&&&& FILE#&&&& BLOCK#&&&&BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
&&&&&&& 14&&&&&&& 276&&&&&&&&& 1&&&&&&&&&&&&&&&&& 0 CHECKSUM
&&&&&&& 14&&&&&&& 517&&&&&&&&& 1&&&&&&&&&&&&&&&&& 0 CHECKSUM
&&&&&&& 14&&&&&&& 107&&&&&&&&& 1&&&&&&&&&&&&&&&&& 0 CHECKSUM
&&&&&&& 14&&&&&&&& 56&&&&&&&&& 1&&&&&&&&&&&&&&&&& 0 CHECKSUM
还可以通过blockrecovercorruption list进行块的恢复,这是在大量块损坏时或全部块损坏时使用,
前提是先执行backupvalidate database,在V$DATABASE_BLOCK_CORRUPTION里有对应的坏块的列表。
RMAN& blockrec
SQL TUNING
SQL PROFILE
创建PROFILE
& v_hhint&&&& sys.sqlprof_
& select SQL_TEXT
&&& into cl_sql_text
&&& from v$sql
&& where sql_id = '1304vvhkfctzq'
&&&& and rownum & 2;
& v_hhint :=sys.sqlprof_attr('BEGIN_OUTLINE_DATA',
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'IGNORE_OPTIM_EMBEDDED_HINTS',
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'OPTIMIZER_FEATURES_ENABLE(''10.2.0.4'')',
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'ALL_ROWS',&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'OUTLINE_LEAF(@&SEL$1&)',
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'INDEX_RS_ASC(@&SEL$1& &T2&@&SEL$1&(&T2&.&STATUS&))',
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'END_OUTLINE_DATA');
&dbms_sqltune.import_sql_profile(cl_sql_text,
&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&v_hhint,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'SQLPROFILE_1304vvhkfctzq',
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&force_match&&&&&&&&& =& true,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&replace&&&&&&&&&&&&& =& true);
获取PFOFILE的名字
SELECT&name,&created,category,sql_Text&from&dba_sql_profiles&ORDER&BY&created&DESC;&
删除PFOFILE
&#61623;&&&DBMS_SQLTUNE.DROP_SQL_PROFILE(name&=&&'PROFILE_NAME');&
获取OUTLINEHINT的信息
SELECT sql_attr.attr_val outline_hints&
FROM dba_sql_profiles sql_profiles, sys.SQLPROF$ATTR sql_attr&
WHERE sql_profiles.signature = sql_attr.signature
AND sql_profiles.name = 'SQLPROFILE_1304vvhkfctzq'
ORDER BY sql_attr.attr# ASC;
In order to execute Sql Tuning Adviser API, one must begranted with “ADVISER” role.
grant adviser to &user&;
– for a specific statement from AWR
SET SERVEROUTPUT ON
&-- Tuning task created for specific a statement from the AWR.
&&l_sql_tune_task_id& VARCHAR2(100);
&&l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
&&&&&&&&&&&&&&&&&&&&&&begin_snap&=& 764,
&&&&&&&&&&&&&&&&&&&&&&end_snap&&&=& 938,
&&&&&&&&&&&&&&&&&&&&&&sql_id&&&&&=& '19v5guvsgcd1v',
&&&&&&&&&&&&&&&&&&&&&&scope&&&&&&=& DBMS_SQLTUNE.scope_comprehensive,
&&&&&&&&&&&&&&&&&&&&&&time_limit&=& 60,
&&&&&&&&&&&&&&&&&&&&&&task_name&&=& '19v5guvsgcd1v_AWR_tuning_task',
&&&&&&&&&&&&&&&&&&&&&&description=& 'Tuning task for statement 19v5guvsgcd1v in AWR.');
&&DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
– or for a specific statement from Shared LibraryCache
&&l_sql_tune_task_id& VARCHAR2(100);
&&l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
&&&&&&&&&&&&&&&&&&&&&&&&&&sql_id&&&&&=& 'fhahkc71k304u',
&&&&&&&&&&&&&&&&&&&&&&&&&&scope&&&&&&=& DBMS_SQLTUNE.scope_comprehensive,
&&&&&&&&&&&&&&&&&&&&&&&&&&time_limit&=& 60,
&&&&&&&&&&&&&&&&&&&&&&&&&&task_name&&=& 'fhahkc71k304u_tuning_task',
&&&&&&&&&&&&&&&&&&&&&&&&&&description=& 'Tuning task for statement fhahkc71k304u.');
&&DBMS_OUTPUT.put_line('l_sql_tune_task_id:' || l_sql_tune_task_id);
-- Interrupt and resume a tuning task.
EXEC DBMS_SQLTUNE.interrupt_tuning_task (task_name =&'emp_dept_tuning_task');
EXEC DBMS_SQLTUNE.resume_tuning_task (task_name =&'emp_dept_tuning_task');
-- Cancel a tuning task.
EXEC DBMS_SQLTUNE.cancel_tuning_task (task_name =&'emp_dept_tuning_task');
-- Reset a tuning task allowing it to bere-executed.
EXEC DBMS_SQLTUNE.reset_tuning_task (task_name =& 'emp_dept_tuning_task');
execute the tuning task
EXEC DBMS_SQLTUNE.execute_tuning_task(task_name =&'fhahkc71k304u_AWR_tuning_task');
report tuning task findings
SET LONG 100000;
SET PAGESIZE 1000
SET LINESIZE 300
SELECT DBMS_SQLTUNE.report_tuning_task('fhahkc71k304u_AWR_tuning_task') ASrecommendations FROM
SET PAGESIZE 24
accept recommendations
execute dbms_sqltune.accept_sql_profile(task_name=&'fhahkc71k304u_AWR_tuning_task', replace =& TRUE);
useful views
DBA_ADVISOR_TASKS
DBA_ADVISOR_FINDINGS
DBA_ADVISOR_RECOMMENDATIONS
DBA_ADVISOR_RATIONALE
DBA_SQLTUNE_STATISTICS
DBA_SQLTUNE_BINDS
DBA_SQLTUNE_PLANS
DBA_SQLSET
DBA_SQLSET_BINDS
DBA_SQLSET_STATEMENTS
DBA_SQLSET_REFERENCES
DBA_SQL_PROFILES
V$ACTIVE_SESSION_HISTORY
收集统计信息
exec dbms_stats.gather_table_stats(
ownname =& 'SYS',
tabname =& 'T2',
estimate_percent =& 100,
cascade =& true,
method_opt =& 'for all columns size 1' );
显示执行计划
select * from table(dbms_xplan.display);
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
select * from table(dbms_xplan.display_awr('a7tgurqg403wp', null, null,'ALL'));
显示执行计划的outline
select * from table(dbms_xplan.display_cursor('sql_id', null, 'outline'));
显示query block(qb_name)
&&&&table(
&&&&&&&&dbms_xplan.display(
&&&&&&&&&&&&null,
&&&&&&&&&&&&null,
&&&&&&&&&&&&'typicalalias -rows -bytes -cost'
删除柱状图
&&&& srec&&&&&&&&&&& dbms_stats.
&&& m_distcnt&&&&&&
&&& m_density&&&&&&
&&& m_nullcnt&&&&&&
&&& m_avgclen&&&&&&
&&& n_array&&&&&&&&&&&&&&&& dbms_stats.
&&&& dbms_stats.get_column_stats(
&&&&&&& ownname&&&& =& user,
&&&&&&& tabname&&&& =& 't1',
&&&&&&& colname&&&& =& 'n1',
&&&&&&& distcnt&&&& =& m_distcnt,
&&&&&&& density&&&& =& m_density,
&&&&&&& nullcnt&&&& =& m_nullcnt,
&&&&&&& srec&&&&&&& =& srec,
&&&&&&& avgclen&&&& =& m_avgclen
&&& srec.bkvals :=
&&& srec.novals :=& dbms_stats.numarray(
&&&&&&&&&&&&&&&utl_raw.cast_to_number(srec.minval),
&&&&&&&&&&&&&&&utl_raw.cast_to_number(srec.maxval)
&&&&&&&&&&& );
&&& srec.epc := 2;
&&&dbms_stats.prepare_column_values(srec, srec.novals);
&&& m_density := 1/m_
&&& dbms_stats.set_column_stats(
&&&&&&& ownname&&&& =& user,
&&&&&&& tabname&&&& =& 't1',
&&&&&&& colname&&&& =& 'n1',
&&&&&&& distcnt&&&& =& m_distcnt,
&&&&&&& density&&&& =& m_density,
&&&&&&& nullcnt&&&& =& m_nullcnt,
&&&&&&& srec&&&&&& &=& srec,
&&&&&&& avgclen&&&& =& m_avgclen
&&& when others then
&&&&&&&&&&&& -- should handle div/0
表碎片整理
Oracle 10g之前
一般使用altertable table_name move tablespace,然后rebuild索引,因为move会导致rowid改变,从而原来的索引失效。
查看哪些表在空间上存在问题,可以查看dba_tables视图的avg_space列,这列显示的是数据库块的平均空闲空间大小,我们在建表的时候可以通过制定PCTFREE参数来设置每个数据块中保留空间的百分比,这部分空间用于因更新块内的行而导致的增长,默认&#20540;是10%,也就是819 bytes左右(块大小为8KB)。如果avg_space大于2KB,可能重整空间会有意义,这个&#20540;太大说明空间利用率较低,块空闲较多。我们调整空间的主要目的是降低高水位线(HIGHWATER
MARK),使扫描的表块数变小,从而提高效率。
Oracle 10g之后
alter table table_name
alter table table_name
alter table table_name move
清除监听日志
lsnrctl&set&log_status&off
lsnrctl&set&log_status&on
重建oraInventory
$ cat /etc/oraInst.loc
inventory_loc=/oracle/oraInventory
inst_group=oinstall
$ cd $ORACLE_HOME/oui/bin
$ ./runInstaller -silent -attachHome ORACLE_HOME=$ORACLE_HOMEORACLE_HOME_NAME=&OraDb11g_home1&
或者(/oracle/oraInventory目录可以mv掉,新建个目录)
export ORACLE_HOME=/oracle/product/crs/10.2.0
cd $ORACLE_HOME/oui/bin
./attachHome.sh
删除基于DBLINK的物化视图的时候要确认DBLINK的存在,否则会造成物化视图注册信息无法清除。
删除物化视图并不意味着要删除物化视图日志。因为物化视图日志可以同时支持多个物化视图的刷新,如果物化视图日志被删除,那么所有基于这个物化视图日志的物化视图无法再进行快速刷新。
在ONCOMMIT刷新模式下, 如果基表的DML很频繁, 会造成刷新很频繁, 这可能会造成DROP物化视图的语句一直挂起。
迁移数据文件
1.使数据文件离线
alter database datafile 'old_path' offline
2.移动数据文件
RMAN& copy datafile 'old_path' to 'new_path';
3 重命名数据文件
SQL&alter tablespace tbs_name rename datafile ' old_path ' to 'new_path';
4 恢复数据文件
RMAN& recover datafile 'new_path';
5 使数据文件在线
alter database datafile 'new_path'
IP访问限制
修改(需重启监听)
$ORACLE_HOME/network/admin/sqlnet.ora :
tcp.validnode_checking=yes
tcp.invited_nodes=(localhost, 本机ip, 应用服务器ip,管理机ip等)
重启监听:lsnrctlstop;lsnrctl start。
When do SQLNET.ORA changes take effect ? (Doc ID )
How to Centralize TNSNAMES.ORA, LISTENER.ORA And SQLNET.ORA files (Doc ID)
Configure Multiple DB Instances To Share SQLNET.ORA Without GivingWALLET_LOCATION For EUS (Doc ID )
Parameter OUTBOUND_CONNECT_TIMEOUT in SQLNET.ORA (Doc ID )
增加Current SCN
主要针对ORA-
通过adjust_scn event来调整
MOS 30681.1文章如下
Doc ID:& Note:30681.1
Subject:& EVENT: ADJUST_SCN - QuickReference
Type:& REFERENCE
Status:& PUBLISHED
&Content Type:& TEXT/PLAIN
Creation Date:& 20-OCT-1997
Last Revision Date:& 04-AUG-2000
Language:& USAENG
ADJUST_SCN Event
~~~~~~~~~~~~~~~~
*** WARNING ***
&& This event should only ever beused under the guidance
&& of an experienced Oracle analyst.
&& If an SCN is ahead of the currentdatabase SCN, this indicates
&& some form of database corruption.The database should be rebuilt
&& after bumping the SCN.
****************
&&& The ADJUST_SCN event is useful insome recovery situations where the
&&& current SCN needs to beincremented by a large value to ensure it
&&& is ahead of the highest SCN inthe database. This is typically
&&& required if either:
&&&&& a. An ORA-600 [2662] error issignalled against database blocks
&&&&& b. ORA-1555 errors keepoccuring after forcing the database open
&&&&&&&& or ORA-604 / ORA-1555 errorsoccur during database open.
&&&&&&&& (Note: If startup reportsORA-704 & ORA-1555 errors together
&&&&&&&&&&&&&&& then the ADJUST_SCNevent cannot be used to bump the
&&&&&&&&&&&&&&& SCN as the error isoccuring during bootstrap.
&&&&&&&&&&&&&&& Repeatedstartup/shutdown attempts may help if the SCN
&&&&&&&&&&&&&&& mismatch is small)
&&&&& c. If a database has beenforced open used _ALLOW_RESETLOGS_CORRUPTION
&& &&&&&&(See&Parameter:Allow_Resetlogs_Corruption& )
&&& The ADJUST_SCN event acts asdescribed below.
& **NOTE: You can check that theADJUST_SCN event has fired as it
& &&&& &&should write a message to the alert log inthe form
&&&&&& & &Debugging event used to advance scn to%s&.
&&&&&& & If this message is NOT present in the alertlog the event
&&&&&& & has probably not fired.
& ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
& If the database will NOT open:
& ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&&& Take a backup.
& &&You can use event 10015 to trigger anADJUST_SCN on database open:
&&&&&& alter session set events '10015trace name adjust_scn level 1';
&&&&&&& (NB: You can only useIMMEDIATE here on an OPEN database. If the
&&&&&& &&&& database is only mounted use the 10015trigger to adjust SCN,
&&&&&& &&&& otherwise you get ORA 600 [2251], [65535],[] )
&&&&&& If you get an ORA 600:2256shutdown, use a higher level and reopen.
&&& Do *NOT* set this event ininit.ora or the instance will crash as soon
&&& as SMON or PMON try to do anyclean up. Always use it with the
&&& &alter session&command.
& ~~~~~~~~~~~~~~~~~~~~~~~~~~
& If the database *IS* OPEN:
& ~~~~~~~~~~~~~~~~~~~~~~~~~~
&&& You can increase the SCN thus:
&&&&&& alter session set events'IMMEDIATE trace name ADJUST_SCN level 1';
&&& LEVEL:& Level 1 is usually sufficient - it raises theSCN to 1 billion
&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&& (24)
&&&&&& &&& Level 2 raises it to 2 billion etc...
&&&&&& &&& If you try to raise the SCN to a level LESSTHAN or EQUAL to its
&&&&&& &&& current setting you will get&OERI:2256&&&& - See below.
&&&&&& &&& Ie: The event steps the SCN to knownlevels. You cannot use
&&&&&&&&&&&&& the same level twice.
& Calculating a Level from 600errors:
&~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
&&&&&& To get a LEVEL for ADJUST_SCN:
&&&&&& a) Determine the TARGET scn:
&&&&&& &&& ora-600 [2662]&&& See &OERI:2662&& Use TARGET &= blocks SCN
&&&&&& &&& ora-600 [2256]&&& See &OERI:2256&& Use TARGET &= Current SCN
& &&&& b)Multiply the TARGET wrap number by 4. This will give you the level
&&&&&& && to use in the adjust_scn to get the correctwrap number.
&&&&&& c) Next, add the followingvalue to the level to get the desired base
&&&&&& && value as well :
&&&&&&& Add to Level&&&&&&&& Base
&&&&&&& ~~~~~~~~~~~~ ~~~~~~~~~~~~
&&&&&&&&&&&&&&&&&& 0&&&&&&&&&&& 0
&&&&&&&&&&&&&&&&&& 1&&
&&&&&&&&&&&&&&&&&& 2&&
&&&&&&&&&&&&&&&&&& 3&&
在Oracle 10g之前,一般采用使用这个event的方式来增大SCN.
ORA-00600: internal error code, arguments: [2662], [0], [], [0],[], [8388617], [], []
这个报错参数的含义在metalink中如此描述的:
Arg [a] Current SCN WRAP
Arg [b] Current SCN BASE
Arg [c] dependent SCN WRAP
为了存储更大的SCN&#20540;,当SCN BASE到足够大并开始重置的时候,SCN WRAP将加1。
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.
也就是Arg [d]的&#20540;是从哪个block中找到的,通常是一个data block address。
通过这几个参数根据一定的规则可以计算出我们需要的level。计算规则如下:
1. Arg [c] *4得出一个数&#20540;,假设为V_Wrap
2. 如果Arg[d]=0,则V_Wrap&#20540;为需要的level
Arg [d] & ,V_Wrap&#43;1为需要的level
Arg [d] & ,V_Wrap&#43;2为需要的level
Arg [d] & ,V_Wrap&#43;3为需要的level
计算方法的例子
ORA-00600: internal error code, arguments: [2662], [0], [2179133], [8656],[], [], [], []
Arg [C] *4 = 8656 * 4 = 34624
所以level =34624 &#43; 1 = 34625
因此在这个例子中我们应该执行
alter session set events 'IMMEDIATE trace name ADJUST_SCN level 34625';
但是随着oraclescn的patch更新后,11g后续的版本有些已经不能使用这种方式推进scn了.
11.2.0.4,12.0.1.0默认屏蔽;
11.2.0.2.5屏蔽
_minimum_giga_scn调整
这个参数可以将SCN提高1G的倍数,即24.
ALTER system SET &_minimum_giga_scn& = 1 scope =
或者在pfile里加入
但是随着oraclescn的patch更新后,11g后续的版本有些已经不能使用这种方式推进scn了.
11.2.0.4,12.0.1.0默认屏蔽;
修改控制文件推荐SCN
dump函数联合ue修改
oradebug修改SCN
http://blog.mchz.com.cn/?p=9009
BBED修改SCN
Master Note: Overview for SCN issues (Doc ID )
11g interval分区
CREATE TABLE year_interval_partition_table
(id number,time_col date) partition by range(time_col)
INTERVAL (NUMTOYMINTERVAL(1,'year')
(PARTITION part1 VALUES LESS THAN (TO_DATE ('', 'YYYY-MM-DD')),
PARTITION part2& VALUES LESS THAN(TO_DATE ('', 'YYYY-MM-DD'))
create table month_interval_partition_table (id number,time_col date)partition by range(time_col)
interval (numtoyminterval(1,'month'))
&partition p_month_1 values less than(to_date('','yyyy-mm-dd'))
for i in 0..11 loop
&insert intoMONTH_INTERVAL_PARTITION_TABLEvalues(i,add_months(to_date('','yyyy-mm-dd'),i));
create table day_interval_partition_table (id number,time_col date)partition by range(time_col)
interval (numtodsinterval(1,'day'))
&partition p_day_1 values less than(to_date('','yyyy-mm-dd'))
for i in 1..12 loop
&insert intoDAY_INTERVAL_PARTITION_TABLE values(i,trunc(to_date('','yyyy-mm-dd')&#43;i));
删除前一天的分区
declare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
min_par varchar2(30);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
max_par varchar2(30);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
str_sql varchar2(500);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
begin&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
select min(partition_name) into min_par from user_tab_partitions wheretable_name='T_PARTITION' and partition_name!='P_DAY_1';
select max(partition_name) into max_par from user_tab_partitions wheretable_name='T_PARTITION' and partition_name!='P_DAY_1';
if min_par && max_par then&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
str_sql:='alter table T_partition drop partition '||min_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
execute immediate str_&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
/&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
查看分区表
select table_name,partition_name from user_tab_partitions wheretable_name=’TABLE_NAME’;
SCHEDULER管理
&& DBMS_SCHEDULER.CREATE_JOB (
&&&&& job_name&&&&&&&&&& =&& 'INSERT_STAT_TBL',
&&&&& job_type&&&&&&&&&& =&& 'STORED_PROCEDURE',
&&&&& job_action&&&&&&&& =&&'INSERT_TABLESPACE_STAT',
&&&&& start_date&&&&&&&& =&&sysdate,
&&&&& repeat_interval&&& =&&'FREQ=DAILY;INTERVAL=1');
exec dbms_scheduler.run_job('INSERT_STAT_TBL');
用户LOGON触发器
在有些情况下需要去trace某些用户的行为,这时候就需要一个登陆触发器
例如下面的脚本
CREATE OR REPLACE TRIGGER SYS.set_trace
& AFTER LOGON ON DATABASE
& WHEN (USER like '&USERNAME')
& lcommand varchar(200);
& EXECUTE IMMEDIATE 'alter sessionset statistics_level=ALL';
& EXECUTE IMMEDIATE 'alter sessionset max_dump_file_size=UNLIMITED';
& EXECUTE IMMEDIATE 'alter sessionset events ''10046 trace name context forever, level 12''';
需要授权给用户
grant alter session to &USERNAME& ;
create tablespace perfstat datafile 'datafile_path' size 500M ex
执行创建脚本,创建过程中会提示输入default_tablespace和temporary_tablespace的内容,若有错误可以查看相应生成的.lis文件.
SQL& @spcreate
若需要重建,可以运行spdrop.sql脚本来删除这些对象.然后重新运行spcreate.sql
SQL& @spdrop.sql
SQL& @spcreate
SNAPSHOT等级
level 0: 一般性能统计.包括等待事件、系统事件、系统统计、回滚段统计、行缓存、SGA、会话、锁、缓冲池统计等等.
level 5: 增加SQL语句.除了包括level0的所有内容,还包括SQL语句的收集,收集结果记录在stats$sql_summary中,快照的默认级别.
level 6:包括SQL的执行计划,关注SQL的性能
level 7: 增加了段级统计信息(Segmentlevel Statistics),
level 10: 增加子锁存统计.包括level5的所有内容.并且还会将附加的子锁存存入stats$lathc_children中.在使用这个级别时需要慎重,建议在Oracle support的指导下进行.
收集SNAPSHOT
execute statspack.snap(i_snap_level=&0,i_modify_parameter=&’true’);
如果你只是想本次改变收集级别,可以忽略i_modify_parameter参数.
execute statspack.snap(i_snap_level=&0);
exec statspack.snap
exec statspack.snap(i_snap_level =& 6, i_modify_parameter =& 'true')
如果你只是想本次改变收集级别,可以忽略i_modify_parameter参数.
exec statspack.snap(i_snap_level =& 6)
带注释的snapshot
execute statspack.snap(i_snap_level=&7, I_UCOMMENT=&'performanceissue');
修改SNAPSHOT级别
exec statspack.modify_statspack_parameter(i_snap_level =& 6);&
设置定时任务
SQL& @spauto
脚本中有关时间间隔的设置内容,可以修改spauto.sql其内容来更改执行间隔,默认间隔为一小时.
dbms_job.submit(:jobno, 'statspack.',trunc(sysdate&#43;1/24,'HH'),'trunc(SYSDATE&#43;1/24,''HH'')', TRUE, :instno);
这个job任务定义了收集数据的时间间隔:
一天有24个小时,1440分钟,那么:
1/24 HH每小时一次
1/48 MI每半小时一次
1/144 MI每十分钟一次
1/288 MI每五分钟一次
SQL& @spreport.sql
删除历史数据
第一种方法:删除stats$snapshot数据表中的相应数据,其他表中的数据会相应的级连删除:
SQL& select max(snap_id) from stats$
SQL& delete from stats$snapshot where snap_id &= &snap_
第二种方法:使用自带的脚本sptrunc.sql
SQL& @sptrunc
EXP导出快照数据
使用spuexp.par文件exp保存相应数据
spuexp.par内容:
file=spuexp.dmp log=spuexp.log compress=y grants=y indexes=y rows=yconstraints=y wner=PERFSTAT consistent=y
exp userid=perfstat/perfstat parfile=spuexp.par
根据给定的SQL Hash&#20540;生成SQL报告
SQL& @sprepsql.sql
SNAPSHOT门限
快照门限只应用于stats$sql_summary表中获取的SQL语句.
因为每一个快照都会收集很多数据,每一行都代表获取快照时数据库中的一个SQL语句,所以stats$sql_summary很快就会成为Statspack中最大的表.
门限存储在stats$statspack_parameter表中:
executions_th这是SQL语句执行的数量(默认&#20540;是100)
disk_reads_tn这是SQL语句执行的磁盘读入数量(默认&#20540;是1000)
parse_calls_th这是SQL语句执行的解析调用的数量(默认&#20540;是1000)
buffer_gets_th这是SQL语句执行的缓冲区获取的数量(默认&#20540;是10000)
任何一个门限&#20540;超过以上参数就会产生一条记录.
通过调用statspack.modify_statspack_parameter函数改变门限的默认&#20540;:
exec statspack.modify_statspack_parameter(i_buffer_gets_th=&100000,i_disk_reads_th=&100000);
查看当前的AWR保存策略
select * from dba_hist_wr_
修改AWR保存时间和策略
如将收集间隔时间改为30 分钟一次。并且保留5天时间(注:单位都是为分钟):
exec dbms_workload_repository.modify_snapshot_settings(interval=&30,retention=&5*24*60);
关闭AWR自动快照
把interval设为0则关闭自动捕捉快照
手工创建快照
exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
select * from sys.wrh$_active_session_
exec WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id =& 22,high_snap_id =& 32, dbid =& );
在10.2.0.3的环境下执行这个命令并不会删除快照,这是个bug,bug信息为MOS 8622802。
如果打算删除指定数据库的所有快照,执行下面的语句
select dbid, status, count(*) from wrm$_snapshot group by dbid,
exec dbms_swrf_internal.unregister_database(dbid);
创建删除baseline
select dbid,baseline_name,start_snap_id,end_snap_id from dba_hist_
exec dbms_workload_repository.create_baseline (56,59,'baseline_name');
exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name =&'baseline_name', cascade =& FALSE);
AWR数据的导出和导入
$ORACLE_HOME/rdbms/admin/awrextr.sql&&--导出
拷贝导出的awr数据到目标数据库的指定DIRECTORY
$ORACLE_HOME/rdbms/admin/awrload.sql&&--导入
导入需要注意几点,输入DIRECTORY的时候注意大小写,另外输入导入的文件名时只输入前缀,不要输入完整的文件名。
导入的awr保存期限超过了100年,所以不会被自动删除
产生整个数据库的AWR报告,运行脚本awrrpt.sql。
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
产生某个实例的AWR报告,运行脚本awrrpti.sql。
&@$ORACLE_HOME/rdbms/admin/awrrpti.sql
产生某条SQL语句的AWR报告,运行脚本awrsqrpt.sql。
ORACLE 11GR2中,可以将多个实例生成的AWR汇总到一个文件
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
从AWR中获取TOP 5事件
Oracle 10g
select dbid from& v$database
set linesize 200
col BEGIN_INTERVAL_TIME for a40
col END_INTERVAL_TIME for a40
col event for a40
select snap_id,begin_interval_time,end_interval_time,snap_level from& dba_hist_
select max(snap_id) from dba_hist_
col event for a40
select case wait_rank
&&&&&&&& when 1 then
&&&&&&&&& inst_id
&&&&&& end &Inst Num&,
&&&&&& case wait_rank
&&& &&&&&when 1 then
&&&&&&&&& snap_id
&&&&&& end &Snap Id&,
&&&&&& case wait_rank
&&&&&&&& when 1 then
&&&&&&&&& begin_snap
&&&&&& end &Begin Snap&,
&&&&&& case wait_rank
&&&&&&&& when 1 then
&&&&&&&&& end_snap
&&&&&& end &End Snap&,
&&&&&& event_name &Event&,
&&&&&& total_waits &Waits&,
&&&&&& time_waited&Time(s)&,
&&&&&& round((time_waited /total_waits) * 1000) &Avg wait(ms)&,
&&&&&& round((time_waited / db_time)* 100, 2) &% DB time&,
&&&&&& substr(wait_class, 1, 15)&Wait Class&
& from (select inst_id,
&&&&&&&&&&&&&& snap_id,
&&&&&&&&&&&&&& to_char(begin_snap,'DD-MM-YY hh24:mi:ss') begin_snap,
&&&&&&&&&&&&&& to_char(end_snap,'hh24:mi:ss') end_snap,
&&&&&&&&&&&&&& event_name,
&&&&&&&&&&&&&& wait_class,
&&&&&&&&&&&&&& total_waits,
&&&&&&&&&&&&&& time_waited,
&&&&&&&&&&&&&& dense_rank()over(partition by inst_id, snap_id order by time_waited desc) - 1 wait_rank,
&&&&&&&&&&&&&& max(time_waited)over(partition by inst_id, snap_id) db_time
&&&&&&&&& from (selects.instance_number inst_id,
&&&&&&&&&&&&&&&&&&& &&&s.snap_id,
&&&&&&&&&&&&&&&&&&&&&&s.begin_interval_time begin_snap,
&&&&&&&&&&&&&&&&&&&&&&s.end_interval_time end_snap,
&&&&&&&&&&&&&&&&&&&&&& event_name,
&&&&&&&&&&&&&&&&&&&&&& wait_class,
&&&&&&&&&&&&&&&&&&&&&& total_waits -lag(total_waits, 1, total_waits) over(partition by s.startup_time,s.instance_number, stats.event_name order by s.snap_id) total_waits,
&&&&&&&&&&&&&&&&&&&&&& time_waited -lag(time_waited, 1, time_waited) over(partition by s.startup_time,s.instance_number, stats.event_name order by s.snap_id) time_waited,
&&&&&&&&&&&&&&&&&&&&&& min(s.snap_id)over(partition by s.startup_time, s.instance_number, stats.event_name)min_snap_id
&&&&&&&&&&&&&&&&& from (select dbid,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&instance_number,
&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&snap_id,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &event_name,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&wait_class,
&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&total_waitstotal_waits,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&round(time_waited_micro / ) time_waited
&&&&&&&&&&&&&&&&&&&&&&&&& fromdba_hist_system_event
&&&&&&&&&&&&&&&&&&&&&&&& wherewait_class not in ('Idle', 'System I/O')
&&&&&&&&&&&&&&&&&&&&&&& union all
&&&&&&&&&&&&&&&&&&&&&&& select dbid,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&instance_number,
&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&snap_id,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&stat_name event_name,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& nullwait_class,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& nulltotal_waits,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&round(value / ) time_waited
&&&&&&&& &&&&&&&&&&&&&&&&&from dba_hist_sys_time_model
&&&&&&&&&&&&&&&&&&&&&&&& wherestat_name in ('DB CPU', 'DB time')) stats,
&&&&&&&&&&&&&&&&&&&&&&dba_hist_snapshot s
&&&&&&&&&&&&&&&& wherestats.instance_number = s.instance_number
&&&&&&&&&&&&&&&&&& and stats.snap_id= s.snap_id
&&&&&&&&&&&&&&&&&& and stats.dbid =s.dbid
&&&&&&&&&&&&&&&&&& and s.dbid =
&&&&&&&&&&&&&&&&&& ands.instance_number = 1
&&&&&&&&&&&&&&&&&& and stats.snap_idbetween 29930 and 29943)
&&&&&&&& where snap_id &min_snap_id
&&&&& &&&&&and nvl(total_waits, 1) & 0)
&where event_name != 'DB time'
&& and wait_rank &= 5
&order by inst_id, snap_
Oracle 11g
select dbid from& v$database
col event for a40
set linesize 200
col BEGIN_INTERVAL_TIME for a40
col END_INTERVAL_TIME for a40
col event for a40
select case wait_rank
&&&&&&&& when 1 then
&&&&&&&&& inst_id
&&&&&& end &Inst Num&,
&&&&&& case wait_rank
&&&&&&&& when 1 then
&&&&&&&&& snap_id
&&&&&& end &Snap Id&,
&&&&&& case wait_rank
&&&&&&&& when 1 then
&&&&&&&&& begin_snap
&&&&& &end &Begin Snap&,
&&&&&& case wait_rank
&&&&&&&& when 1 then
&&&&&&&&& end_snap
&&&&&& end &End Snap&,
&&&&&& event_name &Event&,
&&&&&& total_waits &Waits&,
&&&&&& time_waited&Time(s)&,
&&&&&& round((time_waited /total_waits) * 1000) &Avg wait(ms)&,
&&&&&& round((time_waited / db_time)* 100, 2) &% DB time&,
&&&&&& substr(wait_class, 1, 15)&Wait Class&
& from (select inst_id,
&&&&&&&&&&&&&& snap_id,
&&&&&&&&&&&&&& to_char(begin_snap,'DD-MM-YY hh24:mi:ss') begin_snap,
&&&&&&&&&&&&&& to_char(end_snap,'hh24:mi:ss') end_snap,
&&&&&&&&&&&&&& event_name,
&&&&&&&&&&&&&& wait_class,
&&&&&&&&&&&&&& total_waits,
&&&&&&&&&&&&&& time_waited,
&&&&&&&&&&& &&&dense_rank() over(partition by inst_id,snap_id order by time_waited desc) - 1 wait_rank,
&&&&&&&&&&&&&& max(time_waited)over(partition by inst_id, snap_id) db_time
&&&&&&&&& from (selects.instance_number inst_id,
&&&&&&&&&&&&&&&&&&&&&& s.snap_id,
&&&&&&&&&&&&&&&&&&&&&&s.begin_interval_time begin_snap,
&&&&&&&&&&&&&&&&&&&&&&s.end_interval_time end_snap,
& &&&&&&&&&&&&&&&&&&&&&event_name,
&&&&&&&&&&&&&&&&&&&&&& wait_class,
&&&&&&&&&&&&&&&&&&&&&& total_waits -lag(total_waits, 1, total_waits) over(partition by s.startup_time,s.instance_number, stats.event_name order by s.snap_id) total_waits,
&&&&&&&&&&&&&& &&&&&&&&time_waited - lag(time_waited, 1,time_waited) over(partition by s.startup_time, s.instance_number,stats.event_name order by s.snap_id) time_waited,
&&&&&&&&&&&&&&&&&&&&&& min(s.snap_id)over(partition by s.startup_time, s.instance_number, stats.event_name)min_snap_id
&&&&&&&&&&&&&&&&& from (select dbid,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& instance_number,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&snap_id,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&event_name,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&wait_class,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&total_waits_fg total_waits,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&round(time_waited_micro_fg / ) time_waited
&&&&&&&&&&&&&&&&&&&&&&&&& fromdba_hist_system_event
&&&&&&&&&&&&&&&&&&&&&&&& wherewait_class not in ('Idle', 'System I/O')
&&&&&&&&&&&&&&&&&&&&&&& union all
&&&&&&&&&&&&&&&&&&&&&&& select dbid,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&instance_number,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&snap_id,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&stat_name event_name,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& nullwait_class,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& nulltotal_waits,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&round(value / ) time_waited
&&&&&&&&&&&&&&&&&&&&&&&&& fromdba_hist_sys_time_model
&&&&&&&&&&&&&&&&&&&&&&&& wherestat_name in ('DB CPU', 'DB time')) stats,
&&&&&&&&&&&&&&&&&&&&&&dba_hist_snapshot s
&&&&&&&&&&&&&&&& wherestats.instance_number = s.instance_number
&&&&&&&&&&&&&&&&&& and stats.snap_id= s.snap_id
&&&&&&&&&&&&&&&&&& and stats.dbid =s.dbid
&&&&&&&&&&&&&&&&&& and s.dbid =
&&&&&& &&&&&&&&&&&&and s.instance_number = 1
&&&&&&&&&&&&&&&&&& and stats.snap_idbetween 66 and 69)
&&&&&&&& where snap_id &min_snap_id
&&&&&&&&&& and nvl(total_waits, 1)& 0)
&where event_name != 'DB time'
&& and wait_rank &= 5
&order by inst_id, snap_
数据库补丁和升级
在某些情况下,比如解决oraclescn问题,解决某些bug,需要为数据库打补丁,其中既包括DB的补丁,也包括CRS、GI的补丁。在打补丁时需要注意如下事项:
(1)确认补丁打上以后解决问题,也就是说确保“对症下药”。
(2)仔细查看补丁的readme,并严&#26684;按照readme中的步骤进行操作。
(3)使用最新版本的opatch。
(4)对于RAC,在打补丁时,尽量分节点打,也就是说,尽量使用:
&& opatch apply -local 方式打补丁。
(5)对于10.2.0.3及以上版本的数据库,如果打的补丁是PSU,则需要为监听配置COST。
数据库升级
&& 对于数据库的大版本升级,根据是否跨平台、停机时间长短、数据量大小,可以根据实际的情况,采用同步软件、RMAN增量备份恢复、逻辑导出等多种方式进行迁移,但是最好是先进行测试。
对于小版本的升级,首先查看升级说明README,然后先在测试环境下进行测试,完成测试后,对生产环境进行备份,备份既包括数据库数据的备份,还包括软件的备份(CRS、DB),当各项工作完成后,确认各项工作都准备好后,在生产环境下进行升级。
Different Upgrade Methods For Upgrading Your Database (Doc ID )
Master Note For Oracle Database Upgrades and Migrations (Doc ID )
Complete Checklist for Manual Upgrades to 10gR2 (Doc ID )
Best Practices to Minimize Downtime During Upgrade (Doc ID )
Complete Checklist for Manual Upgrades to 11gR2 (Doc ID )
Complete Checklist for Manual Upgrades to Oracle Database 12c Release 1(12.1) (Doc ID )
Complete checklist for out-of-place manual upgrade from previous 11.2.0.Nversion to the latest 11.2.0.N patchset. (Doc ID )
Complete Checklist for Upgrading to Oracle Database 12c Release 1 usingDBUA (Doc ID )
Complete Checklist to Upgrade the Database to 11gR2 using DBUA (Doc ID)
Database Server Upgrade Downgrade Compatibility Matrix (Doc ID )
How to estimate the time required to upgrade a database (Doc ID )
Oracle Database Upgrade Path Reference List (Doc ID )
Upgrade Advisor Database from 9.2 to 11.2 (Doc ID 264.1)
Upgrade Advisor Database from 10.2 to 11.2 (Doc ID 251.1)
Oracle Clusterware的命令集可以分为4种
节点层:osnodes
网络层:oifcfg
集群层:crsctl,ocrcheck,ocrdump,ocrconfig
应用层:srvctl,onsctl,crs_stat
启动关闭RAC
emctl stop dbconsole
srvctl stop instance -d raw -i raw1
srvctl stop instance -d raw -i raw2
srvctl stop asm -n raw1
srvctl stop asm -n raw2
srvctl stop nodeapps -n raw1
srvctl stop nodeapps -n raw2
srvctl start nodeapps -n raw1
srvctl start nodeapps -n raw2
srvctl start asm -n raw1
srvctl start asm -n raw2
srvctl start instance -d raw -i raw2
srvctl start instance -d orcl -i raw1
emctl start dbconsole
CRS启动和关闭
-- 10.2、11.1
crsctl stop crs&&&&&&& # stops Oracleclusterware
crsctl start crs&&&&&&& # startsOracle Clusterware
crsctl enable crs&&&& # enablesOracle Clusterware
crsctl disable crs&&& # disablesOracle Clusterware
crsctl stop cluster –all
crsctl stop cluster -n &nodename&
1.&&&&&&命令汇总
-- 查看节点
$CRS_HOME/bin/olsnodes
-- 查看网络
$CRS_HOME/bin/oifcfg getif
-- 检查CRS
$CRS_HOME/bin/crsctl check crs
-- 检查VIP
srvctl config nodeapps -n &nodename& -a -g -s -l
-- 11gR2查看CRS状态
crsctl stat res -t -init
crsctl status resource -t
-- 检查CRS版本
crsctl query crs activeversion
-- 启动CRS排它模式
crsctl start crs -excl -nocrs&&& &&&&&&&&&&&&&&11.2.0.2
crsctl start crs -excl&&&&&&&&&&&&&&&&&&&&&&&& 11.2.0.1
-- 直接启动CRSD服务
crsctl start res ora.crsd -init
-- 注册资源
crs_unregister ora.node1.ASM1.asm
crs_stat -p ora.node1.ASM1.asm & ora.node1.ASM1.asm.cap
crs_register ora.node1.ASM1.asm
crsctl&stat&res&ora.scan1.vip&-p&&&/tmp/1.txt
crsctl&add&resource&ora.n2_scan1.vip&-type&ora.scan_vip.type&-file&/tmp/1.txt
-- 查看资源未启用的资源
crsctl stat res -w 'ENABLED != 0'
OCR和VoteDisk
-- 查看当前OCR
-- 查看OCR备份
ocrconfig -showbackup
-- 查看Votingdisk
crsctl query css votedisk
-- 备份OCR,路径:Grid_home/cdata/cluster_name,
ocrconfig -export ocr.bak
ocrconfig -manualbackup
-- 转储OCR
ocrdump -backupfile backup_file_name
-- OCR先加后删
ocrconfig -add new_OCR_location
ocrconfig -delete current_OCR_location
-- 移动OCR位置,OCR必须要2份以上
ocrconfig -repair -replace current_OCR_location -replacementtarget_OCR_location
-- 查看OLR
ocrcheck -local
-- 以文件模式查看OLR
ocrdump -local -stdout
-- 备份与恢复
ocrconfig -local -export file_name
ocrconfig -local -import file_name
ocrconfig –local –manualbackup
-- 查看OLR备份内容
ocrdump -local -backupfile olr_backup_file_name
-- 修改OLR备份路径
ocrconfig -local -backuploc new_olr_backup_path
迁移OCR到ASM
a.设置ASM Compatibility为11.2.0.0
b.检查Clusterware升级完成
& crsctl query crs activeversion
c.使用ASMCA来在所有节点启动ASM
d.使用ASMCA来创建放置OCR的DG
e.往DG中添加OCR(确保Clusterware 正在运行)
& ocrconfig -add &#43;new_disk_group
f.删除原始的OCR
& ocrconfig -deleteold_storage_location
a.查看节点:olsnodes
crsctl stop crs
crsctl stop crs -f
c. 以排它模式起CRS
crsctl start crs -excl
检查crsd是否起,如果起了的话,停止
crsctl stop resource ora.crsd -init
d. 导入OCR&&
ocrconfig -import file_name
e.停止CRS crsctl stop crs -f
f.正常启动CRS crsctl start crs
g.检查 cluvfycomp ocr -n all -verbose
# crsctl stop crs
# ocrconfig -local -restore file_name
# ocrcheck -local
# crsctl start crs
$ cluvfy comp olr
迁移Voting Disk
$ crsctl start crs -excl
$ crsctl query css votedisk
--& -----&&& -----------------&&&&&&&&&&&&&&& --------- ---------
##& STATE&&& File Universal Id&&&&&&&&&&& &&&&File Name Disk group
&1. ONLINE&& 7cf61bfc9fb95 (/dev/sdb1)[DATA]
$ crsctl replace votedisk &#43;asm_disk_group
$ crsctl delete css votedisk FUID
# crsctl stop crs
# crsctl start crs
Placement of Voting disk and OCR Files in Oracle RAC 10g and 11gR1 (Doc ID)
OCR / Vote disk Maintenance Operations: (ADD/REMOVE/REPLACE/MOVE) (Doc ID)
配置SCAN IP
$GRID_HOME/bin/srvctl config scan
SCAN name: onocrsst-scan, Network: 1/113.52.185.0/255.255.255.0/bge0
SCAN VIP name: scan1, IP: /onocrsst-scan/113.52.185.230
# DB配置初始化参数
*.remote_listener='onocrsst-scan:1521'
通过DNS查看SCAN IP
$ nslookup oncndb-situat-scanip
Server:&&&&&&&& 10.16.26.33
Address:&&&&&&& 10.16.26.33#53
Name:&&oncndb-situat-scanip.sit.shanghaionstar.com
Address: 113.52.185.230
切换SCAN IP所在的节点
当停止SCAN IP所在节点的CRS时,SCAN IP自动漂到另一个节点
也可以手工发出命令:
srvctl relocate scan -i &ordinal_number& [-n &node_name&]
srvctl relocate scan_listener -i &ordinal_number& [-n&node_name&]
SCAN IP修改监听端口
srvctl modify scan_listener -p 3521
srvctl stop scan_listener
srvctl start scan_listener
SCAN IP配置多端口
srvctl modify scan_listener -p &TCP:3521/TCP:1521&
srvctl stop scan_listener
srvctl start scan_listener
-- 校验OCR的一致性
cluvfy comp ocr -n all -verbose
-- 校验gpnp的一致性&& 11gR2
cluvfy comp gpnp -n all -verbose
查看RAC interconnect ip
1.oradebug ipc
sqlplus / as sysdba
oradebug ipc
oradebug tracefile_
2. select * from&x$
3. select&* from x$
4. select * from v$cluster_
5. SELECT * FROM V$CONFIGURED_INTERCONNECTS;
LoadBalance
-- 查看连接分布
set linesize 120
set pagesize 999
column username format a20
SELECT inst_id, TYPE,service_name, Count(*)
FROM gv$session GROUP BYinst_id, TYPE,service_
&& INST_ID TYPE&&&&&& SERVICE_NAME&&&&&&&&&& COUNT(*)
---------- ---------- -------------------- ----------
&&&&&&&& 1 BACKGROUNDSYS$BACKGROUND&&&&&&&&&&&&&& 29
&&&&&&&& 2 BACKGROUNDSYS$BACKGROUND&&&&&&&&&&&&&& 28
&&&&&&&& 2 USER&&&&&& SYS$USERS&&&&&&&& &&&&&&&&&&&46
&&&&&&&& 1 USER&&&&&& SYS$USERS&&&&&&&&&&&&&&&&&&& 48
&&&&&&&& 1 USER&&&&&& onpdlcl&&&&&&&&&&&&&&&&&&&&& 51
&&&&&&&& 2 USER&&&&&& onpdlcl&&&&&&&&&&&&&&&&&&&&& 65
SELECT inst_id, TYPE, service_name, username, Count(*)
FROM gv$session GROUP BY inst_id, TYPE,service_name, username
order by 1,2,3,4;
管理service_name
$ srvctl relocate service -h
$ srvctl add service -h
$ srvctl add service -d orcl -s szcg2 -r orcl2 -a orcl1
$ srvctl start service -d orcl -s szcg2
$ srvctl stop service -d orcl -s szcg2
$ srvctl status service -d RPTS
$ srvctl relocate service -d RPTS -s RPTS3 -i RPTS2 -t RPTS3
SET PAGESIZE 60 COLSEP '|' NUMWIDTH 8 LINESIZE 132 VERIFY OFF FEEDBACK OFF
COLUMN service_name FORMAT A20 TRUNCATED HEADING 'Service'
COLUMN begin_time HEADING 'Begin Time' FORMAT A10
COLUMN end_time HEADING 'End Time' FORMAT A10
COLUMN instance_name HEADING 'Instance' FORMAT A10
COLUMN service_time HEADING 'Service Time|mSec/Call' FORMAT
COLUMN throughput HEADING 'Calls/sec'FORMAT 99.99
BREAK ON service_name SKIP 1
&&& service_name
& , TO_CHAR(begin_time, 'HH:MI:SS')begin_time
& , TO_CHAR(end_time, 'HH:MI:SS')end_time
& , instance_name
& , elapsedpercall& service_time
& ,&callspersec& throughput
&&& gv$instance i&&&&
& , gv$active_services s&&&&
& , gv$servicemetric m
WHERE s.inst_id = m.inst_id&
& AND s.name_hash =m.service_name_hash
& AND i.inst_id = m.inst_id
& AND m.group_id = 10
&& service_name
&, i.inst_id
&&&&&&&&&&&&&&&&&& &|&&&&&&&&&|&&&&&&&&& |&&&&&&&&& |Service Time|
Service&&&&&&&&&&&& |Begin Time|EndTime& |Instance& |&&mSec/Call|Calls/sec
--------------------|----------|----------|----------|------------|---------
SYS$BACKGROUND&&&&& |09:52:39& |09:52:44&|tea1&&&&& |&&&&&&&&&& 0|&&&&& .00
&&&&&&&&&&&&&&&&&&& |09:52:39& |09:52:44&|tea2&&&&& |&&&&&&&&&& 0|&&&&& .00
SYS$USERS&&&&&&&&&& |09:52:39& |09:52:44&|tea1&&&&& |&&&&&&&&&& 0|&&&&& .00
&&&&&&&&&&&&&&&&&&& |09:52:39& |09:52:44&|tea2&&&&& |&&&&&&&&&& 0|&&&&& .00
dp_test&&&&&&&&&&&& |09:52:39& |09:52:44&|tea2&&&&& |&&&&&&&&&& 0|&&&&& .00
tea&&&&&&&&&&&&&&&& |09:52:39& |09:52:44&|tea1&&&&& |&&&&&&&&&& 0|&&&&& .00
&&&&&&&&&&&&&&&&&&& |09:52:39& |09:52:44&|tea2&&&&& |&&&&&&&&&& 0|&&&&& .00
-- 停止服务
exec dbms_service.stop_service('SYS$SYS.SCHEDULER$_EVENT_QUEUE.INAS','inas1');
-- 启动服务
exec dbms_service.start_service('SYS.SCHEDULER$_EVENT_QUEUE','inas1');
查看组件日志
-- 查看组件模块
[oracle@ora1 bin]$ &CRS_HOME&/bin/crsctl lsmodules css
-- 设置组件模块(root用户)
[root@ora1 bin]# &CRS_HOME&/bin/crsctl debug log css&CSSD:2&
-- 日志级别(一般设置2即可)
level 0 = turn off
level 2 = default
level 3 = verbose
level 4 = super verbose
查看心跳网络超时时间
crsctl get css misscount
设置心跳网络超时时间
crsctl set css misscount 60
crsctl get css disktimeout&& -- VD的超时时间,如果超时,VD置为offline
crsctl get css reboottime&&&&&&&&&& --CSS被驱逐后,等待的时间
修改查看css diagwait
$ crsctl set css diagwait 13
$ crsctl get css diagwait
11g不需要设置
Top 11 Things to do NOW to Stabilize your RAC Cluster Environment (Doc ID)
Pre-11.2: Node Fails to Reboot after Node Eviction or CRS Can't Rejoin theCluster after Node reboot as diagwait has Wrong Value (Doc ID )
Using Diagwait as a diagnostic to get more information for diagnosingOracle Clusterware Node evictions (Doc ID )
Pre-11.2 CRS Not Starting After Reboot as diagwait was Changed to WrongValue (Doc ID )
定位master node的方法
1.查询ocssd.log:不一定会有
grep -i &master node& ocssd.log | tail -1
2.查询crsd.log文件:
grep MASTER crsd.log | tail -1
3.查看OCR备份,OCR备份在master节点上
ocrconfig -showbackup&&&&&&&&&&&&&&&&&&&&&&&&&&&
4.查询V$GES_RESOURCE视图
查看集群名称
[root@tea2 ~]# su - grid
[grid@tea2 ~]$ cd $ORACLE_HOME/bin
[grid@tea2 bin]$ ./cemutlo -n
tea-cluster
[root@rac1 ~]# cd /oracle/app/crs/bin
[root@rac1 bin]# ./ocrdump
[root@rac1 bin]# vi OCRDUMPFILE
设置某个资源不启动
crsctl modify res 'ora.oc4j' -attr &ENABLED=0&
crsctl modify res 'ora.oc4j' -attr AUTO_START=never
打开srvctl的trace
export SRVM_TRACE=true
手工在SCAN_LISTENER中配置服务名
[grid@tea1 admin]$ cat listener.ora
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))&&&&&&&&&&&&&&& # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))&&&&&&&&&&& # line added by Agent
SID_LIST_LISTENER =(SID_LIST=(SID_DESC=(SID_NAME=newtea1)(GLOBAL_DBNAME=newtea_DGMGRL)(ORACLE_HOME=/oracle/app/11.2.0.4/db)))
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON&&&&&&&&&&&&& # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON&&&&&&&&&&&&&&& # line added by Agent
[grid@tea2 admin]$ cat listener.ora
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))&&&&&&&&&&&&&&& # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))&&&&&&&&&&&# line added by Agent
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=newtea2)(GLOBAL_DBNAME=newtea_DGMGRL)(ORACLE_HOME=/oracle/app/11.2.0.4/db)))
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON&&&&&&&&&&&&& # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON&&&&&&&&&&&&&&& # line added by Agent
当在LISTENER_SCAN1上配置了GLOBAL_NAME后,自动在每个节点的LISTENER上有相应的服务名
[grid@tea2 admin]$ lsnrctl status LISTENER_SCAN1
Service &newtea_DGMGRL& has 3 instance(s).
& Instance &newtea1&,status READY, has 1 handler(s) for this service...
& Instance &newtea2&,status UNKNOWN, has 1 handler(s) for this service...
& Instance &newtea2&,status READY, has 1 handler(s) for this service...
The command completed successfully
[grid@tea2 admin]$ lsnrctl status LISTENER
Service &newtea_DGMGRL& has 1 instance(s).
& Instance &newtea2&,status READY, has 1 handler(s) for this service...
The command completed successfully
[grid@tea1 admin]$ lsnrctl status LISTENER
Service &newtea_DGMGRL& has 1 instance(s).
& Instance &newtea1&,status READY, has 1 handler(s) for this service...
The command completed successfully
RAC节点驱逐
节点被驱逐一般是因为心跳超时所致,此时需要从crs日志、css日志、alert日志、操作系统日志等入手进行分析。同时,可以参考metalink上的如下文档:
1、Top 5 issues for InstanceEviction[文章 ID ]&
2、Frequent Instance Eviction in9i or Node Eviction in 10g/11g[文章 ID]
3、Node reboot or eviction: Howto check if your private interconnect CRS can transmit network heartbe[文章 ID ]
4、11gR2: LMON received aninstance eviction notification from instance n[文章 ID ]&
5、Exadata: Instance evictionwith IPC sendtimeout messages.[文章 ID]
6、11gR2 GI Node May not Join theCluster After Private Network is Functional After Eviction due to Pr[文章 ID ]
RAC修改IP地址
Oracle 10g rac(修改所有ip)
2.停止oracle相关进程(root执行)
./srvctl stop database -d database_name
./srvctl stop asm -n node_name
./srvctl stop asm -n node_name
./srvctl stop nodeapps -n node_name
./srvctl stop nodeapps -n node_name
/etc/init.d/init.crs stop 所有的节点
备份修改/etc/hosts文件
修改网卡ip地址,重启网络生效
启动crs,但是不启动asm database和nodeapp
-- 查看当前配置:root
./oifcfg getif -global
eth0& 10.223.10.0& global&public
eth1& 192.168.1.0& global&cluster_interconnect
-- 删除当前配置 root执行 下同
./oifcfg delif -global eth0
./oifcfg delif -global eth1
./oifcfg getif
-- 重新添加root
./oifcfg setif -global eth0/10.223.10.0:public
./oifcfg setif -global eth1/192.223.1.0:cluster_interconnect
./oifcfg getif
eth0& 10.223.10.0& global&public
eth1& 192.168.1.0& global&cluster_interconnect
3.3 修改VIProot
./srvctl modify nodeapps -n raw1 -A 10.223.10.100/255.255.255.0/eth0
./srvctl modify nodeapps -n raw2 -A 10.223.10.101/255.255.255.0/eth0
修改listener.ora和tnsnames.ora
如果你使用了ocfs,修改ocfs配置文件(/etc/ocfs/cluster.conf),验证修改后是否可用。
启动asmdatabase nodeapp
How to Modify Private Network Information in Oracle Clusterware (Doc ID)
How to Validate Network and Name Resolution Setup for the Clusterware andRAC (Doc ID )
How to Modify Public Network Information including VIP in OracleClusterware (Doc ID )
FailOver模式
第一步安装执行dbca,选择Oracle Real ApplicationCluster database,点”Next”
第二步:选择Services Management,点”Next”
第三步:添加service name,需设定不同的InstanceRole
(1)点击”Add”,添加service name,在填出框输入servicename,名称可自定,本例使用cwvpd,然后点”OK”
(2)默认情况下,新创建servicename的Instance Role是相同的,都为Preferred,这里需调整一个实例为Preferred,一个为Available;接着设置TAF Policy为Basic,然后点”Finish”
上述两种方式各有优劣,前者建立连接的开销相对较小,但failover时会产生延迟,而后者正好与前者相反。
(3)在弹出框点”OK”
(4)在弹出框点”Yes”
2 修改service的TAF配置
Oracle RAC 客户端故障转移(failover),当采用TAF方式时,对于已经建立连接的客户端,在连接的实例或节点出现故障时,客户端无需再次发出连接请求,仍然可以继续之前的数据库操作,此称之为透明故障转移。
TAF就是说对于那些已经成功连接到特定实例的客户端,如果该实例或节点异常宕机,客户端会自动重新发出到剩余实例的连接请求。使得客户端感觉不到它所连接的实例或节点已经出现故障,这个就称之为透明转移。但其间的活动事务将被回滚。
使用Server-side TAF配置,可采用本文档中推荐的参数设置。
步骤如下:
1)调用dbms_service.modify_service修改failover设置
&&&&&& Dbms_Service.Modify_Service(
Service_Name =& 'cwvpd', &&--根据实际情况定义服务名
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Failover_Method =& Dbms_Service.Failover_Method_Basic,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & Failover_Type =&Dbms_Service.Failover_Type_Select,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Failover_Retries =& 180,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & Failover_Delay =& 5);
2)检查修改是否生效
SELECT NETWORK_NAME, FAILOVER_METHOD, FAILOVER_TYPE, FAILOVER_RETRIES,FAILOVER_DELAY FROM DBA_SERVICES WHERE NAME = 'CWVPD';
3 检查CRS资源状态
查看节点state是否为ONLINE状态
4 检查service状态
检查状态,命令参考如下:
5 检查service配置
检查配置,包括Instance Role和TAF策略,命令如下:
set linesize 120
set pagesize 999
column service_name format a15
select INST_ID, service_name, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER
from gv$session where type = 'USER';
RAC添加在线日志
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 5('&#43;DGIDT2PLF/idt2plf/onlinelog/redo05_1.log','&#43;DGIDT2PLF/idt2plf/onlinelog/redo05_2.log')SIZE 500M;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 6('&#43;DGIDT2PLF/idt2plf/onlinelog/redo06_1.log','&#43;DGIDT2PLF/idt2plf/onlinelog/redo06_2.log')SIZE 500M;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP7('&#43;DGIDT2PLF/idt2plf/onlinelog/redo07_1.log','&#43;DGIDT2PLF/idt2plf/onlinelog/redo07_2.log') SIZE 500M;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP8('&#43;DGIDT2PLF/idt2plf/onlinelog/redo08_1.log','&#43;DGIDT2PLF/idt2plf/onlinelog/redo08_2.log') SIZE 500M;
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
alter database drop logfile group 4;
增加控制文件
步骤一:检查参数
一个节点操作:
SQL& show parameter control_files
SQL& show parameter spfile
步骤二:关闭数据库
两个节点操作:
SQL& shutdown immediate(两个节点)
步骤三:启动数据库到nomount状态
一个节点:
SQL& startup nomount
步骤四:恢复控制文件到默认路径
一个节点:
使用RMAN恢复控制文件。
ORACLE$ rman target /
RMAN& restore controlfile from&'&#43;DATA/yyjc/controlfile/xxxx.xxx.xx';
(登录ASM查看恢复出的控制文件名,修改参数需要用到此文件名)
步骤五:修改参数文件
一个节点:
修改SPFILE增加控制文件,并重启实例
alter system setcontrol_files='&#43;DATABASE_DG/yjdb/controlfile/current.260.' , '文件名' scope=spfile sid='*';
步骤六:关闭数据库
两个节点:
SQL& shutdown immediate
步骤七:启动数据库
两个节点操作:
SQL& startup
步骤八:检查数据库
一个节点操作:
检查并确认
SQL& show parameter control_files
SQL& show parameter spfile
SQL& select * from v$
看到两个控制文件,则正常。
查询数据块的MASTER和OWNER
select kj.*, le.le_Addr from (
select kjblname, kjblname2, kjblowner, kjblmaster, kjbllockp,
substr ( kjblname2, instr(kjblname2,',')&#43;1,&&instr(kjblname2,',',1,2)-instr(kjblname2,',',1,1)-1)/65536 fl,
substr ( kjblname2, 1, instr(kjblname2,',')-1) blk
&from x$kjbl
) kj, x$le le
where le.le_kjbl = kj.kjbllockp
&order by le.le_
手动REMASTER(DRM)
oradebug lkdebug -m pkey object_id
MOS相关文档(RAC)
Adding a Node to a 10g RAC Cluster (Doc ID )
How To Rebuild a Corrupted CRS Home (Doc ID )
Top 3 RAC Database Instance Hang Issues (Doc ID )
Top 5 RAC Instance Crash Issues (Doc ID )
Top 5 issues for Instance Eviction (Doc ID )
Node reboot or eviction How to check if your private interconnect CRS cantransmit network heartbeats (Doc ID )
Oracle Clusterware Cannot Start on all Nodes Network communication withnode NAME missing for 90% of timeout interval (Doc ID )
RAC and Oracle Clusterware Best Practices and Starter Kit (HP-UX) (Doc ID)
RAC and Oracle Clusterware Best Practices and Starter Kit (Linux) (Doc ID)
RAC and Oracle Clusterware Best Practices and Starter Kit (AIX) (Doc ID)
Data Collecting for Troubleshooting Oracle Clusterware (CRS or GI) And RealApplication Cluster (RAC) Issues (Doc ID )
Adding a Node to a 10g RAC Cluster (Doc ID )
addnode.sh& The virtual host name vipfor node nodenameis already in use. (Doc ID )
Troubleshoot Grid Infrastructure Startup Issues (Doc ID )
CRS Diagnostic Data Gathering A Summary of Common tools and their Usage(Doc ID )
CSS Timeout Computation in Oracle Clusterware (Doc ID )
Failover Issues and Limitations [Connect-time failover and TAF] (Doc ID97926.1)
Instance Service Registration to Listeners (Doc ID 69546.1)
CRS 10g Diagnostic Collection Guide (Doc ID )
CRS 10gR2 11gR1 11gR2 Diagnostic Collection Guide (Doc ID )
Data Gathering for Instance Evictions in a RAC environment (ORA-29740) (DocID )
Resolving Instance Evictions on Windows Platforms (Doc ID )
Troubleshooting 11.2 Clusterware Node Evictions (Reboots) (Doc ID)
Troubleshooting ORA-29740 in a RAC Environment (Doc ID )
Steps To Shutdown(stop)/Startup(start) The CRS, OHAS, ASM, RDBMS & ACFSServices on RAC 11.2 Configuration. (Doc ID )
How To Validate ASM Instances And Diskgroups On A RAC Cluster (When CRSDoes Not Start). (Doc ID )
创建磁盘组
CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK
'c:/asmdisks/_file_disk1',
'c:/asmdisks/_file_disk2',
'c:/asmdisks/_file_disk3',
'c:/asmdisks/_file_disk4';
Normal冗余
CREATE DISKGROUP DATA_DW01 NORMAL REDUNDANCY
& FAILGROUP dw01cel01 DISK&&&&&&
&& '/oracle/disks/_asm_disk1',
&& '/oracle/disks/_asm_disk2',
&& '/oracle/disks/_asm_disk3',
&& '/oracle/disks/_asm_disk4'
& FAILGROUP dw01cel02 DISK&&&&&&
&& '/oracle/disks/_asm_disk5',
&& '/oracle/disks/_asm_disk6',
&& '/oracle/disks/_asm_disk7',
&& '/oracle/disks/_asm_disk8';
-- 11gR2参数
&& attribute
&& 'AU_SIZE'='4M',
&& 'CELL.SMART_SCAN_CAPABLE'='TRUE',
&& 'compatible.rdbms'='11.2.0.2',
&& 'compatible.asm'='11.2.0.2'
alter diskgroup data add disk '/dev/raw/raw4';
SQL& select disk_number,state,name from v$asm_
DISK_NUMBER STATE&&&&&&& &&&&NAME
----------- ---------------- --------------------
&&&&&&&&& 2 NORMAL&&&&&&&&&& DATA_0002
&&&&&&&&& 1 NORMAL&&&&&&&&&& DATA_0001
&&&&&&&&& 3 NORMAL&&&&&&&&&& DATA_0003
&&&&&&&&& 0 NORMAL&&&&&&&&&& DATA_0000
alter diskgroup data drop disk DATA_0001;
在drop磁盘时,会自动迁移数据,所以drop不是瞬间完成
alter diskgroup data drop disk DATA_0001 rebalance power 5;
alter diskgroup data drop disk DATA_0001
注意:force是直接删除磁盘,如果diskgroup的normal或high,ASM拿另一份数据再生成冗余。不使用force 是先平衡数据,再删除磁盘。
放弃删除磁盘
ALTER DISKGROUP &DG NAME& UNDROP DISKS;
查看ASM状态
select * from v$asm_
GROUP_NUMBER OPERATION& STATE&&&&&&&& POWER&&&& ACTUAL&&&&&SOFAR&& EST_WORK&& EST_RATE EST_MINUTES
------------ ---------- -------- ---------- ---------- -------------------- ---------- -----------
& &&&&&&&&&1 REBAL&&&&& RUN&&&&&&&&&&&&&& 1&&&&&&&&& 1&&&&&&& 268&&&&&&& 515&&&&&&& 296&&&&&&&&&& 0
修改ASM平衡数据速度
-- POWER&#20540;为0到11,0为停止,11为最快
ALTER DISKGROUP data REBALANCE POWER 5;
磁盘组重新平衡
alter diskgroup DATA_DW01
磁盘组check
alter diskgroup DATA_DW01
alter diskgroup DATA_DW01
在相应的ASM的alert日志中会发现:
Thu Oct 10 00:48:50 CST 2013
SQL& alter diskgroup DATA_DW01 check all repair
Thu Oct 10 00:48:50 CST 2013
NOTE: starting check of diskgroup DATA_DW01
WARNING: disk DATA_DW01_0001, changing DD used AUs from 981 to 979
WARNING: disk DATA_DW01_0002, changing DD used AUs from 500 to 490
WARNING: disk DATA_DW01_0004, changing DD used AUs from 479 to 491
SUCCESS: check of diskgroup DATA_DW01 found no errors
添加数据文件
-- ASM使用OMF自管理,添加数据文件更简单
建议添加的时候最好还是制定全路径,免得误操作添加到文件系统中。
create tablespace test datafile ‘&#43;DATA/tea/datafile/system.264.’size 20M;
Linux2.6内核,RDBMS在10.2.0.2版本之后支持直接访问块设备
但OUI(10.1.0和10.2.0)在装CRS时不支持直接访问块设备,必须要在11.1.0.6.0版本之后
参考Linux2.6 Kernel Deprecation of Raw Devices [ID ]
asm_diskstring
asm_diskstring不允许设置成/dev/或/dev/*,这会引起扫描所有设备,参考如下:
root.sh Hangs or Reboots Node on Non First Node if ASM Discovery Stringasm_diskstring is Set to /dev/ or /dev/* [ID ]
在11.2.0.2AIX 5.3上设置挂起。
查看ACFS挂载点
select FS_NAME, VOL_DEVICE, TOTAL_MB , FREE_MB from V$ASM_ACFSVOLUMES;
修改ASM密码
1.11gR2 RAC
ASMCMD& orapwusr --modify --password sys
2.11gR2 SI
ASMCMD& passwd sys
修复磁盘头
读取磁盘头
$ kfed read /dev/raw/raw1234 text=raw1234.out
从10.2.0.5开始,Oracle备份磁盘头信息
$ kfed read /dev/raw/raw1234 blknum=510 text=raw1234.out&&&&&&&& -& 一般备份的磁盘头放在510块上
$ kfed repair /dev/raw/raw1234&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& -&grid用户操作
SQL& alter diskgroup data_
监控ASM磁盘性能
ORACLE提供了相关工具叫做asmiostat用来监控磁盘的IO性能。
具体请查阅文章
ASMIOSTAT Script to collect iostats for ASM disks (Doc ID )
ASM的相关文档
How to Prepare Storage for ASM (Doc ID )
Master Note for Automatic Storage Management (ASM) (Doc ID )
ASM Technical Best Practices For 10g and 11gR1 Release (Doc ID )
ASM Concepts Quick Overview (Doc ID )
How To Validate ASM Diskgroup Consistency/State After ASM ReclamationUtility (ASRU) Execution Aborted. (Doc ID )
ASM Technical Best Practices For 10g and 11gR1 Release (Doc ID )
Information Center: Oracle Automatic Storage Management (Doc ID )
Information Center: Install and Configure Oracle Automatic StorageManagement (Doc ID )
ASMCMD - ASM command line utility (Doc ID )
ASM Technical Best Practices For 10g and 11gR1 Release (Doc ID )
启动停止DG
-- 在生产库停止DataGuard操作
SQL& show parameter log_archive_dest
SQL& alter system set log_archive_dest_state_2=
-- 在生产库开启DataGuard操作:
SQL& alter system set log_archive_dest_state_2=
查看归档情况:
SELECT THREAD# &Thread&, SEQUENCE# &Last SequenceGenerated&
& FROM V$ARCHIVED_LOG
&WHERE (THREAD#, FIRST_TIME) IN
&&&&&& (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)
&ORDER BY 1;
SELECT ARCH.THREAD# &Thread&,
&&&&&& ARCH.SEQUENCE# &LastSequence Received&,
&&&&&& APPL.SEQUENCE# &LastSequence Applied&,
&&&&&& (ARCH.SEQUENCE# -APPL.SEQUENCE#) &Difference&
& FROM (SELECT THREAD#, SEQUENCE#
&&&&&&&&& FROM V$ARCHIVED_LOG
&&&&&&&& WHERE (THREAD#, FIRST_TIME)IN
&&&&&&&&&&&&&& (SELECT THREAD#,MAX(FIRST_TIME)
&&&&&&&&&&&&&&&&& FROM V$ARCHIVED_LOG
&&&&&&&&&&&&&&&& GROUP BY THREAD#))ARCH,
&&&&&& (SELECT THREAD#, SEQUENCE#
&&&&&&&&& FROM V$LOG_HISTORY
&&&&&&&& WHERE (THREAD#, FIRST_TIME)IN
&&&&&&&&&&&&&& (SELECT THREAD#,MAX(FIRST_TIME)
&&&&&&&&&&&&&&&&& FROM V$LOG_HISTORY
&&&&&&&&&&&&&&&& GROUP BY THREAD#))APPL
&WHERE ARCH.THREAD# = APPL.THREAD#
&ORDER BY 1;
跳过事务(逻辑)
在备库查看应用事件:
SELECT EVENT_TIME,EVENT,XIDUSN, XIDSLT, XIDSQN FROM DBA_LOGSTDBY_EVENTSorder by 1
可跳过某些引起阻塞的DDL或DML应用,然后手工执行这些应用:
alter database
exec dbms_logstdby.skip_transaction(14,21,517969);
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
在备份库跳过特定的DML或DDL操作
alter database stop l
execute dbms_logstdby.skip (stmt =&'DML',
schema_name =& 'BANPING',
object_name =& 'TABLENAME',
proc_name =& null);
alter database start l
重新初始化表(逻辑)
alter database stop l
execute dbms_logstdby.unskip('DML','BANPING','TABLENAME');
exec dbms_logstdby.instantiate_table('BANPING','TABLENAME','dblink_name');
alter database start l
注意这里建立的DBLINKdblink_name必须是public的
在备库查看日志应用状态和进度(逻辑)
select * from V$LOGSTDBY_STATE;
select * from V$LOGSTDBY_PROGRESS;
在备库手动注册归档日志
SQL& ALTER DATABASE REGISTER LOGICAL LOGFILE'/stb_arch/1_266118.dbf';
Database altered.
1.&&&&&&应用日志
--开启应用
SQL& ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
--停止应用
SQL& ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
2.&&&&&&实时应用
前提是Standby数据库端配置了Standby Redologs。
-- 物理Standby
SQL& ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT USINGCURRENT LOGFILE;
-- 逻辑Standby
SQL& ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
3.&&&&&&延迟应用
-- delay单位是分钟,归档会正常发送,standby应用归档延迟
SQL& alter database recover managed standby database DELAY 60 di
4.&&&&&&执行不完全应用
SQL& alter database recover managed sta
SQL& ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE until time' 17
-- 进程状态
select process,status from v$managed_&
RFS- Remote file (负责接收远程日

我要回帖

更多关于 运行时错误 的文章

 

随机推荐