笑看三变
自我介绍
切换风格
订阅我的Blog
博客日历
文章归档...
最新发表...
博客统计...
网站链接...
资源
===========================================================
Oracle数据库的非常规恢复
===========================================================

一、损坏联机日志的恢复方法

1.1 损坏非当前联机日志
大家都清楚,联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题。
1、启动数据库,遇到ORA-00312 or ORA-00313错误,如
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'D:ORACLEORADATATESTREDO01.LOG'
从这里我们知道日志组1的数据文件损坏了
从报警文件可以看到更详细的信息
2、查看V$log视图
SQL> select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS
---------- ---------- -------- ----------------
1 1 YES INACTIVE
2 2 YES INACTIVE
3 3 NO CURRENT
可以知道,该组是非当前状态,而且已经归档。
3、用CLEAR命令重建该日志文件
SQL>alter database clear logfile group 1;
如果是该日志组还没有归档,则需要用
SQL>alter database clear unarchived logfile group 1;
4、打开数据库,重新备份数据库
SQL>alter database open;
说明:
1、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就需要强行clear。
2、建议clear,特别是强行clear后作一次数据库的全备份。
3、此方法适用于归档与非归档数据库

 查看全文
aluocp 发表于:2009.09.18 15:21 ::分类: ( 备份还原 ) ::阅读:(117124次) :: 评论 (8) :: 引用 (0)
===========================================================
数据库常规恢复案例
===========================================================

一、非归档模式下的备份与恢复
备份方案:采用OS冷备份
1.连接数据库并创建测试表
SQL*Plus: Release 8.1.6.0.0 - Production on Tue May 6 13:46:32 2003
(c) Copyright 1999 Oracle Corporation. All rights reserved.
SQL> connect internal/password as sysdba;
Connected.
SQL> create table test(a int);
Table created
SQL> insert into test values(1);
1 row inserted
SQL> commit;
Commit complete

2.备份数据库
SQL> @coldbak.sql 或在DOS下 svrmgrl @coldbak.sql

3.再插入记录
SQL> insert into test values(2);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test;
A
---------------------------------------
1
2
4.关闭数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

5.毁坏一个或多个数据文件,如删除user01.dbf
C:>del D:ORACLEORADATATESTUSERS01.DBF
模拟媒体毁坏

6.重新启动数据库,会发现如下错误
SQL> startup
ORACLE instance started.

Total System Global Area 102020364 bytes
Fixed Size 70924 bytes
Variable Size 85487616 bytes
Database Buffers 16384000 bytes
Redo Buffers 77824 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'D:ORACLEORADATATESTUSERS01.DBF'

在报警文件中,会有更详细的信息
Errors in file D:OracleadmintestbdumptestDBW0.TRC:
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'D:ORACLEORADATATESTUSERS01.DBF'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) 系统找不到指定的文件。

7.拷贝备份复原到原来位置(restore过程)
C:>xcopy d:database*.* d:oracleoradatatest/H/R/S

8.打开数据库,检查数据
SQL> alter database open;
Database altered.
SQL> select * from test;
A
---------------------------------------
1

这里可以发现,数据库恢复成功,但在备份之后与崩溃之前的数据丢失了。
说明:
1、非归档模式下的恢复方案可选性很小,一般情况下只能有一种恢复方式,就是数据库的冷备份的完全恢复,仅仅需要拷贝原来的备份就可以(restore),不需要recover。
2、这种情况下的恢复,可以完全恢复到备份的点上,但是可能是丢失数据的,在备份之后与崩溃之前的数据将全部丢失。
3、不管毁坏了多少数据文件或是联机日志或是控制文件,都可以通过这个办法恢复,因为这个恢复过程是Restore所有的冷备份文件,而这个备份点上的所有文件是一致的,与最新的数据库没有关系,就好比把数据库又放到了一个以前的“点”上。
4、对于非归档模式下,最好的办法就是采用OS的冷备份,建议不要用RMAN来作冷备份,效果不好,因为RMAN不备份联机日志,restore不能根本解决问题。
5、如果没有备份联机日志,如RMAN的备份,就需要利用不完全恢复(until cancel)的方法来重新创建联机日志文件

 查看全文
aluocp 发表于:2009.09.18 15:14 ::分类: ( 备份还原 ) ::阅读:(52257次) :: 评论 (0) :: 引用 (0)
===========================================================
数据库备份方案
===========================================================

RMAN备份概述
采用数据库提供的RMAN备份工具有以下的优点:
支持在线热备份
支持多级增量备份
支持并行备份,恢复
减小所需要备份量
备份,恢复使用简单

在线热备份
是指备份不需要关闭数据库进行,在备份的同时可以进行正常的数据库的各种操作,满足了7*24的系统的需要,对于本系统而言,数据库的备份将不会影响INTERNET或INTRANET用户对数据库的访问。

多级增量备份
多级增量备份是指第N级的备份只需要备份最后一次同级或N-1级备份以后发生的改变的数据。可以通过下图来说明:

上图是一个增量备份的例子,即在第一个星期天做一个增量的0级备份,然后在星期一,星期二做一个增量的2级备份,在星期三做一个增量的1级备份,然后类推。假设现在在星期五数据库需要做恢复,则可以先恢复第一个星期天的0级备份,,然后恢复星期三的1级备份,再恢复星期四和星期五的2级备份就可以完成数据库的恢复。

因为在本系统录入后的数据数据进入数据库后将大部分变为只读状态,所以采用对这些表空间只备份一次或比经常改变的表空间备份次数更少的方法,将能够很大地减少备份的数据量。具体的方案如下:
对于表PROD_CONTENT_CN_TBL,PROD_VALUE_TBL由于做了关于序列号的分区,采取的当一个分区满了以后,在数据库里把该分区改成只读状态,然后做一个该表空间的备份,然后在做数据库的日常增量备份时忽略该表空间的数据则能够大大减少要备份的数据量。

 查看全文
aluocp 发表于:2009.09.18 14:55 ::分类: ( 备份还原 ) ::阅读:(48918次) :: 评论 (0) :: 引用 (0)
===========================================================
独立打开Oracle的Standby库
===========================================================

1. 在主库上,关闭archive log传送:
SQL> alter system set log_archive_dest_2='';

2. 在备库上,用sys用户登陆,停止日志的应用:
SQL> alter database recover managed standby database cancel;
SQL> shutdown immediate
SQL> startup nomount
SQL> alter database mount standby database;

3. 在备库上,备份控制文件到trace:
SQL> alter database backup controlfile to trace;
SQL> shutdown immediate

4. 用trace文件重建控制文件:
在trace文件中,复制resetlogs部分的重建脚本到create_control.sql,并修改init.ora文件为主库用文件。
SQL> startup nomount pfile=init.ora
SQL> @create_control.sql

5. 用新控制文件恢复打开数据库:
SQL> recover database using backup controlfile until cancel;
SQL> alter database open resetlogs;


aluocp 发表于:2009.03.09 14:02 ::分类: ( 高可用性 ) ::阅读:(103887次) :: 评论 (3) :: 引用 (0)
===========================================================
一次远程磁带实施Standby的手记
===========================================================

上周末,加班实施同城异地的Data Guard。
100M的共享带宽,直接磁带同步,慢得半死。
做玩了复制,在DORECOVER的时候,出错了,磁带备份集少了三个archive log。
发现在磁盘上,自己写脚本,发现archive log无法应用,少了两个archive log,发现在磁带上。
ft,前一天的备份忘了把备份脚本的delete input选项删除。
hp-dp这破东西,又不能直接恢复单个archive log,这下有的好搞了。

把dp砍翻,自己来:
alter database recover automatic standby database;
检查一下,磁盘上少的第一个archive log的序列号。
发现一共少了两个log。

 查看全文

aluocp 发表于:2008.12.09 11:09 ::分类: ( 排错优化 ) ::阅读:(3727次) :: 评论 (0) :: 引用 (0)
===========================================================
Windows域运行Oracle的一大弊端
===========================================================

1. 测试环境:

小机类型:HP RX8640(IA)
操作系统版本:Windows 2003 Server EE
数据库版本:Oracle 9.2.0.8
数据库名称:IATEST
操作系统控制:Windows域
域名称:domain
主机名称:prodoradb.domain.cn


2. 主机配置 - sqlnet.ora文件:

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

SQLNET.AUTHENTICATION_SERVICES= (NTS)


3. 主机配置 - 用户组

ORA_DBA组:
Administrator (本机管理员)
domain/doadmin (域控管理员用户)
domain/dba01 (Oracle的DBA用户)


4. 数据库配置

SQL> select name from v$database;

NAME
---------
IATEST

SQL> show parameter remote

NAME TYPE VALUE
------------------------------------ ----------- ---------
remote_archive_enable string true
remote_dependencies_mode string TIMESTAMP
remote_listener string
remote_login_passwordfile string EXCLUSIVE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE

 查看全文
aluocp 发表于:2008.10.31 15:05 ::分类: ( 技术研究 ) ::阅读:(2975次) :: 评论 (0) :: 引用 (0)
===========================================================
利用dbms_backup_restore恢复数据库
===========================================================

1. 模拟做一个数据库的RMAN全备
(RMAN备份的日志很重要,特别是数据文件号和名称的对应关系)
C:/Documents and Settings/alex hou>rman target /

恢复管理器: Release 10.2.0.1.0 - Production on 星期二 9月 23 14:07:47 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到目标数据库: ALEX (DBID=1941212992)

RMAN> backup full format 'd:/oracle/oradata/full_%U.bak' database;

启动 backup 于 23-9月 -08
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=138 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=D:/ORACLE/ORADATA/ALEX/SYSTEM01.DBF
输入数据文件 fno=00003 name=D:/ORACLE/ORADATA/ALEX/SYSAUX01.DBF
输入数据文件 fno=00002 name=D:/ORACLE/ORADATA/ALEX/UNDOTBS01.DBF
输入数据文件 fno=00004 name=D:/ORACLE/ORADATA/ALEX/USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 23-9月 -08
通道 ORA_DISK_1: 已完成段 1 于 23-9月 -08
段句柄=D:/ORACLE/ORADATA/FULL_01JRAKVT_1_1.BAK 标记=TAG20080923T140901 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:45
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 23-9月 -08
通道 ORA_DISK_1: 已完成段 1 于 23-9月 -08
段句柄=D:/ORACLE/ORADATA/FULL_02JRAL1B_1_1.BAK 标记=TAG20080923T140901 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 23-9月 -08


2. 关闭数据库,并删除所有数据文件和控制文件

 查看全文
aluocp 发表于:2008.09.23 14:46 ::分类: ( 备份还原 ) ::阅读:(557次) :: 评论 (0) :: 引用 (0)
===========================================================
Oracle在各类操作上LOCK_SGA的设置
===========================================================

AIX 5L(AIX 4.3.3以上)

1. aix参数v_pinshm=1,默认是0,表示aix将支持pin住内存,设置方法为
#vmo -p -o v_pinshm=1

2. aix参数maxpin%=内存百分比,默认80%,表示支持的最大的可pin住内存的比例,设置方法为
#vmo -p -o maxpin%=90

3. oracle参数LOCK_SGA=true,表示oracle将使用这部分被pin住的内存,其实就是告诉oracle使用另外一种内存调用方法。


HP UNIX

1. root用户,创建权限配置文件/etc/privgroup
# touch /etc/privgroup
# vi /etc/privgroup
添加"dba MLOCK"到该文件

2. root用户,执行命令
# /etc/setprivgrp -f /etc/privgroup

3. oracle用户,修改Oracle参数lock_sga=true


SOLARIS (solaris2.6以上)

8i版本以上数据库默认使用隐藏参数 use_ism = true,自动锁定SGA于内存中,不用设置lock_sga。
如果设置 lock_sga =true 使用非 root 用户启动数据库将返回错误。


WINDOWS

不能设置lock_sga=true,可以通过设置pre_page_sga=true,使得数据库启动的时候就把所有内存页装载,这样可能起到一定的作用。


aluocp 发表于:2008.09.22 15:35 ::分类: ( 基础知识 ) ::阅读:(1082次) :: 评论 (0) :: 引用 (0)
===========================================================
使用Logmnr恢复误删的数据
===========================================================

1. 确认测试表T1当前的记录数
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

会话已更改。

SQL> select count(*) from t1;

COUNT(*)
----------
22


2. 测试delete操作,并记录前后时间戳
(实战中,为了尽可能准确定位数据,也需要尽可能准确的获取时间戳)
SQL> select sysdate from dual;

SYSDATE
-------------------
2008-09-22 11:32:25

SQL> delete from t1 where rownum<11;

已删除10行。

SQL> commit;

提交完成。

SQL> select count(*) from t1;

COUNT(*)
----------
12

SQL> select sysdate from dual;

SYSDATE
-------------------
2008-09-22 11:32:45

 查看全文
aluocp 发表于:2008.09.22 12:01 ::分类: ( 技术研究 ) ::阅读:(535次) :: 评论 (0) :: 引用 (0)
===========================================================
创建测试物理Standby日志
===========================================================

操作系统: Windows
Oracle版本:10.2.0.1

主库SID: ALEX (192.168.217.1)
从库SID: MYDG (192.168.217.201)


一、创建过程:

1、在主库执行force logging
SQL> alter database force logging;


2、设置主库的参数文件和从库的参数文件:
主库确认以下参数:
--主库必要
db_name='alex'
DB_UNIQUE_NAME='alex'
SERVICE_NAMES='alex'
INSTANCE_NAME='alex'
control_files='D:/oracle/oradata/alex/control01.ctl','D:/oracle/oradata/alex/control02.ctl','D:/oracle/oradata/alex/control03.ctl'
LOG_ARCHIVE_CONFIG='DG_CONFIG=(alex,mydg)'
LOG_ARCHIVE_DEST_1='LOCATION=D:/oracle/oradata/alex/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=alex'
LOG_ARCHIVE_DEST_2='SERVICE=MYDG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=mydg'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT='%t_%s_%r.arc'
LOG_ARCHIVE_MAX_PROCESSES=30
--主库备库可互换
FAL_CLIENT='alex'
FAL_SERVER='mydg'
STANDBY_FILE_MANAGEMENT='AUTO'
STANDBY_ARCHIVE_DEST='D:/oracle/oradata/alex/standbyarchive'
--主备库不同路径选要
--DB_FILE_NAME_CONVERT='D:/oracle/oradata/mydg','D:/oracle/oradata/alex'
--LOG_FILE_NAME_CONVERT='D:/oracle/oradata/mydg/archive','D:/oracle/oradata/alex/archive'

 查看全文
aluocp 发表于:2008.09.18 15:42 ::分类: ( 高可用性 ) ::阅读:(675次) :: 评论 (0) :: 引用 (0)