oracle的备份与恢复

这里oracle的备份与恢复使用的是exp和imp,现在已经有了expdp和impdp,而且也已经有了rman,所以本文只是转载了一下。

dba的职责:
1、安装和升级oracle数据库

2、建库、表空间、表、视图、索引…

3、制定并实施备份与恢复计划

4、数据库权限管理,调优,故障排除

5、对于高级dba,要求能参与项目开发,会编写sql语句、存储过程、触发器、规则、约束、包

管理数据库的用户主要是sys和system

他们的区别主要是:

1、最重要的区别,存储的数据重要性不同。

sys:所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。sys用户拥有dba(角色),sysdba(系统权限),sysoper(系统权限)角色或权限,是oracle权限最高的用户。

system:用于存放次一级的内部数据,如oracle的一些特性或工具的管理信息。system用户拥有dba,sysdba系统权限。

2、其次的区别,权限的不同。

sys用户必需以as sysdba或as sysoper形式登录,不能以normal方式登录数据库。

system如果正常登录,它其实就是一个普通的dba用户,但是如果以as sysdba登录,其结果实际上它是作为sys用户登录的。

sysdba和sysoper权限区别

sysdba和sysoper具体的权限可以看下表:

系统权限

sysdba

sysoper

区别

startup(启动数据库)

startup

shutdown(关闭数据库)

shutdown

alter database open/mount/backup

alter database open/mount/backup

改变字符集

none

create database(创建数据库)

none不能创建数据库

drop database(删除数据库)

none

create spfile

create spfile

alter database archivelog(归档日志)

alter database archivelog

alter database recover(恢复数据库)

只能完全恢复,不能执行不完全恢复

拥有restricted session(会话限制)

拥有restricted session权限

可以让用户作为sys用户连接

可以进行一些基本的操作,但不能查看用户数据

登录之后用户是sys

登录之后用户是public

dba权限的用户

dba用户是指具有dba角色的数据库用户。特权用户可以执行启动实例,关闭实例等特殊操作,而dba用户只有启动数据库后才能执行各种管理工作。

管理初始化参数

 初始化参数用于设置实例或是数据库的特征,oracle11g提供了300多个初始化参数,并且每个初始化参数都有默认值。

显示初始化参数命令

show parameter

如何修改参数

需要说明的如果你希望修改这些初始化的参数,可以到文件:

盘符:\oracle目录\admin\数据库实例\pfile\init.ora文件中去修改。
数据库(表)的逻辑备份与恢复
逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程;

逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程。

物理备份既可在数据库open的状态下进行也可在关闭数据库后进行;

但是逻辑备份和恢复只能在open的状态下进行。

导出
导出具体的分为:导出表、导出方案、导出数据库三种方式。

导出使用exp命令来完成的,该命令常用的选项有:

userid:用于指定执行导出操作的用户名、口令、连接字符串;

tables:用于指定执行导出操作的表;

owner:用于指定执行导出操作的方案;

full=y:用于指定执行导出操作的数据库;

inctype:用于指定执行导出操作的增量类型;

rows:用于指定执行导出操作是否要导出表中的数据;

file:用于指定导出文件名。

导出表
1、导出自己的表

exp userid=用户名/密码@数据库实例名 tables=(表名1,表名2,..) file=备份路径

例:exp userid=scott/tiger@orcl tables=(emp,dept) file=d:/scott_emp_dept.dmp

2、导出其它方案的表

如果用户要导出其它方案的表,则需要DBA的权限或是exp_full_database的权限,比如system就可以导出scott的表

exp useris=用户名/密码@数据库实例名 tables=(方案名.表名1,方案名.表名2,..) file=备份路径

例:exp userid=system/orcl@orcl tables=(scott.emp,scott.dept) file=d:/scott_emp_

dept2.dmp

特别说明:备份文件的后缀名一般是.dmp,但是这不是必须的。

3、导出表的结构

exp userid=用户名/密码@数据库实例名 tables(表名1,表名2,..) file=备份路径 rows=n

例:exp userid=system/orcl@orcl tables(scott.emp,scott.dept) file=d:/scott_em

p_dept.demp rows=n

4、使用直接导出方式

exp userid=用户名/密码@数据库实例名 tables(表名1,表名2,..) file=备份路径 direct=y

例:exp userid=system/orcl@orcl tables(scott.emp,scott.dept) file=d:/scott_em

p_dept.demp direct=y

这种方式比默认的常规方式速度要快,当数据量大时,可以考虑使用这样的方法。

这时需要数据库的字符集要与客户端字符集完全一致,否则会报错。

导出方案
导出方案是指使用export工具导出一个方案或是多个方案中的所有对象(表、索引、约束..)和数据,并存放到文件中。

1、导出自己的方案

exp 用户名/密码@数据库实例名 owner=所有者 file=备份路径

例:exp scott/tiger@orcl owner=scott file=d:/scott_owner.dmp

2、导出其它方案

如果用户要导出其它方案,则需要dba的权限或者exp_full_database的权限。例如system用户就可以导出任何方案

exp 用户名/密码@数据库实例名 owner=(所有者1,所有者2,..) file=备份路径

例:exp system/orcl@orcl owner=scott,system file=d:/system_scott_owner.dmp

特别注意:如果用户的权限够大,则可一次性导出多外用户的方案。比如system。

导出完整数据库
需要dba的权限或者exp_full_database的权限。

exp 用户名/密码@数据库实例名 full=y file=备份路径

例:exp system/orcl@orcl full=y file=d:/orcl_full.dmp

导入表
导入自身表

imp 用户名/密码@数据库实例名 file=备份路径 tables=(表名1,表名2,..)

例:imp scott/tiger@orcl file=d:/emp_dept.dmp

特别注意:如果目的地有相同的表,则导入不成功。

导入其它方案的表
需要有dba权限或者imp_full_database的权限。

imp 用户名/密码@数据库实例名 file=备份路径 tables=(表名1,表名2,..) fromuser=方案名 touser=system

例:imp system/orcl@orcl file=d:/scott_emp_dept.demp tables=emp,dept fromuser=scott touser=system

注意:提示成功,但警告,表示此对象有scott导出,而不是当前用户。

导入方案
导入自身方案

imp 用户名/密码@数据库实例名 file=备份路径

例:imp scott/tiger@orcl file=scott_owner.dmp

导入其它方案

需要有dba权限或者imp_full_database权限

imp 用户名/密码@数据库实例名 file=备份路径 fromuser=方案名 touser=system

例:imp system/orcl@orcl file=scott.dmp fromuser=scott touser=system

导入完整数据库
需要有dba权限或者imp_full_database权限

imp 用户名/密码@数据库实例名 file=备份路径 full=y

例:imp system/orcl@orcl file=orcl_full.dmp full=y

———-参考《韩顺平玩转Oracle》

原文链接: https://blog.csdn.net/kepa520/article/details/78958029

oracle rman常用删除日志命令

crosscheck archivelog all;                             —>校验日志的可用性
          list expired archivelog all;                           —>列出所有失效的归档日志
          delete archivelog until sequence 16;                   —>删除log sequence为16及16之前的所有归档日志
          delete archivelog all completed before ‘sysdate-7’;    —>删除系统时间7天以前的归档日志,不会删除闪回区有效的归档日志
          delete archivelog all completed before ‘sysdate – 1’;  —>同上,1天以前的
          delete archivelog from time ‘sysdate-1’;               —>注意这个命令,删除系统时间1天以内到现在的归档日志
          delete noprompt archivelog all completed before ‘sysdate’;   —>该命令清除所有的归档日志
          delete noprompt archivelog all;                              —>同上一命令

范例:

robin@SZDB:~> export ORACLE_SID=GOBO1
robin@SZDB:~> rman target /

Recovery Manager: Release 10.2.0.3.0 – Production on Thu Jul 11 17:07:00 2013

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

connected to target database: GOBO1 (DBID=733951103)

RMAN> host;

robin@SZDB:~> cd /u02/database/GOBO1/archive/
robin@SZDB:/u02/database/GOBO1/archive> ls
arch_816906485_1_10.arc arch_816906485_1_12.arc
arch_816906485_1_11.arc arch_816906485_1_13.arc
…………

robin@SZDB:/u02/database/GOBO1/archive> rm -rf arch_816906485_1_10.arc arch_816906485_1_11.arc arch_816906485_1_12.arc
robin@SZDB:/u02/database/GOBO1/archive> exit;
exit
host command complete

RMAN> crosscheck archivelog all;
released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_9.arc recid=2085 stamp=817211151
validation failed for archived log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_10.arc recid=2086 stamp=817250793
…………..
validation succeeded for archived log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_90.arc recid=2166 stamp=820458049
Crosschecked 83 objects

RMAN> list expired archivelog all;

List of Archived Log Copies
Key Thrd Seq S Low Time Name


2086 1 10 X 20130604 11:05:51 /u02/database/GOBO1/archive/arch_816906485_1_10.arc
2087 1 11 X 20130604 22:06:17 /u02/database/GOBO1/archive/arch_816906485_1_11.arc
2088 1 12 X 20130605 19:30:53 /u02/database/GOBO1/archive/arch_816906485_1_12.arc

RMAN> delete archivelog until sequence 16;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK

List of Archived Log Copies
Key Thrd Seq S Low Time Name


2084 1 8 A 20130604 09:53:17 /u02/database/GOBO1/archive/arch_816906485_1_8.arc
……………..
2092 1 16 A 20130607 22:03:23 /u02/database/GOBO1/archive/arch_816906485_1_16.arc

Do you really want to delete the above objects (enter YES or NO)? yes
……………
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_16.arc recid=2092 stamp=817516861
Deleted 9 objects

RMAN> delete archivelog all completed before ‘sysdate-7’;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK

List of Archived Log Copies
Key Thrd Seq S Low Time Name


2093 1 17 A 20130608 00:01:00 /u02/database/GOBO1/archive/arch_816906485_1_17.arc
2094 1 18 A 20130608 18:00:17 /u02/database/GOBO1/archive/arch_816906485_1_18.arc
………..
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_72.arc recid=2148 stamp=819847035
Deleted 56 objects

RMAN> list copy of database archivelog all;

List of Archived Log Copies
Key Thrd Seq S Low Time Name


2149 1 73 A 20130703 23:17:13 /u02/database/GOBO1/archive/arch_816906485_1_73.arc
2150 1 74 A 20130704 22:00:19 /u02/database/GOBO1/archive/arch_816906485_1_74.arc
2151 1 75 A 20130704 22:04:40 /u02/database/GOBO1/archive/arch_816906485_1_75.arc
……………
2164 1 88 A 20130709 23:19:34 /u02/database/GOBO1/archive/arch_816906485_1_88.arc
2165 1 89 A 20130710 13:00:34 /u02/database/GOBO1/archive/arch_816906485_1_89.arc
2166 1 90 A 20130710 22:02:44 /u02/database/GOBO1/archive/arch_816906485_1_90.arc

RMAN> delete archivelog from time ‘sysdate-1’;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK

List of Archived Log Copies
Key Thrd Seq S Low Time Name


2165 1 89 A 20130710 13:00:34 /u02/database/GOBO1/archive/arch_816906485_1_89.arc
2166 1 90 A 20130710 22:02:44 /u02/database/GOBO1/archive/arch_816906485_1_90.arc

Do you really want to delete the above objects (enter YES or NO)? yes
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_89.arc recid=2165 stamp=820447373
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_90.arc recid=2166 stamp=820458049
Deleted 2 objects

RMAN> delete archivelog all completed before ‘sysdate – 1’;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK

List of Archived Log Copies
Key Thrd Seq S Low Time Name


2149 1 73 A 20130703 23:17:13 /u02/database/GOBO1/archive/arch_816906485_1_73.arc
…………………..
2164 1 88 A 20130709 23:19:34 /u02/database/GOBO1/archive/arch_816906485_1_88.arc

Do you really want to delete the above objects (enter YES or NO)? yes
…………….
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_88.arc recid=2164 stamp=820414835
Deleted 16 objects

RMAN> sql ” alter system archive log current”;

sql statement: alter system archive log current

RMAN> list copy of archivelog all;

List of Archived Log Copies
Key Thrd Seq S Low Time Name


2167 1 91 A 20130711 01:00:48 /u02/database/GOBO1/archive/arch_816906485_1_91.arc

RMAN> delete noprompt archivelog all completed before ‘sysdate’;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=1075 devtype=DISK

List of Archived Log Copies
Key Thrd Seq S Low Time Name


2167 1 91 A 20130711 01:00:48 /u02/database/GOBO1/archive/arch_816906485_1_91.arc
deleted archive log
archive log filename=/u02/database/GOBO1/archive/arch_816906485_1_91.arc recid=2167 stamp=820517964
Deleted 1 objects

脚本:

对于RAC环境或者ASM需要清除archive,使用shell脚本调用RMAN是比较妥当的方式

其次,如果你的archive位于闪回区,制定合理的保留策略,也可以让Oracle自动老化无用的归档日志

robin@SZDB:~/dba_scripts/custom/bin> more clean_arch.sh

+——————————————————-+

+ Clean archived log as specified time |

+ Author : Robinson |

+ Blog : http://blog.csdn.net/robinson_0612 |

+ Usage : |

+ clean_arch.sh $ORACLE_SID |

+——————————————————-+

#

!/bin/bash

——————–

Define variable

——————–

if [ -f ~/.bash_profile ]; then
. ~/.bash_profile
fi

if [ -z “${1}” ];then
echo “Usage: “
echo ” basename $0 ORACLE_SID”
exit 1
fi

ORACLE_SID=$1; export ORACLE_SID
$ORACLE_HOME/bin/rman log=/users/robin/log/rman.log <<EOF
connect target /
run{
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before ‘sysdate – 1’;
}
exit;
EOF
exit

RMAN备份保留策略设置相关命令zt

不管有没有用,先转过来再说。

转自 http://blog.sina.com.cn/s/blog_7c5a82970101g4s7.html

策略有两种,一种是基于恢复窗口策略的,一种是基于冗余策略的。

基于恢复窗口策略:

定义的是保留的备份文件必须要能保证恢复到近N天的任意时间点。

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;

让恢复窗口成为14天大小。

基于冗余策略:

定义的是每个文件至少要保留几份备份。

CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

定义每个文件至少要保留2份备份,如果有多于2个的备份,则按照时间排序,最晚的2个会被保留下来,其余的标注为obsolete,可以删除。

SHOW RETENTION POLICY;

查看保留策略。

REPORT OBSOLETE;

查看过期备份。

REPORT OBSOLETE RECOVERY WINDOW OF 28 DAYS;

临时指定以28天作为恢复窗口的策略,查看过期备份。

REPORT OBSOLETE REDUNDANCY 2;

临时指定以冗余度为2为冗余策略,查看过期备份。

DELETE OBSOLETE;

删除所有过期备份。

DELETE OBSOLETE REDUNDANCY 2;

临时指定以冗余度为2的冗余策略,删除过期备份。

DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS

临时指定以7天作为恢复窗口策略,删除过期备份。

CONFIGURE RETENTION POLICY TO NONE;

清空(禁用)保留策略。

SQL>SELECT * FROM V$BLOCK_CHANGE_TRACKING;

查看块跟踪日志的开启

如果没有开启,则需要开启

SQL>ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;

SQL>ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING ‘/home/oracle/bct.log’;