用户管理的备份与恢复也称 OS物理备份,是指通过数据库命令设置数据库为备份 状态,然后用操作系统命令,拷贝需要备份或恢复的文件。这种备份与恢复需要用户的 参与手工或自动完成。
对于使用 OS拷贝备份的数据文件,可以使用 DBVERTIFY 进行检验。DBVERTIFY是一个外部工具,主要用于校验数据文件或备份的数据文件的数据块是否正确。 例:
dbv /u01/oradata/oracle/users01.dbf BLOCKSIZE=8192
参数说明:
关键字 说明 (默认)
FILE 要检验的文件 (NONE)
START 起始块 (文件的第一个块)
END 结束块 (文件的最后一个块)
BLOCKSIZE 逻辑块大小 (2048)
LOGFILE 输出日志 (NONE)
FEEDBACK 显示进程 (0)
Recover 还可以进行测试,检测恢复的错误,错误信息记载在 alert_SID.log 文件中,通过测试,我们可以知道该恢复操作是否能正常完成。
SQL> RECOVER TABLESPACE sales TEST;
SQL> RECOVER DATABASE UNTIL CANCEL TEST;
3.1 相关设置
3.1.1 设置ARCHIVELOG与NONARCHIVELOG模式
重做日志组是以循环方式使用的,重做日志组会被覆盖重做日志信息就会丢失。为了保存历史以来的重做日志,数据库可以运行在日志归档模式下(archivelog mode)。 在日志归档模式下,当日志组撤换到下一个组时后台进程 ARCn 将上一个日志文件复制到另一个地方(oracle 10g 使用快速恢复区会归档到该区)保存。数据库默认为非归档模式(noarchivelog mode)。
设置ARCHIVELOG模式步骤:
1. 关闭数据库,备份已有的数据,改变数据库的运行方式是对数据库的重要改动,所以要对数据库做备份,对可能出现的问题作出保护。
2. 修改初试化参数: 使用 PFILE,修改初始化参数文件 init[SID].ora log_archive_start=true #启动自动归档 log_archive_format=ARC%T%S.arc #归档文件格式 log_archive_dest=/arch12/arch #归档路径
3. 启动 Instance 到 Mount状态,即加载数据库但不打开数据库:SQL > startup mount;
4. 发出修改命令SQL > alter database archivelog; SQL > alter database open;设置 NONARCHIVELOG模式步骤同上,只需修改相应参数值即可。
3.1.2 LOGGING 与 NOLOGGING
表空间、表、索引、分区可以设置为 NOLOGGING,用于快速装入数据(Direct Load)。 在插入数据时只写入最小的重做日志和回滚数据。在归档数据库模式下,执行 Direct Load 操作后应立即进行备份,否则不能使用之前的备份进行恢复。另外,用户可以设置数据库的 强制日志模式,使用所有操作都记入日志。
LOGGING 与 NOLOGGING 的区别:
LOGGING NOLOGGING
所有的更改写入 REDO 最小写入 REDO LOG
从最近备份中完全恢复 不能从最近备份中完全恢复
不需要增加备份 需要增加备份
NOLOGGING 的操作:
CREATE TABLE … NOLOGGING AS SELECT 语句
INSERT /*+APPEND*/ INTO <表> NOLOGGING SELECT 语句
INSERT /*+ PARALLEL(<表>,<n>)达式*/ INTO <表> NOLOGGING SELECT 语句
SQL*LOADER的DIRECT 方法
例:
SQL>CREATE TABLE emp1 NOLOGGING AS SELECT * FROM emp; SQL>SELECT name,unrecoverable_time FROM V$DATAFILE;
SQL>INSERT /*+ APPEND */ INTO emp1 NOLOGGING SELECT* * FROM emp; SQL>SELECT name,unrecoverable_time FROM V$DATAFILE;
SQL>ALTER DATABASE NO FORCE LOGGING;
3.1.3 归档路径
在归档模式下进行自动归档时,或者在恢复时设置归档所在的位置,需要设置归档路径初始化参数:
LOG_ARCHIVE_DEST_n=“LOCATION=path MANDATORY|OPTIONAL REOPEN=n”
LOG_ARCHIVE_DEST_n=“SERVICE=standby MANDATORY|OPTIONAL REOPEN=n
3.2 NONARCHIVELOG 模式
3.2.1 脱机冷备与恢复
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份 Oracle 信息而言,冷备份是最快和最安全的方法。
冷备份的优点:
1.是非常快速的备份方法(只需拷贝文件)
2.容易归档(简单拷贝即可)
3.容易恢复到某个时间点上(只需将文件再拷贝回去)
4.能与归档方法相结合,作数据库“最新状态”的恢复。
5.低度维护,高度安全。
冷备份的不足:
1.单独使用时,只能提供到“某一时间点上”的恢复。
2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
4.不能按表或按用户恢复。
如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以 工作)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须 拷贝的文件包括:1.所有数据文件2.所有控制文件3.所有联机 REDO LOG 文件4.参数化参数 Init.ora 文件(可选)。
3.2.2 案例
1.9i 脱机冷备/恢复的例子:
(1) 关闭数据库
$ sqlplus /nolog
SQL> connect /as sysdba
SQL> shutdown normal;
(2) 用拷贝命令备份/恢复全部的时间文件、重做日志文件、控制文件、初始化参数 文件SQL > host cp xx xx;
可以使用以下冷备脚本:
#!/bin/bash
##################################################################
## 名称: coldback_gen.sh
## 功能: 本 shell 用于生成冷备份脚本, 进行冷备份同时生成相应的恢复命令
## 可以修改后在生成后立即执行
## 编者:
## 日期: 2006.12.13.
##################################################################
##设置变量
##设置临时文件名
tempsql=./backup.sql
##设置备份文件存放路径
backdate=`date -u +%Y%m%d`
backupdir=/u04/oracle/coldback/$backdate
mkdir $backupdir
##设置备份脚本文件名
backupsh=$backupdir/coldback.sh
rcvrsh=$backupdir/recovery.sh
echo "正在生成冷备份脚本[$backupsh]……"
##检查 ORACLE数据库是否启动
oraisrun=`ps -ef|grep -c ora_`
if [ "$oraisrun" = "0" ] || [ "$oraisrun" = "1" ]
then
echo "
ORACLE 数据库尚未启动,请先启动 ORACLE"
echo ""
exit
fi
##准备工作
echo "set heading off " > $tempsql
echo "set feedback off " >>$tempsql
echo "set tab off " >>$tempsql
echo "set verify off " >>$tempsql
echo "set pagesize 0" >>$tempsql
echo "set linesize 800 " >>$tempsql
echo "select '#!/bin/bash' from dual;" >> $tempsql
echo "select '' from dual;" >> $tempsql
echo "select '## 备份脚本生成时间: " `date +%Y 年%m月%d日-%H:%M:%S` "'
from dual;" >> $tempsql
echo "select '## 备份目的路径: $backupdir' from dual; " >> $tempsql
echo "select '' from dual; " >> $tempsql
echo "" echo "select 'echo ''开始进行脱机冷备……''' from dual; " >> $tempsql
echo "select 'echo ''备份目的路径: $backupdir ''' from dual; " >> $tempsql
##这里不直接关闭数据库,提示用户手工关闭为好。如果需要直接关闭,请修改
echo "select 'orarun='||'\`'||'ps -ef|grep -c ora_'||'\`' from dual;" >>$tempsql
echo "select 'if [ "\$orarun" != "0" ] && [ "\$orarun" != "1" ] ' from dual;" >>$tempsql
echo "select 'then' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'echo ''ORACLE 数据库已启动,请先关闭 ORACLE 数据库'' ' from dual;"
>>$tempsql echo "select '
echo '' '' ' from dual;" >>$tempsql
echo "select 'exit' from dual; " >>$tempsql
echo "select 'fi' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在备份控制文件……''' from dual; " >> $tempsql
echo "select 'cp ' ||name||' $backupdir' from v\$controlfile; " >> $tempsql
echo "select 'echo ''控制文件备份完毕!''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在备份数据文件……''' from dual; " >> $tempsql
echo "select 'cp ' ||name||' $backupdir' from v\$datafile; " >> $tempsql
echo "select 'echo ''数据文件备份完毕!''' from dual; " >> $tempsql
echo "select 'echo ''正在备份联机日志……''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'cp '||member||' $backupdir' from v\$logfile; " >> $tempsql
echo "select 'echo ''联机日志备份完毕!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''脱机冷备完毕!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
##生成冷备份执行脚本
sqlplus -s ' / as sysdba' < $tempsql > $backupsh
rm -f $tempsql
chmod +x $backupsh
cp $backupsh .
echo "正在生成冷备对应的恢复脚本[$rcvrsh]……"
##准备工作
echo "set heading off " > $tempsql
echo "set feedback off " >>$tempsql
echo "set tab off " >>$tempsql
echo "set verify off " >>$tempsql
echo "set pagesize 0" >>$tempsql
echo "set linesize 800 " >>$tempsql
echo "select '#!/bin/bash' from dual;" >> $tempsql
echo "select '' from dual;" >> $tempsql
echo "select '## 恢复脚本生成时间: " `date +%Y 年%m月%d日-%H:%M:%S` "'
from dual;" >> $tempsql
echo "select '## 恢复文件所在路径: $backupdir' from dual; " >> $tempsql
echo "select '' from dual; " >> $tempsql
echo ""
echo "select 'echo ''开始进行文件的复制恢复……''' from dual; " >> $tempsql
echo "select 'echo ''恢复文件所在的路径: $backupdir ''' from dual; " >> $tempsql
##这里不直接关闭数据库,提示用户手工关闭为好 如果需要直接关闭,请修改
echo "select 'orarun='||'\`'||'ps -ef|grep -c ora_'||'\`' from dual;" >>$tempsql
echo "select 'if [ "\$orarun" != "0" ] && [ "\$orarun" != "1" ] ' from dual;" >>$tempsql
echo "select 'then' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'echo ''ORACLE 数据库已启动,请先关闭 ORACLE 数据库'' ' from dual;" >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'exit' from dual; " >>$tempsql
echo "select 'fi' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在恢复控制文件……''' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(name,instr(name,'/',-1)+1,
length(name)-instr(name,'/',-1) )||' '||name from v\$controlfile; " >> $tempsql
echo "select 'echo ''控制文件恢复完毕!''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在恢复数据文件……''' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(name,instr(name,'/',-1)+1,
length(name)-instr(name,'/',-1) )||' '||name from v\$datafile; " >> $tempsql
echo "select 'echo ''数据文件恢复完毕!''' from dual; " >> $tempsql
echo "select 'echo ''正在恢复联机日志……''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(member,instr(member,'/',-1)+1,
length(member)-instr(member,'/',-1) )||' '||member from v\$logfile; " >> $tempsql
echo "select 'echo ''联机日志恢复完毕!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''脱机冷备恢复完毕!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
##生成冷备恢复的执行脚本
sqlplus -s ' / as sysdba' < $tempsql > $rcvrsh
rm -f $tempsql
chmod +x $rcvrsh
cp $rcvrsh .
echo "生成脱机冷备备份与恢复脚本完毕!
" echo "请检查脚本文件: [$backupsh]"
echo " [$rcvrsh]"
echo ""
#如果需要生成后立即执行备份,可增加关闭数据库的操作,然后将以一几行的注释#去掉即可
#./$backupsh
#echo "备份执行完毕,请检查!"
#echo ""
(3) 重启 Oracle 数据库
$ sqlplus /nolog
SQL> connect /as sysdba
SQL> startup
2.如果自从上次脱机冷备后,数据文件错误,联机日志没有被覆盖,可模拟不完全恢复。
1. SQL> shutdown;
2. $ cp …… ……; // 只恢复出错的数据文件
3. SQL> startup mount;
4. SQL> recover database;
5. SQL> alter database open;
3.3 ARCHIVELOG 模式
3.3.1 脱机冷备与恢复
同 NONARCHIVELOG模式
3.3.2 联机热备
联机热备是在数据库运行的情况下进行备份的方法。热备份要求数据库在 Archivelog方式下操作,并需要大量的档案空间。
热备份的优点:
1.可在表空间或数据文件级备份,备份时间短。
2.备份时数据库仍可使用,支持 24*7不间断运行。
3.可达到秒级恢复(恢复到某一时间点上)。
4.可对几乎所有数据库实体作恢复。
5.恢复是快速的,在大多数情况下在数据库仍工作时恢复。
热备份的不足是:
1.不能出错,否则后果严重。
2.若热备份不成功,所得结果不可用于时间点的恢复。
3.因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
注意:在热备过程中系统会生成更多的重做日志和回滚数据。所以必须在数据库较空闲时才进行备份。
备份内容:(1) 数据文件: 一个表空间一个表空间地备份 sql> alter tablespace users begin backup; sql> $copy '/xx/xx.dbf ''/yy/yy.dbf' ; sql> alter tablespace users end backup; sql> alter system checkpoint;(只读表空间直接拷贝,不用begin backup)
(2) 备份归档 log文件
(1)临时停止归档进程 log_archive_max_processes=0
(2)log下那些在 archive redo log 目标目录中的文件
(3)重新启动 archive 进程
(4)备份归档的 redo log 文件
(3) 备份联机的控制文件:sql> alter database backup controlfile to '/xx/xx.ctl';
(4) 备份初始化文件 配置文件 等:sql> $copy …… …… ;
热备脚本:hotback.sql
Rem 热备份脚本 for Linux
Rem 执行该脚本必须保证数据库处于归档模式
Rem db.dw.dm@gmail.com 2007-03-17
Rem
Rem 设置 SQL*Plus环境参数
Rem
set feedback off
set pagesize 0
set heading off
set verify off
set linesize 100
set trimspool on
Rem 设置备份相关的路径 For Linux
Rem 设置数据文件备份路径
define datafile_dir = '/u05/oracle/hotback/datafile'
Rem 设置归档日志文件备份路径
define archlog_dir = '/u05/oracle/hotback/archlog'
Rem 设置控制文件备份路径
define controlfile_dir = '/u05/oracle/hotback/controlfile'
Rem 设置生成的备份脚本名
define hotback = '/u05/oracle/hotback/open_hot_backup.sql'
define spoolfile = '/u05/oracle/hotback/spool.tmp'
define cpy = 'cp' prompt *** Spooling to &hotback
Rem 产生备份数据文件、归档日志文件的命令
set serveroutput on size 1000000
spool &hotback
prompt spool &spoolfile
prompt archive log list;;
prompt alter system switch logfile;;
prompt alter system archive log all;;
DECLARE
CURSOR cur_tablespace IS
SELECT tablespace_name
FROM dba_tablespaces
ORDER BY tablespace_name;
CURSOR cur_datafile (tn VARCHAR) IS
SELECT file_name
FROM dba_data_files
WHERE tablespace_name = tn
ORDER BY file_name;
CURSOR cur_arch_dest IS
SELECT value
FROM v$parameter
WHERE name = 'log_archive_dest';
BEGIN
FOR ct IN cur_tablespace LOOP
IF ct.tablespace_name!='TEMP' then
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' begin backup;');
FOR cd IN cur_datafile (ct.tablespace_name) LOOP
dbms_output.put_line ('host &cp y '||cd.file_name||' &datafile_dir');
END LOOP;
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' end backup;');
end if;
END LOOP;
FOR dest IN cur_arch_dest LOOP
dbms_output.put_line ('host &cpy '|| dest.value || '/* &archlog_dir ');
END LOOP;
END;/ Rem 产生备份控制文件的命令
prompt alter system archive log current;;
prompt alter database backup controlfile to trace;;
prompt alter database backup controlfile to '&controlfile_dir/control.bak' REUSE;;
prompt archive log list;;
prompt prompt ***Hot Backup Finish***;
prompt spool off spool off;
host rm -f &spoolfile
Rem 执行生成的脚本文件
Rem @&hotback
Rem host del &hotback
3.3.3 联机热备的恢复
3.3.3.1完全恢复
一般步骤:
1. 通过以下信息,找到故障数据文件
alert.log
background trace file v$recover_file v$recovery_lo通过这两个视图可以了解详细的需要恢复的数据文件与需要使用到的归档日志。
2. 将故障数据文件对应的表空间 offline SQL> alter tablespace xxx offline;
3. restore and recover SQL> host cp …… ……;SQL> [alter database] recover database/tablespace/datafile 'xx';
4. 将表空间 online SQL> alter tablespace xxx online;
3.3.3.2不完全恢复
不完全恢复的方法只能恢复到过去某个时间点/SCN的数据库状态。
一些限制:
1. 必要条件
一个有效的 online/offline 备份(包含所有的数据文件)
自从备份到故障前的所有归档日志,有可能需要控件文件 (所有控件文件丢失,数据库结构已改变) SQL> recover database …… using backup controlfile;
2. 只能恢复到所有备份数据文件的最大 SCN以后,
3. 恢复后需要 resetlog,所以需要在恢复后马上备份
三种不完全恢复的方法:
1. 基于变化的不完全恢复 Change-based Recovery
2. 基于用户干涉(取消)的不完全恢复 Cancel-based Recovery
3. 基于时间的不完全恢复 Time-based Recovery
获得信息:alert.log可以通过 LogMiner获得精确的时间/SCN,一般在备机上恢复,再 exp/imp到生产机。 查看需要恢复的文件,以及相关的提示信息SQL> select * from v$recover_file; SQL> select * from v$datafile;查看二者的 change#, 确定对应的在 v$log_history 中的范围,从而确定需要那个日志文件序列
设置归档日志文件的路径: LOG_ARCHIVE_DEST
设置 log 在不同的路径:SQL> SET LOGSOURCE 'xx';SQL> alter system archive log start to 'xx';
恢复步骤:
1. 关闭数据库,启动到 MOUNT 状态SQL> shutdown; SQL> startup mount;
2. 恢复数据文件、日志文件、归档日志文件SQL> host cp …… ……; SQL> archive log list;SQL> archived log ==>LOG_ARCHIVE_DEST
3. 执行恢复命令 基于变化:SQL> recover database until change 9999;基于时间:SQL> revover database until time '2001-12-01 14:02:23' using backup controlfile;基于取消:SQL> recover database until cancel;
4. 重置日志,恢复后需要马上备份SQL> alter database open resetlogs;
3.4 分类案例
3.4.1 控件文件的备份与恢复
一、备份
1. 镜像控制文件手工备份 // 每当数据库结构发生变化时立即备份1.数据库关闭时,OS命令拷贝。
2. 联机备份SQL> alter database backup controlfile to 'ctl.bak'; SQL> alter database backup controlfile to trace;
二、恢复
1. 损坏一个控制文件:从镜像拷贝或修改 initSID.ora取消损坏的控制文件。
2. 损坏所有的控制文件:利用备份的控制文件恢复,拷贝或在命令中恢复:SQL> recover database ……using backup controlfile;手工重建控制文件:NOMOUNT状态下执行SQL> CREATE CONYTROLFILE……; //注意联机日志和数据文件的路径和文件名SQL> alter database open resetlogs;
3.4.2 联机日志文件的备份与恢复
一、备份
1. 镜像在不同的磁盘上。 //如果有镜像备份,不用恢复2. 非归档模式下,在数据库关闭时用 OS命令拷贝备份。
3. 归档模式下,手工或自动归档。
二、恢复 // 在恢复后一定要重做备份 丢失日志组成员:在有多个镜像时,一般不会报错,如果需要恢复,可以先删除再增加。
1. 删除: SQL> alter database drop logfile member 'xx';
2. 新增: SQL> alter database add logfile member 'xx' to group 2;( 如果丢失当前日志组成员: 可以先 alter system switch logfile; 再进行操作。) 以下恢复方法都是指丢失所有日志组成员的情况下的恢复。
一、丢失非当前联机日志
1. 重启数据库到 Mount状态:
2. 重建丢失的日志:用命令清空日志组的方法//已归档,重建该日志SQL> alter database clear logfile group 2;//归档模式下如果没有归档SQL> alter database clear unarchived logfile group 2;
二、丢失当前联机日志
1. 如果数据库正常关闭:日志中没有未决事务需要实例恢复,同非当前联机日志方法。
2. 如果是非正常关闭数据库的情况,未决事务需要实例恢复: 如果有备份,可通过备份进行不完全恢复。// until cancel 没有备份,进行强制性恢复 // 最后的办法,可能导致数据库的不一致
3. 如果数据库当前为 Open状态,有活动的事务:尝试能否 Export 或热备份,如果可以,赶紧备份检查非当前日志是否正常,可先做 clear,然后尝试是否能 switch log,能否正常关闭 DB,如果可以 switch log 正常关闭 DB,方法同 1,否则同 2
3.4.3 回滚数据文件的恢复
1. 从可用备份中恢复非归档模式下的恢复会有数据丢失归档模式下,有可用备份,可完全恢复(需要关闭数据库)
2. 没有可用备份时强行恢复:// offline drop,删除重建。
// 需要先注释 undo_tablespace,或者重新指定一个系统回滚段表空间,然后再操作
1. 数据库正常关闭 没有未决的事务
1. shutdown,修改 init参数文件,注释 undo_tablespace
2. SQL>startup restrict mount;
3. SQL>alter database datafile 2 offline drop;
4. SQL>alter database open;
5. SQL>drop tablespace xxx including contents;
6. 重建回滚段表空间
7. shutdown,修改 init参数文件,去掉注释设置新的 undo_tablespace
8. SQL> alter system disable restricted session;
2. 非正常关闭 强制恢复 隐含参数:_CORRUPTED_ROLLBACK_SEGMENTS
1. shutdown,修改 init参数文件,删除 undo_tablespace
2. SQL>startup restrict mount;
3. SQL>alter database datafile 2 offline drop;
4. SQL>alter database open;
5. SQL>drop tablespace xxx including contents;如果出错:回滚段中有活动事务SQL>drop rollback segment rbs0; rbs1, 2 ……
在第1步中,加入隐含参数_CORRUPTED_ROLLBACK_SEGMENTS = (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$, ……)
6. 重建回滚段表空间,online
7. shutdown,修改 init参数文件,去掉注释设置新的 undo_tablespace去掉隐含参数
8. SQL>alter system disable restricted session;
3.4.5 临时数据文件的恢复
方法: 先将用户临时表空间置为其他,然后删除重建
1. SQL> shutdown
2. SQL> startup restrict mount;
3. SQL> alter user xxx temporary tablespace TEMP2;
4. SQL> alter database open;
5. SQL> drop tablespace temp including contents;
6. 重建临时表空间
7. 重新分配给各用户
8. SQL> alter system disable restricted session; 如果是默认的临时表空间,需要先将默认临时表空间置为其他 SQL> alter database default temporary tablespace temp_2;
对于使用 OS拷贝备份的数据文件,可以使用 DBVERTIFY 进行检验。DBVERTIFY是一个外部工具,主要用于校验数据文件或备份的数据文件的数据块是否正确。 例:
dbv /u01/oradata/oracle/users01.dbf BLOCKSIZE=8192
参数说明:
关键字 说明 (默认)
FILE 要检验的文件 (NONE)
START 起始块 (文件的第一个块)
END 结束块 (文件的最后一个块)
BLOCKSIZE 逻辑块大小 (2048)
LOGFILE 输出日志 (NONE)
FEEDBACK 显示进程 (0)
Recover 还可以进行测试,检测恢复的错误,错误信息记载在 alert_SID.log 文件中,通过测试,我们可以知道该恢复操作是否能正常完成。
SQL> RECOVER TABLESPACE sales TEST;
SQL> RECOVER DATABASE UNTIL CANCEL TEST;
3.1 相关设置
3.1.1 设置ARCHIVELOG与NONARCHIVELOG模式
重做日志组是以循环方式使用的,重做日志组会被覆盖重做日志信息就会丢失。为了保存历史以来的重做日志,数据库可以运行在日志归档模式下(archivelog mode)。 在日志归档模式下,当日志组撤换到下一个组时后台进程 ARCn 将上一个日志文件复制到另一个地方(oracle 10g 使用快速恢复区会归档到该区)保存。数据库默认为非归档模式(noarchivelog mode)。
设置ARCHIVELOG模式步骤:
1. 关闭数据库,备份已有的数据,改变数据库的运行方式是对数据库的重要改动,所以要对数据库做备份,对可能出现的问题作出保护。
2. 修改初试化参数: 使用 PFILE,修改初始化参数文件 init[SID].ora log_archive_start=true #启动自动归档 log_archive_format=ARC%T%S.arc #归档文件格式 log_archive_dest=/arch12/arch #归档路径
3. 启动 Instance 到 Mount状态,即加载数据库但不打开数据库:SQL > startup mount;
4. 发出修改命令SQL > alter database archivelog; SQL > alter database open;设置 NONARCHIVELOG模式步骤同上,只需修改相应参数值即可。
3.1.2 LOGGING 与 NOLOGGING
表空间、表、索引、分区可以设置为 NOLOGGING,用于快速装入数据(Direct Load)。 在插入数据时只写入最小的重做日志和回滚数据。在归档数据库模式下,执行 Direct Load 操作后应立即进行备份,否则不能使用之前的备份进行恢复。另外,用户可以设置数据库的 强制日志模式,使用所有操作都记入日志。
LOGGING 与 NOLOGGING 的区别:
LOGGING NOLOGGING
所有的更改写入 REDO 最小写入 REDO LOG
从最近备份中完全恢复 不能从最近备份中完全恢复
不需要增加备份 需要增加备份
NOLOGGING 的操作:
CREATE TABLE … NOLOGGING AS SELECT 语句
INSERT /*+APPEND*/ INTO <表> NOLOGGING SELECT 语句
INSERT /*+ PARALLEL(<表>,<n>)达式*/ INTO <表> NOLOGGING SELECT 语句
SQL*LOADER的DIRECT 方法
例:
SQL>CREATE TABLE emp1 NOLOGGING AS SELECT * FROM emp; SQL>SELECT name,unrecoverable_time FROM V$DATAFILE;
SQL>INSERT /*+ APPEND */ INTO emp1 NOLOGGING SELECT* * FROM emp; SQL>SELECT name,unrecoverable_time FROM V$DATAFILE;
SQL>ALTER DATABASE NO FORCE LOGGING;
3.1.3 归档路径
在归档模式下进行自动归档时,或者在恢复时设置归档所在的位置,需要设置归档路径初始化参数:
LOG_ARCHIVE_DEST_n=“LOCATION=path MANDATORY|OPTIONAL REOPEN=n”
LOG_ARCHIVE_DEST_n=“SERVICE=standby MANDATORY|OPTIONAL REOPEN=n
3.2 NONARCHIVELOG 模式
3.2.1 脱机冷备与恢复
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份 Oracle 信息而言,冷备份是最快和最安全的方法。
冷备份的优点:
1.是非常快速的备份方法(只需拷贝文件)
2.容易归档(简单拷贝即可)
3.容易恢复到某个时间点上(只需将文件再拷贝回去)
4.能与归档方法相结合,作数据库“最新状态”的恢复。
5.低度维护,高度安全。
冷备份的不足:
1.单独使用时,只能提供到“某一时间点上”的恢复。
2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
4.不能按表或按用户恢复。
如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以 工作)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须 拷贝的文件包括:1.所有数据文件2.所有控制文件3.所有联机 REDO LOG 文件4.参数化参数 Init.ora 文件(可选)。
3.2.2 案例
1.9i 脱机冷备/恢复的例子:
(1) 关闭数据库
$ sqlplus /nolog
SQL> connect /as sysdba
SQL> shutdown normal;
(2) 用拷贝命令备份/恢复全部的时间文件、重做日志文件、控制文件、初始化参数 文件SQL > host cp xx xx;
可以使用以下冷备脚本:
#!/bin/bash
##################################################################
## 名称: coldback_gen.sh
## 功能: 本 shell 用于生成冷备份脚本, 进行冷备份同时生成相应的恢复命令
## 可以修改后在生成后立即执行
## 编者:
## 日期: 2006.12.13.
##################################################################
##设置变量
##设置临时文件名
tempsql=./backup.sql
##设置备份文件存放路径
backdate=`date -u +%Y%m%d`
backupdir=/u04/oracle/coldback/$backdate
mkdir $backupdir
##设置备份脚本文件名
backupsh=$backupdir/coldback.sh
rcvrsh=$backupdir/recovery.sh
echo "正在生成冷备份脚本[$backupsh]……"
##检查 ORACLE数据库是否启动
oraisrun=`ps -ef|grep -c ora_`
if [ "$oraisrun" = "0" ] || [ "$oraisrun" = "1" ]
then
echo "
ORACLE 数据库尚未启动,请先启动 ORACLE"
echo ""
exit
fi
##准备工作
echo "set heading off " > $tempsql
echo "set feedback off " >>$tempsql
echo "set tab off " >>$tempsql
echo "set verify off " >>$tempsql
echo "set pagesize 0" >>$tempsql
echo "set linesize 800 " >>$tempsql
echo "select '#!/bin/bash' from dual;" >> $tempsql
echo "select '' from dual;" >> $tempsql
echo "select '## 备份脚本生成时间: " `date +%Y 年%m月%d日-%H:%M:%S` "'
from dual;" >> $tempsql
echo "select '## 备份目的路径: $backupdir' from dual; " >> $tempsql
echo "select '' from dual; " >> $tempsql
echo "" echo "select 'echo ''开始进行脱机冷备……''' from dual; " >> $tempsql
echo "select 'echo ''备份目的路径: $backupdir ''' from dual; " >> $tempsql
##这里不直接关闭数据库,提示用户手工关闭为好。如果需要直接关闭,请修改
echo "select 'orarun='||'\`'||'ps -ef|grep -c ora_'||'\`' from dual;" >>$tempsql
echo "select 'if [ "\$orarun" != "0" ] && [ "\$orarun" != "1" ] ' from dual;" >>$tempsql
echo "select 'then' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'echo ''ORACLE 数据库已启动,请先关闭 ORACLE 数据库'' ' from dual;"
>>$tempsql echo "select '
echo '' '' ' from dual;" >>$tempsql
echo "select 'exit' from dual; " >>$tempsql
echo "select 'fi' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在备份控制文件……''' from dual; " >> $tempsql
echo "select 'cp ' ||name||' $backupdir' from v\$controlfile; " >> $tempsql
echo "select 'echo ''控制文件备份完毕!''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在备份数据文件……''' from dual; " >> $tempsql
echo "select 'cp ' ||name||' $backupdir' from v\$datafile; " >> $tempsql
echo "select 'echo ''数据文件备份完毕!''' from dual; " >> $tempsql
echo "select 'echo ''正在备份联机日志……''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'cp '||member||' $backupdir' from v\$logfile; " >> $tempsql
echo "select 'echo ''联机日志备份完毕!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''脱机冷备完毕!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
##生成冷备份执行脚本
sqlplus -s ' / as sysdba' < $tempsql > $backupsh
rm -f $tempsql
chmod +x $backupsh
cp $backupsh .
echo "正在生成冷备对应的恢复脚本[$rcvrsh]……"
##准备工作
echo "set heading off " > $tempsql
echo "set feedback off " >>$tempsql
echo "set tab off " >>$tempsql
echo "set verify off " >>$tempsql
echo "set pagesize 0" >>$tempsql
echo "set linesize 800 " >>$tempsql
echo "select '#!/bin/bash' from dual;" >> $tempsql
echo "select '' from dual;" >> $tempsql
echo "select '## 恢复脚本生成时间: " `date +%Y 年%m月%d日-%H:%M:%S` "'
from dual;" >> $tempsql
echo "select '## 恢复文件所在路径: $backupdir' from dual; " >> $tempsql
echo "select '' from dual; " >> $tempsql
echo ""
echo "select 'echo ''开始进行文件的复制恢复……''' from dual; " >> $tempsql
echo "select 'echo ''恢复文件所在的路径: $backupdir ''' from dual; " >> $tempsql
##这里不直接关闭数据库,提示用户手工关闭为好 如果需要直接关闭,请修改
echo "select 'orarun='||'\`'||'ps -ef|grep -c ora_'||'\`' from dual;" >>$tempsql
echo "select 'if [ "\$orarun" != "0" ] && [ "\$orarun" != "1" ] ' from dual;" >>$tempsql
echo "select 'then' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'echo ''ORACLE 数据库已启动,请先关闭 ORACLE 数据库'' ' from dual;" >>$tempsql
echo "select 'echo '' '' ' from dual;" >>$tempsql
echo "select 'exit' from dual; " >>$tempsql
echo "select 'fi' from dual; " >>$tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在恢复控制文件……''' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(name,instr(name,'/',-1)+1,
length(name)-instr(name,'/',-1) )||' '||name from v\$controlfile; " >> $tempsql
echo "select 'echo ''控制文件恢复完毕!''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''正在恢复数据文件……''' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(name,instr(name,'/',-1)+1,
length(name)-instr(name,'/',-1) )||' '||name from v\$datafile; " >> $tempsql
echo "select 'echo ''数据文件恢复完毕!''' from dual; " >> $tempsql
echo "select 'echo ''正在恢复联机日志……''' from dual; " >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'cp '||'$backupdir'||'/'||substr(member,instr(member,'/',-1)+1,
length(member)-instr(member,'/',-1) )||' '||member from v\$logfile; " >> $tempsql
echo "select 'echo ''联机日志恢复完毕!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
echo "select 'echo ''脱机冷备恢复完毕!''' from dual;" >> $tempsql
echo "select 'echo '' '' ' from dual; " >> $tempsql
##生成冷备恢复的执行脚本
sqlplus -s ' / as sysdba' < $tempsql > $rcvrsh
rm -f $tempsql
chmod +x $rcvrsh
cp $rcvrsh .
echo "生成脱机冷备备份与恢复脚本完毕!
" echo "请检查脚本文件: [$backupsh]"
echo " [$rcvrsh]"
echo ""
#如果需要生成后立即执行备份,可增加关闭数据库的操作,然后将以一几行的注释#去掉即可
#./$backupsh
#echo "备份执行完毕,请检查!"
#echo ""
(3) 重启 Oracle 数据库
$ sqlplus /nolog
SQL> connect /as sysdba
SQL> startup
2.如果自从上次脱机冷备后,数据文件错误,联机日志没有被覆盖,可模拟不完全恢复。
1. SQL> shutdown;
2. $ cp …… ……; // 只恢复出错的数据文件
3. SQL> startup mount;
4. SQL> recover database;
5. SQL> alter database open;
3.3 ARCHIVELOG 模式
3.3.1 脱机冷备与恢复
同 NONARCHIVELOG模式
3.3.2 联机热备
联机热备是在数据库运行的情况下进行备份的方法。热备份要求数据库在 Archivelog方式下操作,并需要大量的档案空间。
热备份的优点:
1.可在表空间或数据文件级备份,备份时间短。
2.备份时数据库仍可使用,支持 24*7不间断运行。
3.可达到秒级恢复(恢复到某一时间点上)。
4.可对几乎所有数据库实体作恢复。
5.恢复是快速的,在大多数情况下在数据库仍工作时恢复。
热备份的不足是:
1.不能出错,否则后果严重。
2.若热备份不成功,所得结果不可用于时间点的恢复。
3.因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
注意:在热备过程中系统会生成更多的重做日志和回滚数据。所以必须在数据库较空闲时才进行备份。
备份内容:(1) 数据文件: 一个表空间一个表空间地备份 sql> alter tablespace users begin backup; sql> $copy '/xx/xx.dbf ''/yy/yy.dbf' ; sql> alter tablespace users end backup; sql> alter system checkpoint;(只读表空间直接拷贝,不用begin backup)
(2) 备份归档 log文件
(1)临时停止归档进程 log_archive_max_processes=0
(2)log下那些在 archive redo log 目标目录中的文件
(3)重新启动 archive 进程
(4)备份归档的 redo log 文件
(3) 备份联机的控制文件:sql> alter database backup controlfile to '/xx/xx.ctl';
(4) 备份初始化文件 配置文件 等:sql> $copy …… …… ;
热备脚本:hotback.sql
Rem 热备份脚本 for Linux
Rem 执行该脚本必须保证数据库处于归档模式
Rem db.dw.dm@gmail.com 2007-03-17
Rem
Rem 设置 SQL*Plus环境参数
Rem
set feedback off
set pagesize 0
set heading off
set verify off
set linesize 100
set trimspool on
Rem 设置备份相关的路径 For Linux
Rem 设置数据文件备份路径
define datafile_dir = '/u05/oracle/hotback/datafile'
Rem 设置归档日志文件备份路径
define archlog_dir = '/u05/oracle/hotback/archlog'
Rem 设置控制文件备份路径
define controlfile_dir = '/u05/oracle/hotback/controlfile'
Rem 设置生成的备份脚本名
define hotback = '/u05/oracle/hotback/open_hot_backup.sql'
define spoolfile = '/u05/oracle/hotback/spool.tmp'
define cpy = 'cp' prompt *** Spooling to &hotback
Rem 产生备份数据文件、归档日志文件的命令
set serveroutput on size 1000000
spool &hotback
prompt spool &spoolfile
prompt archive log list;;
prompt alter system switch logfile;;
prompt alter system archive log all;;
DECLARE
CURSOR cur_tablespace IS
SELECT tablespace_name
FROM dba_tablespaces
ORDER BY tablespace_name;
CURSOR cur_datafile (tn VARCHAR) IS
SELECT file_name
FROM dba_data_files
WHERE tablespace_name = tn
ORDER BY file_name;
CURSOR cur_arch_dest IS
SELECT value
FROM v$parameter
WHERE name = 'log_archive_dest';
BEGIN
FOR ct IN cur_tablespace LOOP
IF ct.tablespace_name!='TEMP' then
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' begin backup;');
FOR cd IN cur_datafile (ct.tablespace_name) LOOP
dbms_output.put_line ('host &cp y '||cd.file_name||' &datafile_dir');
END LOOP;
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' end backup;');
end if;
END LOOP;
FOR dest IN cur_arch_dest LOOP
dbms_output.put_line ('host &cpy '|| dest.value || '/* &archlog_dir ');
END LOOP;
END;/ Rem 产生备份控制文件的命令
prompt alter system archive log current;;
prompt alter database backup controlfile to trace;;
prompt alter database backup controlfile to '&controlfile_dir/control.bak' REUSE;;
prompt archive log list;;
prompt prompt ***Hot Backup Finish***;
prompt spool off spool off;
host rm -f &spoolfile
Rem 执行生成的脚本文件
Rem @&hotback
Rem host del &hotback
3.3.3 联机热备的恢复
3.3.3.1完全恢复
一般步骤:
1. 通过以下信息,找到故障数据文件
alert.log
background trace file v$recover_file v$recovery_lo通过这两个视图可以了解详细的需要恢复的数据文件与需要使用到的归档日志。
2. 将故障数据文件对应的表空间 offline SQL> alter tablespace xxx offline;
3. restore and recover SQL> host cp …… ……;SQL> [alter database] recover database/tablespace/datafile 'xx';
4. 将表空间 online SQL> alter tablespace xxx online;
3.3.3.2不完全恢复
不完全恢复的方法只能恢复到过去某个时间点/SCN的数据库状态。
一些限制:
1. 必要条件
一个有效的 online/offline 备份(包含所有的数据文件)
自从备份到故障前的所有归档日志,有可能需要控件文件 (所有控件文件丢失,数据库结构已改变) SQL> recover database …… using backup controlfile;
2. 只能恢复到所有备份数据文件的最大 SCN以后,
3. 恢复后需要 resetlog,所以需要在恢复后马上备份
三种不完全恢复的方法:
1. 基于变化的不完全恢复 Change-based Recovery
2. 基于用户干涉(取消)的不完全恢复 Cancel-based Recovery
3. 基于时间的不完全恢复 Time-based Recovery
获得信息:alert.log可以通过 LogMiner获得精确的时间/SCN,一般在备机上恢复,再 exp/imp到生产机。 查看需要恢复的文件,以及相关的提示信息SQL> select * from v$recover_file; SQL> select * from v$datafile;查看二者的 change#, 确定对应的在 v$log_history 中的范围,从而确定需要那个日志文件序列
设置归档日志文件的路径: LOG_ARCHIVE_DEST
设置 log 在不同的路径:SQL> SET LOGSOURCE 'xx';SQL> alter system archive log start to 'xx';
恢复步骤:
1. 关闭数据库,启动到 MOUNT 状态SQL> shutdown; SQL> startup mount;
2. 恢复数据文件、日志文件、归档日志文件SQL> host cp …… ……; SQL> archive log list;SQL> archived log ==>LOG_ARCHIVE_DEST
3. 执行恢复命令 基于变化:SQL> recover database until change 9999;基于时间:SQL> revover database until time '2001-12-01 14:02:23' using backup controlfile;基于取消:SQL> recover database until cancel;
4. 重置日志,恢复后需要马上备份SQL> alter database open resetlogs;
3.4 分类案例
3.4.1 控件文件的备份与恢复
一、备份
1. 镜像控制文件手工备份 // 每当数据库结构发生变化时立即备份1.数据库关闭时,OS命令拷贝。
2. 联机备份SQL> alter database backup controlfile to 'ctl.bak'; SQL> alter database backup controlfile to trace;
二、恢复
1. 损坏一个控制文件:从镜像拷贝或修改 initSID.ora取消损坏的控制文件。
2. 损坏所有的控制文件:利用备份的控制文件恢复,拷贝或在命令中恢复:SQL> recover database ……using backup controlfile;手工重建控制文件:NOMOUNT状态下执行SQL> CREATE CONYTROLFILE……; //注意联机日志和数据文件的路径和文件名SQL> alter database open resetlogs;
3.4.2 联机日志文件的备份与恢复
一、备份
1. 镜像在不同的磁盘上。 //如果有镜像备份,不用恢复2. 非归档模式下,在数据库关闭时用 OS命令拷贝备份。
3. 归档模式下,手工或自动归档。
二、恢复 // 在恢复后一定要重做备份 丢失日志组成员:在有多个镜像时,一般不会报错,如果需要恢复,可以先删除再增加。
1. 删除: SQL> alter database drop logfile member 'xx';
2. 新增: SQL> alter database add logfile member 'xx' to group 2;( 如果丢失当前日志组成员: 可以先 alter system switch logfile; 再进行操作。) 以下恢复方法都是指丢失所有日志组成员的情况下的恢复。
一、丢失非当前联机日志
1. 重启数据库到 Mount状态:
2. 重建丢失的日志:用命令清空日志组的方法//已归档,重建该日志SQL> alter database clear logfile group 2;//归档模式下如果没有归档SQL> alter database clear unarchived logfile group 2;
二、丢失当前联机日志
1. 如果数据库正常关闭:日志中没有未决事务需要实例恢复,同非当前联机日志方法。
2. 如果是非正常关闭数据库的情况,未决事务需要实例恢复: 如果有备份,可通过备份进行不完全恢复。// until cancel 没有备份,进行强制性恢复 // 最后的办法,可能导致数据库的不一致
3. 如果数据库当前为 Open状态,有活动的事务:尝试能否 Export 或热备份,如果可以,赶紧备份检查非当前日志是否正常,可先做 clear,然后尝试是否能 switch log,能否正常关闭 DB,如果可以 switch log 正常关闭 DB,方法同 1,否则同 2
3.4.3 回滚数据文件的恢复
1. 从可用备份中恢复非归档模式下的恢复会有数据丢失归档模式下,有可用备份,可完全恢复(需要关闭数据库)
2. 没有可用备份时强行恢复:// offline drop,删除重建。
// 需要先注释 undo_tablespace,或者重新指定一个系统回滚段表空间,然后再操作
1. 数据库正常关闭 没有未决的事务
1. shutdown,修改 init参数文件,注释 undo_tablespace
2. SQL>startup restrict mount;
3. SQL>alter database datafile 2 offline drop;
4. SQL>alter database open;
5. SQL>drop tablespace xxx including contents;
6. 重建回滚段表空间
7. shutdown,修改 init参数文件,去掉注释设置新的 undo_tablespace
8. SQL> alter system disable restricted session;
2. 非正常关闭 强制恢复 隐含参数:_CORRUPTED_ROLLBACK_SEGMENTS
1. shutdown,修改 init参数文件,删除 undo_tablespace
2. SQL>startup restrict mount;
3. SQL>alter database datafile 2 offline drop;
4. SQL>alter database open;
5. SQL>drop tablespace xxx including contents;如果出错:回滚段中有活动事务SQL>drop rollback segment rbs0; rbs1, 2 ……
在第1步中,加入隐含参数_CORRUPTED_ROLLBACK_SEGMENTS = (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$, ……)
6. 重建回滚段表空间,online
7. shutdown,修改 init参数文件,去掉注释设置新的 undo_tablespace去掉隐含参数
8. SQL>alter system disable restricted session;
3.4.5 临时数据文件的恢复
方法: 先将用户临时表空间置为其他,然后删除重建
1. SQL> shutdown
2. SQL> startup restrict mount;
3. SQL> alter user xxx temporary tablespace TEMP2;
4. SQL> alter database open;
5. SQL> drop tablespace temp including contents;
6. 重建临时表空间
7. 重新分配给各用户
8. SQL> alter system disable restricted session; 如果是默认的临时表空间,需要先将默认临时表空间置为其他 SQL> alter database default temporary tablespace temp_2;
发表评论
-
Oracle数据库备份与恢复之六:LogMiner
2008-12-07 21:23 9626.1 LogMiner 的用途 Oracle ... -
Oracle数据库备份与恢复之五:Flashback
2008-12-07 21:22 924Flashback在开发环境(有 ... -
Oracle数据库备份与恢复之四:RMAN(备份与恢复管理器) 续
2008-12-07 21:17 15954.7.3 表空间时间点 ... -
Oracle数据库备份与恢复之四:RMAN(备份与恢复管理器)
2008-12-07 21:14 2652RMAN是ORACLE提供的一个备 ... -
Oracle数据库备份与恢复之二:SQL*Loader
2008-12-07 21:06 10672.1 基本知识 Oracle 的 SQL* LO ... -
Oracle数据库备份与恢复之一:exp/imp(导出与导入装库与卸库)
2008-12-07 21:01 18191.1 基本命令 1. 获取帮助 $ ... -
如何对Oracle数据库文件进行恢复与备份
2008-12-07 20:55 1465任何数据库在长期 ...
相关推荐
系统及数据库备份 "文件编号: "生效日期: "受控编号: " " " " " "密级: "版次: "修改状态: " "总页数 " "正文 " "附录 " " "编制: "审核: "批准: " " " " " " " " 文件修改控制 "修改记录编号 "修改状态 ...
登录oracle数据库,在数据库中创建备份使用目录 sqlplus / as sysdba create directory backupdir as ‘/oracle/backup’; 退出sqlplus后,用oracle用户执行全库备份,备份文件生成在/oracle/backup下: expdp ...
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此,使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.
exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移 它有三种模式: a. 用户模式: 导出用户所有对象以及对象中的数据; b. 表模式: 导出用户所有表或者指定的表; c. 整个数据库: ...
Oracle数据库三种迁移方案 Oracle DataGuard方式迁移数据库 数据库迁移升级最佳实践9i-10g-11g Oracle ASM扩容&数据迁移文档 06使用XTTS技术进行U2L跨平台数据迁移 Oracle 迁移至 PostgreSQL 在华为 ARM 上的解决...
1 由于ARCHIVE挂起导致数据库挂死 2 NIT文件中SGA区设置太大,导致内存不够用,数据库和系统都挂死 3 由于临时表空间无法扩展导致数据库...26用户数据、表破坏下的数据恢复 27 由于OS层问题导致数据库ORA-600错误 .....
Navicat Premium 结合了其他 Navicat 成员的功能。...它可以让用户连接本机或远程服务器、提供一些实用的数据库工具如数据模型工具、数据同步、结构同步、导入、导出、备份、还原及报表以协助管理数据。
Oracle数据库三种连接身份 “sysdba” :数据库管理员。权限包括:打开数据库服务器、关闭数据库服务器、备份数据库、恢复数据库、日志归档、会话限制、管理功能和创建数据库。 数据库用sysdba登录的验证有两种方式...
1. os : linux,solaris或其他unix起码要一种 2. bash (不精通也要熟) LINUX与UNIX SHELL编程指南.pdf 3. perl 包括: Perl_CD_BookShelf.chm ... 数据库备份与恢复 16. 数据库迁移 。。。。。。。
本文实例讲述了Python读写及备份oracle数据库操作。分享给大家供大家参考,具体如下: 最近项目中需要用到Python调用oracle实现读写操作,踩过很多坑,历尽艰辛终于实现了。性能怎样先不说,有方法后面再调优嘛。...
Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...
、Lipper、FoxPro、Arago、Wordtech、Xbase和类似数据库或与数据库有关产品识别;可用数据文件(能被Excel 97打开);Oracle 8.1.x表格空间文件 DBX:DataBearn图像;Microsoft Visual FoxPro表格文件 DCT:...
可运行于windows、linux、Mac、Unix系统,集中管理企业VMware,Hyper-V等虚拟系统,Microsoft Exchange Server、Microsoft SQL Server、Lotus Domino/Notes、Oracle、MySQL等备份工作,能满足所有用户的备份需求。...
监考老师在考试程过程会故意将数据库弄垮(这也属于考试过程中的一部分),此过程考核参考者的备份恢复能力。 具体的考试内容见OCM考试大纲。 4. 考试过程大部分以手工处理为主,如手工建库,手工建表或同义词等。...
本软件是一款 Oracle 客户端工具 - 专用于 Oracle 数据库操作: 多线程、多连接、智能/彩色SQL编辑器、中英文双语界面并能切换、支持 PL/SQL、批量SQL运行、高效的块操作、方便的表格操作,不需要安装 Oracle ...
Oracle SQL Handler,是专为 Oracle 数据库开发人员及操作人员精心打造的一款 Oracle 客户端工具 : 超智能的SQL编辑器;超方便的表格操作(可以通过修改表格的单元格数据去更新数据库表 );多种格式的数据导出包括...
第三部分、备份与恢复 28 [Q]如何开启/关闭归档 28 [Q]怎样设置定时归档 29 [Q]不同版本怎么导出/导入 29 [Q]不同的字符集之前怎么导数据 29 [Q]怎么样备份控制文件 29 [Q]控制文件损坏如何恢复 29 [Q]怎么样热备份...
A、完全备份 B、差异备份 C、异地备份 D、在线备份 18、Oracle数据库是一种( B )数据库管理系统。 A、逻辑型 B、 关系型 C、非关系型 D、非逻辑型 19、Oracle最早期的产品是( A )。 A、Oracle 1 B、Oracle 4 C、...