您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页RedHat5.4_Oracle11g_ASM_Standalone_备份与恢复

RedHat5.4_Oracle11g_ASM_Standalone_备份与恢复

来源:意榕旅游网
RedHat5.4_Oracle11g_ASM_Standalone备份与恢复 一、 环境确认

本备份与恢复不采用catalog模式。

1. 数据库确认

用Oracle用户dba连接执行。 (1) 归档模式

SQL> select log_mode from v$database; LOG_MODE ------------ ARCHIVELOG

或者 SQL> archive log list; 如果不是归档模式,执行如下操作: SQL> alter database mount; SQL> alter database archive; SQL> shutdown immediate; SQL>startup;

(2) 打开快速恢复区

SQL> show parameter db_recovery_file_dest_

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------ db_recovery_file_dest string +DATA db_recovery_file_dest_size big integer 10000M 这两个参数有值,说明已经打开。 (3) 归档备份份数

SQL> show parameter log_archive_dest;

看到log_archive_dest_1 -----> log_archive_dest_31,且没有值,说明只有1份且保存在快速恢复区。

(4) 控制文件多工

SQL>select name from v$controlfile

NAME

-------------------------------------------------------------------------------- +DATA/orcl/controlfile/current.256.831231923 +DATA/orcl/controlfile/current.257.831231925 说明多工。

(5) 日志文件多工

SQL> select group#,member from v$logfile;

GROUP# MEMBER

---------- -------------------------------------------------- 1 +DATA/orcl/onlinelog/group_1.258.831231927 1 +DATA/orcl/onlinelog/group_1.259.831231931 2 +DATA/orcl/onlinelog/group_2.260.831231933 2 +DATA/orcl/onlinelog/group_2.261.831231939 3 +DATA/orcl/onlinelog/group_3.262.831231941 3 +DATA/orcl/onlinelog/group_3.263.831231945 说明多工,且放在不同文件。

2. RMAN连接数据库

Oracle用户,执行:

[root@node1 ~]# su - oracle

[oracle@node1 ~]$ rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Tue Nov 12 11:11:48 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

connected to target database (not started)

RMAN>

3. RMAN设置

RMAN>show all;

using target database control file instead of recovery catalog

RMAN configuration parameters for database with db_unique_name ORCL are:

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default ----冗余数为1,1份就有效 CONFIGURE BACKUP OPTIMIZATION OFF; # default CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default CONFIGURE MAXSETSIZE TO UNLIMITED; # default CONFIGURE ENCRYPTION FOR DATABASE OFF; # default CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default

CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO

'/u01/app/oracle/product/11.2.0.3/db_1/dbs/snapcf_orcl.f'; # default

缺省设置。基本够用,不够用,采用如下形式修改。 (1) 参数设置 --配置自动通道 11g如果不分配,系统会缺省分配通道。 --指定备份保留策略

RMAN> CONFIGURE RETENTION POLICY TO recovery window to 7 days; --指定要创建的备份副本数 不用设置。

--设置默认备份类型:backupset / copy

RMAN> configure device type disk backup type to backupset;

--备份片段大小

RMAN>CONFIGURE MAXSETSIZE TO UNLIMITED;--无 --在备份中排出表空间 --启用和禁用备份优化

RMAN>CONFIGURE BACKUP OPTIMIZATION OFF;---关闭优化备份,只读、脱机文件也备份 --配置控制文件的自动备份

RMAN>configure controlfile autobackup on; --自动备份控制文件 --定义归档日志删除策略

RMAN>CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;-- --指定备份的并行度

RMAN>configure device type disk parallelism 3; --设置并行数3 --设置用户备份的压缩参数

RMAN> configure device type disk backup type to compressed backupset; --压缩备份集,针对数据文件

--设置用户备份的加密参数

RMAN>CONFIGURE ENCRYPTION FOR DATABASE OFF;--关闭加密 (2) RMAN参数查看

RMAN> show controlfile autobackup format; RMAN> show exclude; RMAN> show all; (3) RMAN参数恢复缺省值

RMAN> configure controlfile autobackup clear;---恢复默认值

4. 快速恢复区空间管理

(1)增大快速恢复区size,增加ASM磁盘组磁盘

(2)用RRAM删除不用的文件:不用备份文件、过期归档日志文件、无效归档文件 1)rman> report obsolete 2) rman>delete obsolete

二、数据库备份

1. RMAN备份对象及备份操作

1.1备份创建

(1) spfile

RMAN> backup spfile;--备份保存在快速恢复区

RMAN> backup spfile format '/u01/bak/spfile.bak';--备份到指定目录和文件名下 (2) controlfile

RMAN> backup current controlfile;

RMAN> backup current controlfile format '/u01/bak/controlfile.bak'; (3) datafile

RMAN> backup datafile 1;---备份1号数据文件

RMAN> backup datafile '/u01/oracle/orcl/system01.dbf'; RMAN> backup datafile 1,2,3,4;

RMAN> backup datafile 1,2,3 format '/u01/bak/db%U.bak'; (4) tablespace

RMAN> backup tablespace users;

RMAN> backup tablespace users,example;

RMAN> backup tablespace users,sysaux format '/u01/bak/tbs%U.bak';

(5) Database

RMAN> backup database;---备spfile controlfile datafile;打开优化备份时,不备只读、脱机文件

RMAN> backup full database; ---备spfile controlfile datafile;打开优化备份,也备份只读和脱机文件

RMAN> backup database plus archivelog; --备spfile controlfile datafile archivelog --此时归档日志在归档日志路径和备份路径都存在

RMAN> backup database plus archivelog delete input; --备spfile controlfile datafile archivelog,并删除归档日志路径下的归档日志

1.2备份查看

RMAN> list backup;--查看所有备份

RMAN> list backup of <>;--查看具体类型备份spfile / controlfile / datafile <> / tablespace <> / database / archivelog all

RMAN> list copy;--查看copy

RMAN> list copy of <>;--查看某种类型的copy

RMAN> crosscheck;---执行备份检查,确认备份是否有效

1.3备份删除

RMAN> delete backupset 30;--删除key为30的备份集 RMAN> delete backup;---删除全部备份

RMAN> delete expired backup;--删除过期备份 RMAN> delete obsolete;---删除无效备份

RMAN> delete archivelog until time 'sysdate - 10'; ---删除10天前的归档日志(一定要注意只能删除backup database之前的归档日志)

RMAN> change backupset 31 unavailable;---可以通过该命令将不在快速恢复区的指定key备份改为不可用

RMAN> change backupset 31 available;---将不在快速恢复区的指定key备份改为可用

1.4说明

1) Copy命令会按照原文件大小复制,不节省空间,在此不使用。 2) 联机redo日志不需要备,备也没有用。

3) 每一个自动归档日志都是对一个联机日志的copy,因此不要使用RMAN>delete copy

命令删除。

4) 仅当符合保留策略的备份不存在时,优化备份才会RMAN备份只读表空间; 5) 如果表空间改为可写的,立即备份该表空间;

6) 可用backup的skip readonly跳过只读表空间或者文件; 7) 只要没有用resetlog打开数据库,或者重建控制文件,或者没有clear过日志文件,

备份才是有效的,否则就需要重新备份。

2. RMAN备份级别

2.1全库备份

RMAN> backup database;---备spfile controlfile datafile;打开优化备份时,不备只读、脱机文件

RMAN> backup full database; ---备spfile controlfile datafile;打开优化备份,也备份只读和脱机文件

RMAN> backup database plus archivelog; --备spfile controlfile datafile archivelog --此时归档日志在归档日志路径和备份路径都存在

RMAN> backup database plus archivelog delete input; --备spfile controlfile datafile archivelog,并删除归档日志路径下的归档日志

2.2增量备份

RMAN> backup incremental level 0/1/2/3/4 database;--差异增量备份

RMAN> backup cumulative incremental level 1/2/3/4 database;--累积增量备份 说明:

 0级备份是增量备份基础,后续备份级别在0级基础上。

 全库备份不能作为增量备份基础,是的全库备份,恢复也不能使用增量备份。  备份级别0-4,共5个级别。

2.3备份级别设计

周日 L0

周一 L1

周二 L1

周三 L1

周四 L1c

周五 L1

周六 L1

3. RMAN备份脚本

3.1备份保存在快速恢复区

bak0.rman run{

allocate channel ch0 type disk;

backup incremental level 0 database plus archivelog delete input; release channel ch0; }

bak1.rman run{

allocate channel ch1 type disk;

backup incremental level 1 database plus archivelog delete input; release channel ch1; }

bak1c.rman run{

allocate channel ch1c type disk;

backup cumulative incremental level 1 database plus archivelog delete input; release channel ch1c; }

3.2备份保存在本地文件系统

bak0_loc.rman run{

allocate channel ch0_local type disk; backup incremental level 0 format '/u01/bak/%d_%U_%T'

database plus archivelog delete input; release channel ch0_local; }

bak1_loc.rman run{

allocate channel ch1_local type disk; backup incremental level 1 format '/u01/bak/%d_%U_%T'

database plus archivelog delete input; release channel ch1_local; }

bak1c_loc.rman run{

allocate channel ch1c_local type disk; backup cumulative incremental level 1 format '/u01/bak/%d_%U_%T'

database plus archivelog delete input; release channel ch1c_local; }

3.3 format说明:

format:

%c:备份片的拷贝数(从1开始编号); %d:数据库名称;

%D:位于该月中的天数(DD); %M:位于该年中的月份(MM);

%F:一个基于DBID唯一的名称,这个格式的形式为c-xxx-YYYYMMDD-QQ,其中xxx位该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列;

%n:数据库名称,并且会在右侧用x字符进行填充,使其保持长度为8;

%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集产生一个唯一的名称;

%p:表示备份集中的备份片的编号,从1开始编号;

%U:是%u_%p_%c的简写形式,利用它可以为每一个备份片段(既磁盘文件)生成一个唯一的名称,这是最常用的命名方式; %t:备份集时间戳;

%T:年月日格式(YYYYMMDD);

3.3备份脚本执行

Oracle 用户下,执行:

$rman target / cmdfile=/u01/bak/bak0.rman log=/u01/bak/log_bak0.log $rman target / cmdfile=/u01/bak/bak1.rman log=/u01/bak/log_bak1.log $rman target / cmdfile=/u01/bak/bak1c.rman log=/u01/bak/log_bak1c.log

3.4计划任务

#crontab -e -u oracle

45 23 * * 0 rman target / cmdfile=/u01/bak/bak0.rman log=/u01/bak/log_bak0_0.log 45 23 * * 1 rman target / cmdfile=/u01/bak/bak1.rman log=/u01/bak/log_bak1_1.log 45 23 * * 2 rman target / cmdfile=/u01/bak/bak1.rman log=/u01/bak/log_bak1_2.log 45 23 * * 3 rman target / cmdfile=/u01/bak/bak1.rman log=/u01/bak/log_bak1_3.log 45 23 * * 4 rman target / cmdfile=/u01/bak/bak1c.rman log=/u01/bak/log_bak1c_4.log 45 23 * * 5 rman target / cmdfile=/u01/bak/bak1.rman log=/u01/bak/log_bak1_5.log 45 23 * * 6 rman target / cmdfile=/u01/bak/bak1.rman log=/u01/bak/log_bak1_6.log

4. 逻辑备份

逻辑备份是数据备份,作为数据库备份的补充,可以每月备份一次。

5. 异地保存

可以将逻辑备份的dmp文件和RMAN备份异地留存一份。

三、用RMAN执行数据库恢复

1. Spfile丢失

不关闭数据库解决:

$ls <路径><文件名(包含_ncsnf_)>.bkp ----查找备份文件名,如果ASM,类似这样的路径

+data/orcl/BACKUPSET/2013_11_13,文件名:ncsnn1_TAG20131113T161155_0.305.831399181 $export ORACLE_SID=<不存在的实例名(如:abc)> $rman target /

RMAN>startup nomount;

RMAN>restore spfile from <上面查找到的备份文件名>; RMAN>shutdown abort; RMAN>exit

$ls $ORACLE_HOME/dbs/spfileabc.ora ----找到新生产的spfile文件

$strings $ORACLE_HOME/dbs/spfileabc.ora |head -2 ---可看到该文件内部记录的实例名即对应的原实例名

$mv $ORACLE_HOME/dbs/spfileabc.ora $ORACLE_HOME/dbs/spfile<原实例名>.ora $. ~/.bash_profile ------改回oracle用户环境变量 $sqlplus / as sysdba

如果是ASM管理的spfile,则还需要重启,spfile位置指向新的位置。 但如果使用crs_start –all和srvctl start database –d orcl都不能启动数据库,因为spfile配置信息没有修改,需要srvctl remove database –d orcl,然后用oracle用户:srvctl add database –d orcl –o /u01/app/oracle/product/11.2.0.3/db_1,再grid用户:srvctl config database –d orcl看到正常。 也可以采用关闭数据库到nomount的办法:restore spfile from <上面查找到的备份文件名>;其它步骤一样。

2. temp.dbf丢失

$sqlplus / as sysdba

SQL>create temporary tablespace <新临时表空间名> tempfile <临时表空间文件名> size 100M autoextend on uniform size 1M;

SQL>alter database default temporary tablespace <新临时表空间名>; SQL>drop tablespace <原临时表空间名>;

SQL>alter tablespace <新临时表空间名> rename to <原临时表空间名>; 该方法也可以用于临时表空间回收、增加。

当然,也可用alter tablespace temp shrink space;也不影响使用。

3. datafile丢失

3.1能够offline的datafile

可offline的数据文件:users、sysaux、用户定义表空间 run{

sql 'alter database datafile <文件号> offline'; restore datafile <文件号>; recover datafile <文件号>;

sql 'alter database datafile <文件号> online'; }

Rman自动将数据文件恢复回去,且是最新状态。

如果是表空间损坏: run{

sql 'alter tablespace users offline'; restore tablespace users; recover tablespace users;

sql 'alter tablespace users online'; }

3.2不能offline的datafile

不可offline的数据文件和表空间:system、undotbs、temp(temp表空间恢复已经在前面说了)

RMAN>shutdown abort; RMAN>startup mount;

RMAN>restore datafile <文件号>; RMAN>recover datafile <文件号>; RMAN>alter database open;

4. controlfile全部丢失

RMAN>shutdown abort; RMAN>startup nomount;

RMAN>restore controlfile from <文件名 (包含_ncsnf_)>; RMAN>alter database mount; RMAN>recover database;

RMAN>alter database open resetlogs;

RMAN>backup database plus archivelog delete input;

如果部分controlfile丢失,是否拷贝已有的过去就可以呢?

5. 不完全恢复

redolog联机日志丢失(当前日志全部2个成员全部丢失,部分日志丢失只需要重建文件即可),或者归档日志丢失,只能做database的不完全恢复,数据会丢失。

5.1基于序列号恢复:

run{

set until sequence 2 thread 1; ---基于日志序列号、线程号的不完全恢复

restore database; recover database;

alter database open resetlogs; }

如果同时又数据文件丢失可以恢复,但联机日志sequence为3的数据已经丢失,只能恢复到sequence2的联机日志文件。

5.2基于时间点恢复:

run{

set until time \"to_date('2013-11-12 15:10:08', 'yyyy-mm-dd hh24:mi:ss')\"; ---基于时间点恢复 restore database; recover database;

alter database open resetlogs; }

时间点的查询:根据做业务的时间和系统日志提示时间

5.3基于SCN号恢复:

startup mount;

restore database until scn 2140; recover database until scn 2140; alter database open resetlogs; scn号查询:select dbms_flashback.get_system_change_number,current_scn from v$database;

6. 数据库所有文件丢失,通过备份恢复

在数据库的控制文件、参数文件spfile\\pfile、数据文件、redolog、archivelog全部丢失的情况下,采用RMAN进行恢复:

$export ORACLE_SID=<不存在的实例名(如:abc)> $rman target /

RMAN>startup nomount; RMAN>restore spfile from <上面查找到的备份文件名>; RMAN>shutdown abort; RMAN>exit

$ls $ORACLE_HOME/dbs/spfileabc.ora ----找到新生产的spfile文件

$string $ORACLE_HOME/dbs/spfileabc.ora |head -2 ---可看到该文件内部记录的实例名即对应的原实例名

$mv $ORACLE_HOME/dbs/spfileabc.ora $ORACLE_HOME/dbs/spfile<原实例名>.ora $export ORACLE_SID=<原实例名>;

$ orapwd file=$ORACLE_HOME/dbs/orapw password=<新密码>;--创建密码文件

$string $ORACLE_HOME/dbs/spfileabc.ora |head /u01; ---查出所有路径,并逐一创建 $mkdir –p <查找出来的路径名>; $rman target /

RMAN>startup nomount;

RMAN>restore controlfile from <备份中控制文件名>; RMAN>alter database mount; RMAN>restore database;

RMAN>recover database noredo; ---采用没有redolog的方式恢复数据库

RMAN>alter database open resetlogs;----这步会提示失败,需要使用隐藏参数打开 RMAN>exit;

$sqlplus / as sysdba

SQL>create pfile=<临时的pfile名:/u01/tmp.ora> from spfile; SQL>shutdown immediate;

$vi /u01/tmp.ora; ---在pfile文件末尾增加:*._allow_resetlogs_corruption=true;保存 SQL>startup mount pfile='/u01/tmp.ora'; SQL>alter database open resetlogs; SQL>shutdown immediate; SQL>exit;

$vi /u01/tmp.ora; ---删除文件末尾:*._allow_resetlogs_corruption=true;保存 SQL>startup;

RMAN>backup database;

7. 注意:

 清缓存方法:alter system flush SHARED_POOL/BUFFER_CACHE/GLOBLE CONTEXT;  以resetlogs方式打开数据库的,都需要马上重新备份数据库。此前备份失效。

 只要有归档备份,只要没有联机日志丢失和归档日志丢失,RMAN都能把数据库还原

回去。

 查看日志sequence:archive log list

 可查看到线程:select group#,thread# from v$log;

 可以将一个全库备份拿到任何一台机器上恢复为新的数据库。

 创建密码文件:orapwd file=$ORACLE_HOME/dbs/orapw password=<新密码>  如果联机redolog和archievelog损失,可能不能通过打开,需要在pfile文件末尾增加:

*._allow_resetlogs_corruption=true;保存,然后startup mount pfile=<该文件>方式打开。

四、日常检查

1. 备份文件检查

RMAN> crosscheck; RMAN> list backup;

SQL> select * from v$archived_log;

2. 磁盘空间检查

Oracle用户:

SQL> select * from v$flash_recovery_area_usage;

grid用户:

3. 删除归档及备份

在空间不足时,可以考虑删除过期的归档和备份:

(1)删除archivelog

 物理删除+RMAN清理 ASM>delete archievelogfile RMAN>crosscheck archivelog all; RMAN>delete expired archivelog all;  使用RMAN删除archivelog

RMAN>delete archivelog all completed before 'sysdate-7'  RMAN备份后自动删除archivelog 前面备份脚本中已经使用。

(2)删除归档文件

RMAN> delete backupset 30;--删除key为30的备份集 RMAN> delete backup;---删除全部备份 RMAN> delete backupset;---删除全部备份集 RMAN> delete expired backup;--删除过期备份 RMAN>report obsolete; 报告无效备份 RMAN> delete obsolete;---删除无效备份

4. 常用SQL及命令

---查用户及表空间

SQL> select username ,default_tablespace,temporary_tablespace from dba_users;--当前用户

select owner,table_name from all_tables where owner='US';--指定用户 select owner,table_name from dba_tables where owner='US';--指定用户 --查看表空间及文件

select * from dba_data_files where tablespace_name ='USERS';---查看表空间及对应的文件,可查询到FILE ID

select * from dba_extents where tablespace_name ='USERS'; ---查看表空间文件扩展情况,可查到file id和extent id。

select * from v_$tablespace; ---通过file_id select * from v_$datafile; ---通过file_id select db_id,current_scn,checkpoint_change#,archive_change#,controlfile_chang#, controlfile_sequence#, prior_resetlogs_change#, resetlogs_change# from v$database;

---创建用户

Create user usr identified by usr default tablespace tbs temporary tablespace temp profile default account unlock;

Grant resource,connect ,dba to usr;

----创建表 增加索引、主键

Create table usr.t1(id number primary key,name varchar2(10)) ; Alter table usr.t1 add (constraint id_pk primary key (id)); Create index usr.idx_name on usr.t1(name);

---创建表空间

create tablespace tbs datafile '/u01/app/oracle/oradata/tablespace/tbs01.dbf' size 20M logging online permanent blocksize 8k extent management local autoallocate segment space management auto; ----为表空间增加数据文件

alter tablespace tbs add datafile '/a8root/app/oracle/oradata/dmbi/tablespace/tbs02.tbl' size 20M autoextend on uniform size 1M unlimited;

----查看表空间容量

SELECT Total.name \"Tablespace Name\

Free_space, (total_space-Free_space) Used_space, total_space FROM

(select tablespace_name, sum(bytes/1024/1024) Free_Space from sys.dba_free_space group by tablespace_name ) Free,

(select b.name, sum(bytes/1024/1024) TOTAL_SPACE from sys.v_$datafile a, sys.v_$tablespace B where a.ts# = b.ts#

group by b.name ) Total

WHERE Free.Tablespace_name = Total.name

----查看表空间容量

select dbf.tablespace_name, dbf.totalspace \"总量(M)\dbf.totalblocks as \"总块数\dfs.freespace \"剩余总量(M)\dfs.freeblocks \"剩余块数\

round((dfs.freespace / dbf.totalspace),4) * 100 \"空闲比例\" from (select t.tablespace_name,

sum(t.bytes) / 1024 / 1024 totalspace, sum(t.blocks) totalblocks from dba_data_files t

group by t.tablespace_name) dbf, (select tt.tablespace_name,

sum(tt.bytes) / 1024 / 1024 freespace, sum(tt.blocks) freeblocks from dba_free_space tt

group by tt.tablespace_name) dfs

where trim(dbf.tablespace_name) = trim(dfs.tablespace_name)

-----查询SCN号

select dbms_flashback.get_system_change_number,current_scn from v$database;

----查看联机日志SQL:group#,thread#,sequence#

select group#,thread#,sequence#,members,archived,status,next_change# from v$log; col member format a46;

select group#,status,type,is_recovery_dest_file,member from v$logfile;

----查看归档日志SQL archive log list;

show parameter log_archive_file_dest;

----查看数据文件视图SQL

select file_id,file_name, tablespace_name,online_status from dba_data_files

---查看控制文件SQL

select * from v$controlfile; show parameter control_files; -----查看备份文件SQL

Show parameter db_recovery_file_dest

----查看参数文件SQL show parameter spfile;

------重做日志组管理SQL

select group#,status,SEQUENCE#,ARCHIVED from v$log; --查看日志组及归档状态 alter system switch logfile; ---切换当前日志组

alter database clear unarchived logfile group group_number;---清理未归档日志组 清理不丢数据

alter database clear logfile group group_number; --清理归档日志组 alter database drop logfile group 1;-----删除日志组

----查看ASM磁盘空间SQL及命令

select group_number,name,total_mb,free_mb from v$asm_diskgroup; ASMCMD> lsdg data

执行:

ASMCMD> ls AUTOBACKUP/ BACKUPSET/ CONTROLFILE/ DATAFILE/ ONLINELOG/ PARAMETERFILE/ TEMPFILE/ spfileorcl.ora

ASMCMD> cd BACK* ASMCMD> cd *13 ASMCMD> ls

annnf0_TAG20131113T142515_0.276.831392717 annnf0_TAG20131113T1428_0.278.831392809 ncsnn0_TAG20131113T142534_0.270.831392805 nnndn0_TAG20131113T142534_0.275.831392737

5. 日志组redolog管理

alter database add logfile thread 1 group 5('+DATADG/apts/onlinelog/group5_1','+ARCHDG/apts/onlinelog/group5_2') size 200M; alter database add logfile thread 2 group 6('+DATADG/apts/onlinelog/group6_1','+ARCHDG/apts/onlinelog/group6_2') size 200M; alter database add logfile thread 1 group 7('+DATADG/apts/onlinelog/group7_1','+ARCHDG/apts/onlinelog/group7_2') size 200M;

alter database add logfile thread 2 group 8('+DATADG/apts/onlinelog/group8_1','+ARCHDG/apts/onlinelog/group8_2') size 200M;

5、查看增加的文件信息

select * from v$log order by thread#,group#; 查询日志各成员信息 select * from v$logfile;

6、将联机日志文件切换到新增加的文件上使用,使1、2、3、4组联机日志文件状态变为INACTIVE

alter system switch logfile; alter system checkpoint;

7、删除1、2、3、4组联机日志文件 alter database drop logfile group 1; alter database drop logfile group 2; alter database drop logfile group 3; alter database drop logfile group 4;

这里发现一个问题,如果联机日志文件时自己创建的,有可能在使用删除命令后,在磁盘阵列中的文件并没有被删除,从而导致空间浪费及重建同名组是报错。这时需要用ORACLE自带的ASM维护命令asmcmd进入到磁盘阵列中去删除响应的文件即可。

8、使用命令切换日志文件,看是否正常 alter system switch logfile;

select * from v$log order by thread#,group#; select * from v$logfile; alter system checkpoint;

show parameter parallel_max_servers

alter system set parallel_max_servers=16 scope=spfile show parameter fast_start_parallel_rollback

alter system set fast_start_parallel_rollback = FALSE scope=spfile

症状:响应缓慢,应用请求已经无法返回。

登陆数据库,发现redo日志组除current外都处于active状态。

图1

如果日志都处于active状态,那么显然DBWR的写已经无法跟上log switch触发的检查点。

接下来让我们检查一下DBWR的繁忙程度:

图2

DBWR的进程号是2266。 使用Top命令观察一下:

图3

我们注意到,2266号进程消耗的CPU不过0.18%,显然并不繁忙,那么瓶颈就很可能在IO上。

使用IOSTAT工具检查IO状况。

图4

我们注意到,存放数据库的主要卷c1t1d0的繁忙程度始终处于99~100,而写速度却只有500K/s左右,这个速度是极为缓慢的。

(%b percent of time the disk is busy (transactions in progress) Kw/s kilobytes written per second)

根据我们的常识T3盘阵通常按Char写速度可以达到10M/s左右,以前测试过一些Tpcc指标。

而正常情况下的数据库随机写通常都在1~2M左右,显然此时的磁盘已经处于不正常状态,经过确认的确是硬盘发生了损坏,Raid5的Group中损坏了一块硬盘。

经过更换以后系统逐渐恢复正常。

下面介绍关于日志一些原则:

原则:删除前必须遵守如下原则,每个实例必须至少有两个日志组;当一个组处于ACTIVE或者CURRENT的状态时不可删除;删除日志组的操作只对数据库进行更改,操作系统的文件尚未删除;当删除时适用DROP LOGFILE GROUP N语句时,此时GROUP N内的所有成员都将被删除。

ALTER DATABASE DROP LOGFILE GROUP N;

删除日志成员的原则:当你删除一个是该组中最后一个成员的时候,你不能删除此成员;当组的转台处于current的状态时,不能删除组成员;在归档模式下,必须得归档之后才能删除;删除日志组成员的操作只对数据库进行更改,操作系统的文件尚未删除

ALTER DATABASE DROP LOGFILE MEMBER '/LOCATION_DUST/REDO0N_N.LOG';

6. 物理文件丢失不能恢复删除表空间办法

数据文件在offline的情况下物理删除 解决方法:

sqlplus sys/orcl@orcl as sysdba;

alter database datafile '$ORACLE_BASE/ORADATA/ORCL/TSTEST001.DBF' offline drop;

drop database datafile '$ORACLE_BASE/ORADATA/ORCL/TSTEST001.DBF';

alter database open;

drop tablespace sde including contents;

7. 查询客户端语言

SQL>select userevn('LANG') from dual;

或者

SQL>select * from v$NLS_PARAMETERS where parameter='NLS_CHARACTERSET';

可以根据查询出来的结果,在客户端机器上设置NLS_LANG环境变量,可以解决客户端如plsql等中文乱码问题。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务