Oracle 用户管理的备份与恢复

用户管理的备份与恢复

冷备份非归档模式数据库

  1. 确定存储备份文件的位置和空间
  2. 找到需要复制的数据库文件(包含数据文件,临时文件,控制文件,重做日志文件, [参数文件])
  3. 使用immediate、transational或normal子句关闭数据库
  4. 将文件(步骤2中找到的)复制到备份位置(步骤1确定的)
  5. 重启数据库
# step 1
-- 查询数据库大小,单位M. 备份位置空间应该大于查询大小
select sum(sum_bytes)/1024/1024 m_bytes
from (
select sum(bytes) sum_bytes from v$datafile
union all
select sum(bytes) sum_bytes from v$tempfile
union all
select (sum(bytes) * members) sum_bytes from v$log group by members
);

# step 2
-- 查询数据库文件位置
select name from v$datafile
union
select name from v$controlfile
union
select name from v$tempfile
union
select member from v$logfile;
-- 查询spfile参数文件位置
select name, value from v$parameter where lower(name) = 'spfile';

# step 3
shutdown immediate;

# step 4
-- 手动使用cp命令复制

# step 5
startup;
# 自动冷备份脚本
#!/bin/bash
# cold backup, 此脚本没有复制参数文件, 需要手动复制

ORACLE_SID=iddbsvr
ORACLE_HOME=/opt/oracle/product/11.2.0/dbhome_1
BACKUP_BASEDIR=/backup
BACKUP_DIR=$BACKUP_BASEDIR/$ORACLE_SID

# if backup_dir not exists, create it
if ! [ -d $BACKUP_DIR ]; then
        mkdir -p $BACKUP_DIR
fi

PATH=$PATH:$ORACLE_HOME/bin

#
sqlplus -s <<EOF
/ as sysdba
set head off pages0 lines 132 verify off feed off trimsp on
define cbdir=$BACKUP_DIR
spool coldbackup_$ORACLE_SID.sql
select 'shutdown immediate;' from dual;
select '!cp ' || name || ' ' || '&&cbdir' from v\$datafile;
select '!cp ' || name || ' ' || '&&cbdir' from v\$tempfile;
select '!cp ' || member || ' ' || '&&cbdir' from v\$logfile;
select '!cp ' || name || ' ' || '&&cbdir' from v\$controlfile;
select 'startup;' from dual;
spool off;
@@coldbackup_$ORACLE_SID.sql
EOF
exit 0
# 冷备份自动恢复脚本
#!/bin/bash
# cold restore

ORACLE_SID=iddbsvr
ORACLE_HOME=/opt/oracle/product/11.2.0/dbhome_1
BACKUP_BASEDIR=/backup
BACKUP_DIR=$BACKUP_BASEDIR/$ORACLE_SID

sqlplus -s <<EOF
/ as sysdba
set head off pages0 lines 132 verify off feed off trimsp on
define cbdir=$BACKUP_DIR
spool coldrestore_$ORACLE_SID.sql
select 'shutdown immediate;' from dual;
select '!cp ' || '&&cbdir/' || substr(name, instr(name, '/', -1, 1)+1) || ' ' || name from v\$datafile;
select '!cp ' || '&&cbdir/' || substr(name, instr(name, '/', -1, 1)+1) || ' ' || name from v\$tempfile;
select '!cp ' || '&&cbdir/' || substr(member, instr(member, '/', -1, 1)+1) || ' ' || member from v\$logfile;
select '!cp ' || '&&cbdir/' || substr(name, instr(name, '/', -1, 1)+1) || ' ' || name from v\$controlfile;
select 'startup;' from dual;
spool off;
EOF
exit 0

冷备份归档模式数据库

  1. 确定存储备份文件的位置和空间
  2. 找到需要复制的数据库文件(包含数据文件,控制文件, [参数文件]), 不包含临时文件和在线日志文件
  3. 使用immediate、transational或normal子句关闭数据库
  4. 将文件(步骤2中找到的)复制到备份位置(步骤1确定的)
  5. 重启数据库

备份除了步骤2有差异, 其他和冷备份非归档一样。 恢复方法与热备份恢复数据库方法相同。

# step 2
-- 查询数据库文件位置
select name from v$datafile
union
select name from v$controlfile
-- 查询spfile参数文件位置
select name, value from v$parameter where lower(name) = 'spfile';

创建热备份

  1. 确保数据库处于归档日志模式
  2. 确定存储备份文件的位置
  3. 找到需要备份的文件
  4. 记下联机重做日志的最大序列号
  5. 将数据库/表空间更改为备份模式
  6. 使用OS实用程序,将数据文件复制到步骤2确定的存储位置
  7. 将数据库/表空间退出备份模式
  8. 归档当前联机重做日志,并记下联机重做日志的最大序列号
  9. 备份控制文件
  10. 备份在执行备份过程中生成的所有归档重做日志
# step 1
-- 确保归档
SYS@iddbsvr SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1
Next log sequence to archive   1
Current log sequence           1

# step 2
-- 查询数据库大小,单位M. 备份位置空间应该大于查询大小
select sum(bytes) / 1024 / 1024 AS m_bytes from dba_data_files;

# step 3
-- 查询数据文件位置
select name from v$datafile;

set pagesize 150;
column tablespace_name format a30;
column file_name format a80;
select tablespace_name, file_name from dba_data_files order by 1, 2;

# step 4
-- 记下联机重做日志的最大序列号
select thread#, max(sequence#) from v$log group by thread# order by thread#;

# step 5
-- 将数据库/表空间更改为备份模式
alter database begin backup;
alter tablespace <tablespace_name> begin backup;

# step 6
-- 使用OS实用程序,将数据文件复制到步骤2确定的存储位置

# step 7
-- 将数据库/表空间退出备份模式
alter database end backup;
alter tablespace <tablespace_name> end backup;
-- 验证退出(没有数据文件处于active状态)
alter session set nls_date_format = 'DD-MON-RRRR HH24:MI:SS';
select * from v$backup where status = 'ACTIVE';

# step 8
-- 归档当前联机重做日志
alter system archive log current;
-- 并记下联机重做日志的最大序列号
select thread#, max(sequence#) from v$log group by thread# order by thread#;

# step 9
-- 备份控制文件(热备份无法使用cp命令)
alter database backup controlfile to '</backup/dir/control.dbf>' reuse;

# step 10
-- 备份在执行备份过程中生成的所有归档重做日志
cp <archive redo logs generated during backup>  <backup directory>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值