本备份与恢复不采用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 $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 *._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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务