CHAPTER 1 Networking Overview
1. 网络结构
|
BS结构 |
CS结构 |
架构 |
Client -à Server 2层 |
Client -à Middle tier -à Server 3层 |
特点 |
客户端和服务器端使用相同的网络协议 |
客户端可以为瘦客户端或PC |
|
|
中间层实现负载均衡,一台可面对多台服务器。作用是在client和server中起到一个翻译的作用,比如两端的网络协议不同等 |
|
|
服务器端存储真实数据 |
举例 |
|
ie -à iis(web server) -à database server |
2. oracle网络方案 --- connectivity连接
oracle net services特点:
a. 使得client和server的连接与网络协议无关,oracle net services使用API针对不同协议提供不同的适配器,因此只要物理上可以连通,那么oracle实现连接不存在问题。
b. 使得client和server的连接与所在平台无关
c. 提高了GUI图形用户界面工具简化管理且有多种配置选项 (tnsnames.ora)
d. 提供了跟踪和诊断工具,且有最基本的安全保证
oracle的连接还可使用IIOP/HTTP协议实现,比如使用isqlplus 在web上直接连oracle server。因此在使用isqlplus时,需要输入的连接串名不是tnsnames.ora中配置的name servers而是指定服务器上监听到的instance name
HTTP:HYPERTEXT TRANSFER PROTOCOL
IIOP:INTERNET INTER-ORB PROTOCOL
3. oracle网络方案 --- Directory Services
Directory naming 目录命名:是使支持足LDAP协议的目录服务器来为网络命名的一种方法。它要求服务器端有兼容LDAP的目录服务器,客户端也要有LDAP的相关配置。
目录服务:就是OID(oracle internet directory).是兼容了LDAP的目录服务。集成在oracle9i,简化了网络管理,且提供了安全可依赖的目录结构
LDAP:Lightweight Directory Access Protocol 轻量级目录访问协议
4. oracle网络方案 --- scalability可量测性
法一:使用oracle shared server,以前称为:MTS多线程服务器。这个是针对系统资源有限仍可支持过多用户访问的方法,即多个用户共享同一个服务器进程,多个连接被一个适配器路由,提高了资源的利用率,降低了用户的使用效果
法二:使用CM(connection manager),就是所谓的中间服务器,oracle缺省是不安装的,若要使用需要增加额外的组件。CM的优点是:a.多功,即多个用户连接转化为一个连接访问数据库
b.使得client和server可以跨协议连接,即连接与协议无关
c.可以设置网络限制,控制可以访问数据库的用户有哪些
在1成功连接CM产生到server的2后,client产生的所有对 server的访问,通过CM的全部使用2。有效的降低了数据库的连接数
5. oracle网络方案 --- Advanced Security
条件:
在client和server端都要安装 Advanced Security组件
特点:
A.加密传输数据:client -à data -à 加密 -à network transfer -à 解密 -à 服务器
B.授权用户访问:通过第三方的设备和SSL(Secure Sockets Layer)确定用户的访问权限
C.数据完整性:在网络传输过程保证数据的完整性
Oracle的普通安全保证来自于:oracle net and firewalls。放火墙有2种,一种是基于供应商的防火墙,条件是需要使用CM(connect manager),另外一种是stateful packet的防火墙
6. oracle网络方案 --- accessibility
不同数据库系统间的访问:使用透明网关,实现在不同数据库系统下,用户可以无缝透明的相互访问
外部程序的访问:
A. oracle的监听器可以监听外部程序的呼叫,在listen.ora文件中,”KEY = EXTPROC”来实现oracle服务
器对外部程序呼叫的监听。如果客户端需要调用外部程序,也需要开启监听
B. PLSQL可以调用外部程序3GL(第三代编程语言),比如JAVA等
知识点:
Oracle net services / IIOP and HTTP connectivity / oracle internet directory
oracle shared server / connection manager / oracle advanced security
heterogeneous services
CHAPTER 2 Basic Oracle Net Architecture
1. oracle的连接类型有2种:
client-server application:可使用任意网络协议
web application connection:使用TCP/IP协议
2. Client-Server Application Connection:No Middle-Tier
Forms/sqlplus 发出命令,用OCI(oracle调用接口)传给TTC
TTC(two tasks command)完成字符集和数据类型的转换,传到oracle net
Oracle net对刚才的命令打成逻辑包,传到OPS
OPS为协议适配器,将刚才的逻辑包转化为物理包,通过网络协议船给server
上面图执行的顺序是个U型,由client到server,再由server到client
3. Web Application Connections有2种实现方法:
A. 使用web server作为中间层与JDBC oracle call interface驱动或瘦JDBC配置
B. 直接连接database server,通过IIOP或HTTP协议。比如isqlplus等
4. Web Application Connection:
JAVA Application Client |
JAVA Applet Client |
|
|
这个与client-server application connection几乎一样,只是把SQLPLUS工具改为了JAVA工具放在中间层,而用户使用是从WEB上调JAVA。而在JAVA与数据库连接中需要一个JDBC接口
相对于oracle server而言,middle-tier为一个client端,因此连接方式很多,比如TCP/IP等。中间层的作用就是:翻译,负载均衡,网关
5. Web Application Connection:No Middle-Tier
使用该类连接方式的条件是:服务器端必须支持HTTP和IIOP。即在数据库上启动相应的服务
该类连接典型的例子就是:isqlplus
使用isqlplus
在Windows上:启动ORACLE的HTTP服务
在Linux上:启动isqlplus服务,即敲入:[oracle@sating bin]$isqlplusctl start
然后在web browser上敲入地址:http://数据库服务器IP:isqlplus的端口号/isqlplus
eg. http://10.1.8.177:5560/isqlplus
注:isqlplus的端口号可以在$ORACLE_HOME/install/portlist.ini中查看到,该文件是oracle提供的所有默认端口号的列表,isqlplus默认是:5560
CHAPTER 3 Basic Oracle Net Server-Side Configuration
1. sqlnet.ora:网络配置概要文件,在服务器端和客户端都有
tnsnames.ora:以local name本地命名方式实现数据库连接时,在客户端存在的用来解析service_name的文件
listener.ora:是个耳朵的功能,监听客户端的连接请求,在服务器端存在的,记录 server端登记的service_name
2. 监听的实现方式
当client端发出一个连接请求,且client发送的service_name和server端登记的service_name匹配时,listener会根据情况实现2种监听方式:
A. 启动一个独占服务器进程process “Bequeath Session”
B. 把该连接重定向到一个已经启动了的process,(该process在DB启动时启动),常用于MTS
“Redirect Session”
A,B两种方式的第1步和client端配置的命名方法有关,常用的都是服务名service_name解析,。A类从第4步开始通讯,B类从第5步开始通讯。
3. 配置listerner:静态配置法 或 动态配置法
|
static service configuration |
Dynamic service configuration |
特点 |
A. 应用与8和更早的版本 B. 需要服务器端有listener.ora文件 C. 需要OEM和其他一些oracle提供的配置工具 |
A. 不需要服务器端有listener.ora文件 B. 该类监听使用PMON进程监控进程, C. 参数instance_name和service_name必须指定 |
4. 静态配置法的listener.ora文件
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = sating)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = BOSS)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME = BOSS)
)
)
---LISTENER为oracle默认的监听名称
–--HOST为主机名,如果使用的是TCP/IP协议,也可写服务器IP地址
---PORT=1521是oracle默认分配的标准监听器的端口号,也可使用别的端口号
---SID_LIST_LISTENER代表名为LISTENER的监听器所服务的DB,可同时服务多个DB
---GLOBAL_DBNAME的值可以任意定,因为它是作为别名存在的,代表服务器端的service_name,只要client端在配置tnsnames.ora中service_name的值是这个listener上的global_name的值,连通就没问题。一般写 SID.DOMAINNAME。但ORACLE_HOME和ORACLE_SID必须写准确信息
---ORACLE_HOME就是ORACLE_SID指定DB的$ORACLE_HOME参数值
5. 动态配置listener
步骤一:输入lsnrctl,查看输出的缺省监听名。(如果要查看非缺省监听器的状况命令是:lsnrctl+监听器名)
STATUS of the LISTENER
------------------------
Alias LISTENER
步骤二:A. 如果缺省的监听器名为:LISTENER,则确定参数service_name和instance_name设置了正确的值
B. 如果缺省的监听器名不为:LISTENER,则不但要确定参数service_name和instance_name设置了正确的值,还要指定local_listener参数。如果当前是共享服务器,还需要指定参数dispatchers
步骤三:重起数据库即可
注意:
A. 此时没有listener.ora文件,也没有手动输入lsnrctl start,因为oracle在启动时通过PMON直接启动监听器,可使用lsnrctl status查看监听器的状况
B. 在client端配置相应的tnsnames.ora,此时service_name为server端指定的参数service_name的值
C. service_name和instance_name可以任意指定,但必须这2个参数的值相同。在连接时tnsnames.ora,中service_name给相应值即可
D. 无论动态注册还是静态注册,client端都需要有相应的内容记录在tnsnames.ora中
E. 动态注册,在数据库启动后每一分钟注册一次
6. listener的注意事项
A. listener只在发出连接时有用,一旦连接上了,就不再起任何作用,此时client-server的连接只和服务器分配的process有关。
B. 一个listener可以服务多个DB。多个listener也可以服务一个DB,此时起到负载均衡的作用当一个listener忙的时候可使用另外一个
C. 在oracle网络这一块,有2个别名,可任意给值。一个就是listener.ora中的global_name,只要与tnsnames.ora中的service_name值相同即可。另外一个就是tnsnames.ora中指定的连接串的串名,只要在连接数据库时@后写该串名即可(eg.sqlplus s/s@satingphoenix)。
D. listener.ora文件只在启动listener时有用,一旦启动后,删除该文件也不影响oracle的连接,但无法重起listener
E. 静态配置监听器需要在数据库启动后,手工启动监听器,数据库关闭时,手动关闭监听器
动态配置监听器,在数据库启动时自动启动监听器,数据库关闭时自动关闭监听器
7. JVM:JAVA的虚拟机
8. LSNRCTL命令
LSNRCTL>help
LSNRCTL>show + 参数名
LSNRCTL>set + 参数名 + 值
总结:
监听的实现方式有2种,一个是有监听启动独立进程,另一种是有监听使用共享进程
监听的配置方法有2种,一个是有动态配置,使用参数service_name和instance_name来解析服务名,使用PMON
进程管理监听进程。另一个是静态配置,使用listener.ora文件配置监听,其中的global_name来用于解析服
务名,需要DBA手动开启和关闭监听进程
CHAPTER 4 Basic Oracle Net Client-Side Configuration
1. 客户端的网络配置有很多方法,常见的有2种配置方法:host naming 和 local service name(tnsnames)。当前客户端可使用的方法,定义在sqlnet.ora中 ”name.directory_path = (HOSTNAME,TNSNAMES)”
|
Host naming |
Local service name(tnsnames) |
区别 |
主机名解析法,在server端实现解析 |
本地服务器名解析法,在client端实现解析 |
实现条件 |
A.client端和server端的连接协议为TCP/IP,且端口号为1521 B.主机名是通过DNS或者是客户端上/etc/hosts文件中记录的服务器IP地址来解析的 C.不可使用CM和一些oracle的高级安全设置 |
无 |
连接 |
conn s/s@”主机名” |
Conn s/s@在tnsnames.ora中配的串名 |
要求 |
A. 在客户端和服务器端的sqlnet.ora中指明解析方法为name.directory_path = (HOSTNAME) B. client端不需要tnsnames.ora文件,但需要在/etc/hosts文件中写请IP和主机名的对应关系 C. server端的listner.ora文件中,必须指明主机名 (global_dbname = 主机名)
|
A. 在客户端和服务器端的sqlnet.ora中指明解析方法为name.directory_path = (TNSNAMES) B. client端需要tnsnames.ora文件,该文件中service_name需要与server端的listener.ora中的global_name相对应,因为是根据这个名字进行的解析。而连接串名可自己定义 C. 补充,在oracle 8前,tnsnames.ora中的service_name为DB_SID D. Tnsname.ora中配置的端口需要与server端的listener.ora中一致 |
总结:
oracle的网络配置策略需要从3个方面进行定义,首先确定监听是静态的还是动态的,其次确定命名的解析方法是主机名解析方法还是本地解析方法,如果是本地解析方法需要再去配置本地解析的命名文件(tnsnames.ora)
CHAPTER 5 Usage And Configuration Of The Oracle Shared Server
1. oracle shared server在9I前被叫做MTS,多线程服务器。作用是在同等的资源下,支持更多的并发访问
2. 独占服务器模式 与 共享服务器模式比较
|
共享服务器模式 shared server |
独占服务器模式 dedicated server |
连接方式 |
User process -à dispatcher -à shared server process -à SGA + background process
Oracle服务器通过dispatcher调配器为用户进程分配一个共享的服务器进程 |
User process -à server process -à SGA + background process
Oracle服务器为每个用户连接分配一个专用的服务器进程 |
SGA
|
shared pool and other memory structure + user session data + cursor state |
shared pool and other memory structure
用户连接的数据保存在PGA中 |
PGA |
statck space 用户连接的数据保存在SGA中,因此该模式需要更大的SGA内存 |
statck space + user session data + cursor state |
3. 共享服务器模式优点:
减低访问instance的进程数量,增加用户的并发数,使数据库服务器负载均衡,减少空间的服务器进程,减少内存的消耗和系统负担
4. connecting
1发出connect连接请求到listener,listener确定连接是否合法
2listener返回关于dispatcher的信息,指明那个dispatcher是可使用的
3连接dispatcher,只有再由dispatcher分配shared server process
注意:若listener为配置为共享服务器模式,但没有启动dispatcher,则连接失败。
5. Processing a request
1连接到空闲的dispatcher
2由dispatcher把command放到请求队列里,等待空闲的server process
3command被空闲的server process 接受并处理
4把处理结果传给响应队列
5响应队列再传给空闲的dispatcher
6dispatcher把结果返回给用户
注意:请求队列对于server process是共享的
响应队列对于server process是独占的
6. 配置共享服务器
服务器端:定义dispatchers和shared_servers参数
SQL>alter system set
dispatchers=’(PROTOCOL=TCP)(SERVICE=SS)(PROTOCOL=TCP)(DISPATCHERS=2)’;
为service_name=’SS’的监听服务启动2个可以使用TCP/IP协议连接的dispatchers
SQL>alter system set dispatchers=’(PROTOCOL=TCP)(DISPATCHERS=2)’;
为所有监听服务启动2个可以使用TCP/IP协议连接的dispatchers
SQL>alter system set shared_server=6;
为共享服务器分配6个shared server processes
客户端:修改tnsnames.ora的连接解析方式
当用户使用SS连接串连接时,使用的是共享服务器进程
当用户使用SATING连接串连接时,使用的是独占服务器进程
这样,一个service_name,根据tnsnames.ora中的解析方式不同,所使用的服务器使用方式也不一样
SS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.8.177)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = ss)
)
)
SATING =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.8.177)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ss)
)
)
7. server端还有一些其他的参数可以设定
max_dispatchers:最多的dispatchers数量,上面dispatchers参数设定的是启动了多少dispatchers,如果max_dispatchers为5,那么最多可启动4个,若试图启动5个则报错ORA-00112
max_shared_server
circuits:内路和外路可使用的网络连接的总共虚拟路线的条数
shared_server_sessions:作为共享服务器方式连接上的session的最大数,
参数sessions - 参数shared_sever_sessions = 可以独占方式登陆的总session数
相关的一些参数:
large_pool_size:在共享服务器中,独立分配出的一块内存区域
session:控制可用独占方式登陆的session数量
8. 查看登记到listeners的dispatchers的情况:lsnrctl service
9. 可查看的数据字典
v$circuuit |
有几个共享服务器的连接,该view就有几条记录 |
v$shared_server |
v$dispatcher |
v$shared_server_monitor |
v$queue |
v$queue |
v$session |
4. 注意:
A.共享服务器模式和独占服务器模式是可以同时存在的
B.在使用as sysdba选项连接数据库服务器时,只能使用独占服务器模式登陆
C.S001,S002… … 代表shared server processes。 D001,D002… … 代表着dispatchers
CHAPTER 6 Backup And Recovery Overview
1. MTBF:mean-time-between-failures --- 出错的频率
MTTR:mean-time-to-recovery --- 恢复所需要的时间
2. 注意:
A.当大量IMP数据时,将选项resumeable=Y,保证当表空间不足时,还可继续导入数据
B. 对于用户进程产生的错误,PMON进程会自动去处理,回滚+释放锁和资源
C.alter system kill session ’SID,Serial#’;
D. point-in-time recovery:不完全的时间点恢复
E.logminer : 确定误操作的时间点,执行对象级的恢复
F.flashback : 借助于回滚段的data产生快照,该data保留时间是undo_retention参数设定,单位秒,恢复时借助dbms_flashback
G.实例失败的恢复:不需要DBA特别的做什么,在重起DB时,DB自动进行recovery。重起DB后应查看alert.ora文件,确定实例失败原因,background_dump_dest参数定义该文件路径
H.媒体失败的恢复:依据备份策略
3. 要制定针对备份的,周期性测试,保证备份是有效的
CHAPTER 7 Instance And Media Recovery Structures
Large pool:
如果不特别配置,该区域来自SGA,但可通过large_pool_size来指定其独立存在于内存之中。用来进行oracle的一些备份和恢复的操作。同时也负担部分I/O服务进程和存放共享服务器的session
Control file:
应该放在instance和database之间,她起到桥梁的作用。控制文件应进行备份,做多个镜像
Database buffer cache, DBWn, datafile:
DBWn中的n可为0--9,a--j,可启动最多20个数据库写进程,具体启动了几个可查看v$bgprocess中PADDR!=0的,与参数db_writer_processes有关,缺省为1
Redo log buffer, LGWR, Redo log file:
LGWR只有1个进程,不能多分配。Redo log files应分成多个group,LGWR是一个group一个group的写日志文件的,每个组中的日志文件互为镜像大小一致,应尽量把每组的镜像放到不同的硬盘上。见下图
CKPT Process:
向datafile头和control file写入SCN
法1. alter system checkpoint;
法2. 设置参数log_checkpoint_interval, log_checkpoint_timeout, fast_start_io_target,
fast_start_mttr_target (mttr:mean-time-to-recovery)
法3. 一些SQL,比如:alter tablespace … …
ARCn process, archived log file:
ARCn中的年n可以是0--9,a--t,可同时启动30个归档进程。启动的进程可查看v$bgprocess中PADDR!=0的,或是v$archive_processes中status=’ACTIVE’的
DBWn |
Database buffer cache à DBWn à datafiles |
CKPT |
Datafile header + control file + redo log file |
LGWR |
Redo log buffer à LGWR à redo log files |
ARCn |
Redo log file à ARCn à archived log files + control file |
1. 数据库同步
除了offline和read-only的数据文件外,所有数据文件必须同步,否则数据库无法打开
依据checkpoint数据库进行周期性的文件同步
同步信息记录在redo log file中,以便在数据库进程恢复时使用。在recovery的过程中,保持DB同步需要使用redolog,这个使用redolog的过程是oracle自动完成的。若DB是意外或非正常关闭,在启动过程中需要进行recovery
2. 实例恢复的过程 instance recovery
|
步骤 |
说明 |
1 |
数据文件不同步 |
原因:DB非正常关闭 |
2 |
Roll forward (redo) 前滚 |
执行Redolog中commit的数据 |
3 |
DB此时可以open |
注意:此时的数据文件中存在着未提交的和已提交的数据,数据文件并不一定同步了。这种redo后既可OPEN DB的方式与其他数据库系统不同 |
4 |
Roll back (undo) 回滚 |
DB打开后才有undo,此时DB执行的是按需回滚,即有对undo数据进行访问时才对data进行回滚。 |
5 |
Committed data files |
数据文件一致 |
3. 优化实例恢复 --- checkpoint频率越高,recovery的时间越短
法1. 设置初始化参数,来控制需要恢复的数据块和需要使用的重做日志的数量
Fast_start_mttr_target:如果该参数值为300,则发生实例灾难recovery必须在300秒内完成
Log_checkpoint_timeout:checkpoint之间最长的时间间隔。单位:秒
Log_checkpoint_interval:事务量=日志块,定义多大的事务量之间必须发生checkpoint.单位:块
法2. 设置重做日志的大小,来控制checkpoint的频率
法3. 使用SQL强制checkponint
4. 优化roll forward步骤
提高recovery块的并行度,设置recovery_parallelism.缺省为0,这个参数和CPU数有关。
等级普通 - 0 ,等级中度 – 2*CPU数 , 等级高度 – 4*CPU数
5. 优化roll back步骤
在数据库open后,根据用户访问来undo的data的方法叫做:on-demand。
Rollback操作实际是通过SMON进程进行的,可通过SMON并行完成rollback. 回滚信息来自回滚段
并行度可通过:fast_start_parallel_rollback设置,缺省为0,这个参数和CPU数有关。
等级普通 - 0 ,等级中度 – 2*CPU数 , 等级高度 – 4*CPU数
6. 监控并行回滚的视图:v$fast_start_servers --- 启用产生的进程数
v$fast_start_transactions --- 完成的事务数
总结:
orale的后台进程DBWn, CKPT, LGRW, ARCn都向哪里写记录
影响recovery的速度的因素:checkpoint的频率,频率越高,所需时间越短
实例恢复的过程。Redo à DB open à Undo on-demand
CHAPTER 8 Configuring The Database Archiving Mode
一. 日志模式与备份策略
|
非归档模式 |
归档模式 |
备份策略 |
只有Offline的cold backup有效 |
1. online hot backup 2. 部分备份,将对象设置为备份模式,进行再县热备 eg.alter tablespace users begin/end backup; |
恢复方式 |
只能基于所做的cold backup做完全恢复,不可做部分恢复 |
可做不完全恢复,部分恢复 |
二. 配置归档模式
1. 启动归档
SQL> shutdown immediate / normal / transaction; ---正常,干净的关闭DB
SQL> startup mount; ---读spfile + control file
SQL> alter database archivelog / noarchivelog;
SQL> alter database open;
full database backup ---DB模式改变,以前的备份全部失效
2. 自动归档与手动归档:
在10G里已经废除了log_archive_start参数,全部为自动归档模式,不可设置为手工归档模式,但可以对指定日志进行手工归档
eg.alter system archive log current;
eg.alter system archive log sequence 088;
3. 归档进程
10G中归档进程最多可有30个,ARCn中的n值可以为0—9,a—t。可通过参数log_archive_max_processes动态的激活后台归档进程的数量
Eg. alter system set log_archive_max_processes=3;
4. 归档日志存放地点
法一:
10G中,默认的归档日志的位置是:$ORACLE_BASE/flash_recovery_area/SATING/archivelog/下具体日期的子目录里。
法二:
设置log_archive_dest_n参数,定义多个归档路径。注:多个目标路径不可重复
本地归档 |
log_archive_dest_1 = ’location=/u02/oradata/archive’ |
远程standby DB归档 |
log_archive_dest_1 = ’service=standbyDB串名 LGWR’ eg. log_archive_dest_1 = ’service=standby_db1 LGWR’ |
控制归档目标路径是否启动或临时关闭:log_archive_dest_n与log_archive_dest_state_n一一对应
Alter system log_archive_dest_state_1 = defer / enable;
注:即使在定义该路径是选择的是mandatory,仍可使用参数关闭该路径
5. 归档日志成功与否的设定
法一:
Mandatory |
log_archive_dest_1 = ’LOCATION=/u02/archive mandatory reopen=600’ |
归档到/u02/archive目录的归档进程必须完成,若不成功,重试时间间隔为600秒.若一直未成功,系统挂起只可读 |
Option |
log_archive_dest_1 = ’LOCATION=/u02/archive optional’ |
归档到/u02/archive目录的归档进程不是必须完成,失败就忽略 |
法二:
设置log_archive_min_succeed_dest参数,确定归档至少要有几个成功的。如果所有指定的归档目标全部为mandatory那么该参数无意义
Eg.SQL>Alter system set log_archive_min_succeed_dest=3;
注:log_archive_min_succeed_dest优先级最高,log_archive_dest_n和log_archive_dest_state_n都必须在满足该参数的情况下设定
Eg. log_archive_min_succeed_dest=3,而log_archive_dest_n只指定了3个目标路径,则不可把其中一个路径取消,或把对应的log_archive_dest_state_n值设为defer。
online redo logs可以被重用的条件:
A.所有mandatory的归档目标,全部完成
B.归档完成个数,必须大于或等于log_archive_min_succeed_dest的值
6. 归档日志名称格式:设置参数 --- log_archive_format
%S:序列号 %T:线程号
三. 获得归档日志信息
v$archived_log v$archive_dest v$archive_processes v$log_history v$database
SQL>archive log list
四.关于9I中归档的补充
启动实例前设置归档模式为自动归档方法:设置log_archive_start=TRUE和log_archive_max_processes
启动实例后设置归档模式为自动归档方法:SQL>alter system archive log start / stop to ‘目录’;
或SQL>archive log start / stop;
如果设置归档模式为手工归档,若日志满了,但仍未进行归档,则系统会停顿,只能读不能写
四. 总结
CHAPTER 9 Oracle Recovery Manager Overview And Configuration
一. RMAN的特点及结构
特点:
A.可单独有效备份:数据库,表空间,数据文件,控制文件,归档日志
B.可存储经常使用的备份/恢复脚本 (只在catalog中有效)
C.可执行数据块级的备份,跳过文件中未使用的数据块,节省备份空间
D.可检查备份的数据块是否损坏
E.可执行数据块级的增量备份
F.可提高备份的性能,通过:增加自动并行度,产生少量的redolog,限制备份使用的I/O,可使用磁带流备份
除上之外,RMAN还可以在OS级别做物理备份,或逻辑备份
结构:
A.RMAN的操作是作为DB的server process完成的
B.Recovery catalog DB可以独立放在一台服务器上,也可与target DB放在一起
C.RMAN的使用:可以是命令行的交互界面,也可使用enterprise manager图形界面
二. RMAN的数据源仓库(RMAN Repository)
RMAN Repository就是记录target DB的数据结构和备份情况的信息。
RMAN必须知道target DB的数据结构才可进行备份和恢复。
target DB的数据结构信息来源:
1.将多个target DB的数据结构信息存储在Recovery catalog DB中,避免每次读target DB的control file
2.直接读target DB的control file获得结构信息,再备份。同时把备份情况信息记录到control file中。与使用catalog DB不同的是,不可记录rman的备份恢复脚本,即在使用该方式连接RMAN时不可创建脚本
control_file_record_keep_time参数定义,RMAN的记录在control file中保存的时间。单位:天
三. RMAN的通道(RMAN Channel)
1. channel的分类
Channel根据备份到的物理目标不同分为2类:disk 和 sbt_tape。默认为disk channel
2. 手工分配channel 与 自动分配channel
|
手工分配channel |
自动分配channel |
相同点 |
1. backup,copy,restore,recover这些RMAN的操作,需要至少1个的通道完成 2. 每分配一个通道,相当于开启了一个target DB的server process 3. 通道数量影响RMAN操作并行度 |
|
不同点 |
1. 在一次RMAN操作中,指定多个channel到多种media的多个location 2. 针对特别的RMAN需求,设置特别的使用方式,比如:备份位置,格式,大小等 |
不需要特别指定,一切RMAN操作全部使用默认的设置 |
命令 |
run{ allocate channel c1 type disk format=’/u02/archive/c1.bak’; allocate channel c2 type sbt_tap format=’tap/archive/c2.bak’; backup tablespace users; } |
配置默认通道的并行度: RMAN>configure device type disk parallelism 2; |
配置默认备份设备类型: RMAN>configure default device type to sbt; |
||
配置默认文件的格式(路径和文件名): RMAN>configure channel device type disk 2>format=’/u02/archive/%U’; |
||
配置默认的一个单独备份文件的大小: RMAN>configure channel device type disk 2>maxpiecesize 2G; |
四. RMAN的MML层(MML:Media Management Library)
MML:介质管理层 / 介质管理库
简单的说,就是RMAN与保存备份文件的介质之间的驱动或适配器
五. RMAN的连接方式
不使用catalog DB |
rman target sys/sating@sating |
使用catalog DB |
rman catalog username/passwd@catalogDB target sys/sating@sating |
必须使用SYSDBA权限用户登陆target DB
六. RMAN的命令类型
A.stand-alone:不可在run{}中出现,RMAN>后直接执行
B.job:必须在run{}中出现,不可在RMAN>后直接执行
C.以上2者皆可
七. RMAN的可默认配置的环境 (使用configure命令)
A. 自动使用的通道类型(disk/sbt_tap)
B.备份的保持策略retention policy (可从多个角度定义,但多种策略不共存)
Eg.redundancy 3 保留3份冗余 / recovery window of 7days恢复时间窗为7天
C. 指定备份文件镜像的数量
D.限制备份的大小(maxsetsize)
E. 去掉一个表空间从备份中
F.启动或关闭备份的优化设置
用show all;所显示出的均为默认设置,都可用configure命令修改
六. RMAN的命令 (所有的关键字可以通过show all查找到)
configure |
配置channel |
RMAN>configure channel device type disk 2>format=’/u02/rman/%U’; |
配置retention policy冗余策略 |
RMAN>configure retention policy to 2>redundancy 2;或recovery window of 7 days; |
|
配置多个备份集镜像 (对datafile的磁盘备份有2个拷贝,互为镜像) |
RMAN>configure datafile backup copies for 2>device type disk to 2; |
|
配置备份优化 |
RMAN>configure backup optimization on / off; |
|
清楚人为配置,使用默认配置 |
RMAN>configure retention policy clear; RMAN>configure channel device type sbt clear; |
show |
显示channel配置 |
RMAN> show default device type; |
显示retention policy配置 |
RMAN>show retention policy; |
|
显示备份集镜像数量 |
RMAN>show datafile backup copies; |
|
显示备份集大小 |
RMAN>show maxsetsize; |
|
显示备份优化选项配置 |
RMAN>show backup optimization; |
|
显示所有 |
RMAN>show all; |
list |
显示数据文件的备份集/镜像 |
RMAN> list backup/copy of datafile ’/F1.dbf’; |
显示指定表空间的备份集/镜像 |
RMAN>list backup/copy of tablespace users; |
|
显示归档log的备份集/镜像 (可指定时间段) |
|
|
显示数据库的备份集/镜像 |
RMAN>list backup/copy of database; |
|
显示incarnation |
RMAN>list incarnation; |
|
report |
报告数据库所有模式 |
RMAN>report schema; |
报告需要3个增量备份才可恢复的 |
RMAN>report need backup incremental 3; |
|
报告需要3天的备份才可恢复的 |
RMAN>report need backup days 3; |
|
报告需要3个冗余才可恢复的 |
RMAN> report need backup redundancy 3; |
七. RMAN使用的PLSQL包
RMAN是使用PLSQL包,来进行在target DB和recovery catalog D间交互的
dbms_rcvcat dbms_rcvman
八. 使用RMAN需要考虑
A.DB的内存资源,配置更大的share pool或large poll。配置更多的server process
B. 为用户设置SYSDBA权限,保证该用户有在备份介质上写的权限
C.把password文件备份
九. 补充
备份集(backup set),备份片(backup piece)
一个备份集可以只有一个备份片,也可有多个备份片
CHAPTER 10 User-Managed Backups
一. 用户管理备份的介绍
A.整库备份:归档模式目标DB打开或关闭时,备份所有数据文件和控制文件
非归档模式目标DB关闭时,备份所有数据文件和控制文件
B.部分备份:单独备份指定表空间 或 指定数据文件 或 控制文件
C.一致备份:DB在一致状态下的备份,比如shutdown immediate后,或DB mount上。冷备份
D.非一致备份:DB必须在归档模式下,才可进行。该类备份恢复时借助日志来完成DB的一致。热备份
注:
A.DB只有在归档模式,才可在OPEN的状态下备份,否则备份无效
B.一致或非一致备份,指的是备份文件的时间点是否一致
C.用户管理的备份,backup和restore都是在OS级完成的,使用OS命令即可。只有recovery时使用DB的SQL
D.需要备份的文件信息,可查看v$datafile ,v$controlfile ,v$logfile ,dba_data_files视图
二. 2种备份方式
1. 冷备份:关闭数据库后做的备份,与DB是否为archive无关
需要备份5 类文件:datafiles + controlfile + redologfiles + parameterfile + passwordfile
如果DB是在archive mode,则无须备份redologfiles,因为归档进程自动备份了该文件
2. 热备份:数据库运行中做的备份,DB必须是archive模式,且归档日志不可有断点
A.优点:适用于24*7的系统,且可做表空间级和数据文件级的备份,更加灵活
B.备份步骤:
SQL>alter tablespace users begin backup;
SQL>host cp ’文件’ to ’指定目录’ ---也可以在OS级COPY
SQL>alter tablespace users end backup;
SQL>alter system switch logfile;
注:
a.无论是表空间级(即该表空间包含的数据文件全部备份),还是数据文件级(一个或多个指定的数据文件的备份),都必须将备份的文件所在的TBS设置成备份状态。
b.表空间在进入备份状态后,实际在DB内部就停止了向该TBS写的操作,外界全部的操作都记录在日志
c.如果在备份完后没有及时将TBS退出备份状态,若日志写满或意外使DB关闭,则该次备份失败,且需要对备份状态中的表空间(或单个数据文件)进行recovery,即退出备份模式
SQL> alter tablespace test2 begin backup;
SQL> startup force; --- 模拟意外,此时DB可以到mount状态
ORA-01113: file 6 needs media recovery
ORA-01110: data file 6: '/u02/oradata/sating/SATING/datafile/o1_mf_test2_2gv7jrz0_.dbf'
SQL> alter tablespace test2 end backup;
Tablespace altered.
9I前只能对单个文件一一执行end backup
SQL> alter database datafile 6 end backup;
SQL> alter database open;
Database altered.
d.可以查看正在备份状态的表空间:v$backup
C. 只读表空间的备份
a.表空间进入read-only状态后,相关的数据文件信息就都不会变了,包括header的SCN号。因此,只读状态的表空间只需要备份一次即可。
b.一旦该表空间由read-only变为read-write后,则需要再次对该TBS进行常规的热备份
c.要保证在control file中该表空间被正确记录了其为read-only状态
D.表状态为logging和nologging备份的差异
Logging: 所有表的改变被记录在redolog中,只要从最近的备份文件恢复即可
Nologging:表的改变被最小化的记录到redolog中,因此备份时不止需要最近的备份,还需要额外的备份。
比如:数据sqlldr时为direct方式或imp时没写日志,则导完数据后需要立即对该表备份
补充:create table … … nologging;不是所有对该表的操作都不写日志,只是sqlldr为direct时不写日志
E.手工备份控制文件
法1:在指定目录建立一个二进制的备份文件
SQL>alter database backup controlfile to ’/home/oracle/control.bak’;
法2:在user_dump_dest参数指定的目录下,生成控制文件的文本备份,内容是生成该控制文件的SQL
SQL>alter database backup controlfile to trace; --- 似乎在一个SESSION中只可生成一次控制文件的文本备份
F.备份参数文件 在DB没有启动时就可以备份,只需要SYSDBA连接上即可
法1:在原initSID.ora上用spfile的内容覆盖
SQL>create pfile from spfile;
法2:在指定文件生成spfile的文本文件备份
SQL>create pfile=’/home/oracle/init.ora’ from spfile;
三. 检查备份文件的有效性:DBV命令
该命令为OS级的命令,可对数据文件(无论online/offline)或备份文件的有效性进行检查,确定坏块
注意:若DB使用的块大小与OS级的块大小不一致,在检查时必须指定blocksize的值
Eg.
[oracle@sating ~]$ dbv file='/u02/oradata/sating/sysaux01.dbf'
四.总结
其实备份主要是针对datafile和controlfile而言的,因为参数文件和密码文件是可以再次生成的。而日志可以
通过归档进程自动完成。而datafile的备份可以从2个角度来做,一个是指定的单个或多个datafile,另一个是
以表空间为一个整体备份其下所有的datafile,本质是相同的且都需要把所在表空间设置成备份模式。
热备份与冷备份区别
TBS在只读状态与TBS在备份状态区别
备份controlfile与备份参数文件
检查文件有效性
CHAPTER 11 RMAN Backup
一.RMAN备份的特点
1. RMAN是一个server-managed备份机制,一个channel就是一个server process。
2. RMAN可备份:整个DB,TBS级,数据文件级,控制文件,归档日志
3. RMAN既可在数据库archive mode,也可在noarchive mode进行备份,
共同之处是:DB必须都在mount状态下进行,因为RMAN必须知道DB的结构读controlfile
不同之初是:在noarchive mode时,必须进行全库备份(rman>backup database;)。
在archive mode可有选择的进行备份
4. 关闭DB的备份:必须启动到mount。 备份内容:数据文件,控制文件,归档日志
启动DB的备份:TBS不可在备份状态。 备份内容:数据文件,控制文件,归档的在线日志
5. RMAN备份的分类:image copy –- 物理备份,类似于用户管理的备份,把文件A copy到B处
backup set –- 逻辑备份,把有效的内容压缩成备份集,备份到指定的路径用指定的名字
Eg. Rman>copy datafile ’/u02/oradata/user01.dbf’ to ’/home/oracle/user01.dbf’;
Rman>backup datafile ’/u02/oradata/user01.dbf’ format ’/home/oracle/%U.bak’;
二.RMAN的backup命令(逻辑备份)/(内容的备份)
1. backup set 与 backup piece
|
Backup sets |
Backup piece |
特点 |
A. 由backup命令产生 B. 可以保存在disk上或tape上 C. backup命令相当于把文件有效内容压缩成备份集,而restore命令相当于把备份集解压 D. 备份集不包含没有使用过的数据块 |
A. 一个备份片内的数据块可来自一个或多个数据文件 B. 一次backup中,一个datafile可以跨备份片存储 |
联系 |
一个backup set可包含一个或多个backup piece 一个backup piece只可属于一个backup set |
2. maxsetsize,maxpiecesize,filesperset的关系
|
例子 |
结论 |
1 |
RMAN> backup 2> datafile '/u02/oradata/sating/users01.dbf' 3> format '/home/oracle/%U.BAK' 4> maxsetsize=100M;
RMAN-06183: datafile or datafile copy larger than MAXSETSIZE: file# 4 /u02/oradata/sating/users01.dbf |
Maxsetsize定义:单个backup set的大小 因此如果一次backup只产生一个备份集的话,那么该备份集最大要满足maxsetsize 一次backup可产生多个备份集,默认产生1个 |
2 |
RMAN> run{ 2> allocate channel c1 device type disk maxpiecesize = 100M; 3> allocate channel c2 device type disk maxpiecesize = 100M; 4> backup datafile '/u02/oradata/sating/users01.dbf' 5> format '/home/oracle/rman/DB_%U.bak' 6> filesperset=2;} 产生一个备份集,里面有4个备份片, |
Maxpiecesize是通道的设定参数。若分配的多个通道的Maxpiecesize不同,那么产生的文件依据第一个设定的值,后面的设定无效 filesperset=2无效 |
3 |
RMAN> backup 2> datafile '/u02/oradata/sating/users01.dbf' 3> format '/home/oracle/rman/%U.BAK' 4> filesperset=3; 与没加filesperset=3备份出的文件一样,只产生一个文件
RMAN> backup 2> FORMAT '/home/oracle/rman/db_%U.bak' 3> database filesperset=3; 在指定目录产生2个备份片 |
|
5 |
RMAN> run{ 2> allocate channel c1 device type disk; 3> allocate channel c2 device type disk; 4> backup datafile'/u02/oradata/sating/users01.dbf' 5> format '/home/oracle/rman/US_%U.bak';} 产生一个文件
RMAN> run{ 2> allocate channel c1 device type disk; 3> allocate channel c2 device type disk; 4> backup datafile'/u02/oradata/sating/users01.dbf' 5> format '/home/oracle/rman/US_%U.bak' 6> filesperset=3;} 产生一个文件 |
一次备份,分配多个通道,若无其他设定影响,则只产生一个文件
即使分配多个channel,但filesperset=3仍然无效 |
6 |
|
|
3. 并行的backup sets
法一:一次备份,分配多个channel,提高并行度,加速备份。分配的channel越多,并行度越高
法二:configure device type disk parallelism 4;
4. 备份归档日志
RMAN备份归档日志,只可做全备不可做增量备份。且只可备份已经归档的日志
RMAN> backup format '/home/oracle/rman/ar_%t_%s_%p' archivelog all delete all input;
5. 备份数据文件的补充
A. 每个备份的文件,ORACLE都会分配内存
B. 通道中数据文件的分类是按照该文件的大小降序排列的
C. 备份中,文件被checkpoint,且文件头被copy
6. BACKUP备份许满足的条件
A. 不能备份online redo log
B. 非归档模式的DB,不可执行在线备份,只能干净关闭DB后,启动DB到mount的状态备份
三.RMAN的copy命令(物理备份)/(文件的备份)
1. RMAN镜像拷贝的特点
A.只可执行COPY到硬盘上,不能拷贝到磁带
B.在使用镜像拷贝恢复DB时,不需要使用restore命令,直接把备份文件拷贝回原处即可
C.与备份集不同,镜像拷贝就是一个文件对应一个拷贝文件。而备份集是把多个数据文件等放到一个文件中
D.与备份集不同,镜像拷贝就像OS上的备份,包含所有数据块,无论该块是否被使用过
2. COPY命令
RMAN> copy
2> datafile'/u02/oradata/sating/users01.dbf' to '/home/oracle/rman/users01.dbf',
3> datafile'/u02/oradata/sating/users02.dbf' to '/home/oracle/rman/users02.dbf';
以上是2个COPY在并行进行
COPY整个DB:
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> report schema; ---列出整个DB的datafile
RMAN> copy datafile ’…’ to ’…’; ---根据上面列出的datafile,一一COPY
RMAN> list copy of datafile; ---检查拷贝是否完整
最好把控制文件也进行拷贝
四.BACKUP和COPY的一些共同设置
1. 自动备份控制文件
RMAN> configure control autobackup on;
无论在BACKUP还是COPY命令后,RMAN都自动备份控制文件。备份出的控制文件单独存放
2. 为备份文件加标签
Tags:标签,为BACKUP备份或COPY备份起的一个逻辑名字
RMAN> backup datafile 1 format ‘/home/oracle/%U.bak’ tag=systembackup1;
RMAN> copy datafile 1 to ‘/home/oracle/system01.dbf’ tag=systembackup2;
五.RMAN的动态性能表
v$archive_log v$backup_corruption v$copy_corruption v$backup_datafile v$backup_redofile v$backup_set v$backup_piece
六.监控RMAN
1. v$session_longops:监控backup / copy发出的进程
2. 通过查询v$session和v$process确定那些会话是RMAN的通道产生的
3. 也可使用OS级命令来监控
七.RMAN的增量备份
运行条件:无论关闭还是开启DB,无论归档还是非归档模式,都可进行增量备份
基本备份:incremental base backup
增量备份中必须有的基本备份,等级为0,即使没有且备份等级设置为非0,那么RMAN也会自动做基本备份。因为有基本备份,才可进行其他类型的增量备份
RMAN>backup incremental level=0 datafile 6;
差异备份:
RMAN默认的备份类型。差异备份会备份级数与当前设置最接近的增量备份后发生变化的数据块,
RMAN>backup incremental level=1 datafile 6;
累积备份:
累积备份会备份级数比当前小且与当前最接近的增量备份后发生变化的数据块
RMAN>backup incremental level=1 cumulative datafile 6;
八.补充
小结:归档模式的DB,无论开启或关闭状态都可备份
非归档模式的DB,只能关闭状态,全备份。且为干净关闭DB
以上与使用那种备份方式无关
CHAPTER 12 User Managed Complete Recovery
一.完全恢复的基本知识
1. 完全恢复适用情况:当前datafile或controlfile丢失或损坏
2. 恢复大体步骤:
步骤一:还原datafiles / control files的备份
步骤二:应用redo (online / archived) ---在instance级redo
步骤三:此时DB包含提交的和未提交的事务
步骤四:应用undo ---在datafile级undo
步骤五:DB为已恢复的状态
complete recovery |
noarchive mode |
archive mode
|
有redologs的备份 |
无redologs的备份 |
DB是否开启/关闭 |
relocate datafile |
read-only TBS recovery |
loss of control files |
DB closed下恢复 |
DB open下恢复 |
SYSTEM TBS损坏 |
UNDO TBS损坏 |
整个DB损坏 |
当前DB关闭 |
当前DB开启 |
没有指定datafile备份 |
二.非归档模式完全恢复
1. 需要还原的数据库文件
必须还原的:datafiles 和 controlfiles
注意:1无论这2类文件是否损坏,都需要还原 2且还原文件来自一次备份产生
可选还原的:redo log files 和 password files 和 parameter file
(因为该类文件是可从冷备份中重建的)
2. 非归档模式下完全恢复的优缺点
优点:风险低,易于执行。恢复需要的时间就是还原数据库文件花的时间
缺点:整个数据库只能还原到备份的时间点,不管redologs里记录了什么
3. 有/无redologs恢复
|
有redologs的备份 |
无redologs的备份 |
步骤 |
1. 把一次冷备份的datafiles,controlefiles,redolog全部拷回指定目录 2. SQL> startup Database mounted. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open 3. SQL> recover database 4. SQL> alter database open; 5. 冷备份DB |
1. 把一次冷备份的datafiles,controlefiles全部拷回指定目录 2. SQL> startup Database mounted. ORA-00314: log 1 of thread 1, expected sequence# doesn't match ORA-00312:… … 3. SQL> recover database until cancel; 4. SQL> alter database open resetlogs; 5. 冷备份DB |
A. 删除system表空间的数据文件,可以执行checkpoint / switchlog / commit / DML。但数据字典不可查,任何模式下对象定义不可修改,系统的PLSQL包不可用
B. DB在shutdown immediate/transactional/normal时,进行DB一致性检查,因此如果DB有文件丢失或损坏是无法正常关闭DB的,只能shutdown abort
C. 删除system01.dbf à shutdown abort à cp /backup/system01.dbf /u02/oradata/ à
startup à 只能到mount状态 à recover database until cancel;
à 提示:ORA-00308: cannot open archived log ’xxx.dbf’ ,
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
结论:只还原被删除/损坏的数据文件,且为DB为非归档模式。执行恢复是无法成功的
三.归档模式完全恢复
1. 需要还原的数据库文件:被损坏/丢失的数据文件 (文件可来自冷备份/热备份产生)
2. 非归档模式下完全恢复的优缺点
优点:需要还原的文件只是有问题的文件,保证数据不丢失,恢复使用的时间是还原数据文件+应用日志文件的时间
缺点:必须有备份文件后,所有的日志(archivedlogs + redologs),不可有断点,否则只可还原到日志断点前的数据
3. 恢复步骤
步骤一:确定要恢复的数据文件离线
SQL> alter database datafile 4 offline;
步骤二:在OS层把热备份/冷备份产生的该数据文件还原
[oracle@sating sating]$ cp /home/oracle/users01.dbf /u02/oradata/sating/
步骤三:使用日志修复该数据文件
SQL> recover datafile 4;
步骤四:将该数据文件上线
SQL> alter database datafile 4 online;
恢复完成
注意:
A. 如果需要恢复的数据文件没有offline,就使用备份还原了,无法recover datafile ’’;
B. 只需要还原损坏的数据文件,其他任何文件都不需要还原
C. recover database; / recover datafile 4; / recover tablespace users; 这3个recover的不同级别可在数据库OPEN或MOUNT时都可进行
D.恢复过程中可能会使用到的视图
v$recover_file:显示哪些数据文件需要恢复
v$archived_log:显示所有数据库的归档日志
v$recover_log: 显示恢复过程中需要使用到的归档日志
E. 自动使用归档日志进行恢复的方法:(需要保证所有归档日志的位置与init参数指定的一致)
1在进行recover前,设置环境变量 SQL> set autorecovery on
2当提示使用哪个归档日志时,输入:AUTO
3使用automatic选项 SQL>recover automatic database;
F. 将数据文件还原到新的位置的方法:
Offline数据文件 —> 使用命令SQL> alter database rename file '/u02/oradata/users01.dbf' to '/ users01.dbf';
—> recover —> online数据文件
注意:此时数据文件的位置变了,但数据文件的相对文件号不变
G. 如果损坏的文件位于read-only表空间,恢复的方法一样(无论备份为read-only,恢复为read-write还是其他2种情况)
4. 恢复时数据库OPEN/CLOSE
当损坏的文件是:SYSTEM表空间 / UNDO表空间 / 整个DB时,只可在CLOSE数据库后再进行恢复,此时RECOVER只能发生在DB mount的状态。而除此之外,恢复是不会影响数据库其他部分的运转的,无须关闭DB再打开DB进行。
因为SYSTEM表空间和UNDO表空间不可设置为offline,因此还原他们的备份文件,需要把DB关闭后还原。然后把DB打开到mount的状态,进行recover。
5. 丢失/损坏的数据文件/表空间 无备份 (注;该过程不需要CLOSE DB,在线即可完成)
SQL> alter database datafile 4 offline;
SQL> alter database create datafile ’/u02/oradata/sating/users01.dbf’ as ’/u02/oradata/users01.dbf’;
此时新建的数据文件为空,且可在此时修改数据文件的位置,如上例
SQL> recover automatic datafile 4;
SQL> alter database datafile 4 online;
以上恢复过程,在10G环境测试不成功。具体见收藏夹->ORACLE精华部分
五.小结
1. RESETLOGS option only valid after an incomplete database recovery
2. 有归档日志的完全恢复,全部不需要RESETLOG
备份:
Noarchive mode:必须关闭DB,进行”user-namaged或RMAN”的 冷备份
Archive mode: 可以在DB OPEN时,”RMAN” 或 ”将备份文件/表空间设置为热备份状态,user-namaged的热备份”
用户管理的恢复
Noarchive mode:关闭DB,把一次备份产生的全部datafile,controlefile还原。
如果该次备份有redo:还原redo -> recover database -> alter database open;
如果该次备份无redo:直接recover database until cancel -> alter database open resetlogs;
备份后产生的数据全部丢失
Archive mode:损坏的数据文件offline / 关闭DB -> 只还原被损坏的文件 -> recover datafile ‘’ ->
online该文件 / OPEN DB
备份后无的日志断点前的数据全部可还原
根据DB模式选择备份方式,根据备份文件选择恢复方式
CHAPTER 14 User Managed Incomplete Recovery
一.不完全恢复的原因
1.特点
Complete恢复是面对单个TBS或datafile的,归档模式下可实现数据不丢失。
Incomplete恢复只能针对整个DB,指定恢复点后的所有数据全部丢失
注意:DB的恢复是站在备份点的前推,而不是站在灾难点的后退。不完全恢复需要有完整的DB的备份,因为其是针对整个DB的前推,而不是像完全恢复那样针对指定TBS或数据文件的前推
2.原因
A.完全恢复因为归档日志的丢失失败
B.所有control file丢失
C.所有归档日志和数据文件丢失
D.用户操作错误
二.不完全恢复的步骤
步骤1:shutdown DB + cold backup 对所有文件备份,保留现场
步骤2:restore all datafiles 其他文件一律不能还原(control redo passwd init)
步骤3:startup mount
步骤4:recover database 到指定时间点 (3种指定方式)
步骤5:open DB resetlogs 复位日志,以前的归档失效
步骤6:shutdown DB + cold backup
注:1.恢复前后一定要冷备份DB 2.由于时间点的不确定可能需要执行上面操作多次 3.只还原数据文件其他不可还原
4.本章的不完全恢复是在DB为archive mode,因为非归档模式的DB的完全恢复成果就是这里不完全恢复的成果,即整个数据库恢复到某一时间点。
三.不完全恢复的3个种类
种类 |
命令 |
描述 |
Time_based |
recover database until time ’2006-10-12 14:22:22’; |
|
Cancel_based |
recover database until cancel; |
不确定时间点或日志丢失,oracle自动检测最近的时间点 |
Change_based |
recover database until change 12345678; |
|
以上命令还可加一个选项:using backup controlfile,用于备份的DB结构与当前的DB结构不同
Eg.SQL>recover database until change 12345678 using backup controlfile;
四.不完全恢复的案例
五.小结
完全:Archive : 将DB所有文件(data control redo)还原,只恢复到备份的时间点
Noarchive :需要restart DB :损害的是SYSTEM/UNDO 表空间或整个DB :只需还原被损坏的数据文件,无数据丢失
不需要restart DB: 只需还原被损坏的数据文件,无数据丢失
不完全:archive : 将DB所有DATA文件还原,recover指定时间点,只恢复到指定的时间点
六.补充
1. 查SCN号的方法
8i前
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
9i起
select dbms_flashback.get_system_change_number from dual;
查询结果其实并非准确的系统当前SCN,因為SCN是存放在fixed sga中的,所以我們可以用oradebug取出來取出真正的當前SCN。这个是个估算值
2. CONTROLFILE 全部损坏/丢失
只要把DB到nomount状态重建即可。脚本可来自备份的controlefile的to trace,如果备份时的数据文件和现在的有变化,直接在创建的SQL上修改即可。不需要resetlog重建,也不需要resetlog打开DB
3. archive log list
该命令可查看当前日志号,其中:最早的概要日志序列显示的是上次发出该命令时显示的当前日志号
4. controlfile + redologs 全部被删除,如何恢复
在重建controlfile时要设置为resetlogs.
Alter database open resetlogs;发出该命令后DB开始重建redolog,建的位置是根据之前的controlfile里指定的
5. resetlogs 选项相当于是删除以前的日志,重建新日志。因此以前日志的归档全部失效
6. 若v$datafile中显示某个datafile的状态为recovery,那么可以查看v$recover_file,知道错误是什么
7. 在recover 中如果尝试AUTO 方式选择日志失败,则可找v$log中当前的logfile,输入地址
CHAPTER 13 RMAN Complete Recovery
noarchive mode :RMAN只可在DB mount时做backup database;(全备份),因此恢复也只可做针对全库的完全恢复
archive mode :RMAN可针对DB级 / TBS级 / datafile级 做恢复,常用格式为:%U.bak
一.归档模式与非归档模式的RMAN完全恢复
|
Archive mode |
Noarchive mode |
命令 |
RMAN>startup mount RMAN>restore database; RMAN>recover database; RMAN>alter database open; |
RMAN>startup mount RMAN>restore database; RMAN>recover database; RMAN>alter database open resetlogs; |
说明 |
相同:恢复步骤一样,包括restore/recover tablespace 和restore/recover datafile 不同:1.DB最终的打开方式,非归档模式,必须重置日志(resetlogs) 2.非归档模式只可恢复到备份时的数据状态,归档模式在日志不丢失的情况下可实现完全恢复 |
二.恢复过程中重置数据文件位置
|
步骤 |
说明 |
1 |
删除/损害数据文件 -> shutdown abort -> startup mount ---准备工作 |
|
2 |
RMAN> run { 2>set newname for datafile '/u2/users1.dbf' to '/u1/user1.dbf'; } RMAN> restore database; RMAN> switch datafile 4; RMAN-06039: no set newname command has been issued for datafile 4 RMAN> recover database; RMAN> alter database open; 这样不会报错,但实际上数据文件'/u2/users1.dbf'并没有改变位置,仍然被还原到原位置 |
1.switch datafile all; switch datafile 指定数据文件号; 2.set newname for datafile ’原位置’ to ’新位置’; 3.set newname 命令必须和switch成对出现,且在一个run块里才有效 |
3 |
RMAN> run 2> {set newname for datafile '/u2/users1.dbf' to '/u1/user1.dbf'; 3> restore database; 4> switch datafile 4; 5> recover database; 6> alter database open;} 。。。 。。。 skipping datafile 1; already restored to file /u2/system01.dbf skipping datafile 2; already restored to file /u2/undotbs01.dbf skipping datafile 3; already restored to file /u2/sysaux01.dbf datafile 4 is already restored to file /u1/user1.dbf restore not done; all files readonly, offline, or already restored Finished restore at 17-OCT-06 。。。 。。。 恢复成功完成,且数据文件'/u2/users1.dbf'被还原到指定位置'/u1/user1.dbf' |
1.整个还原过程,若包含重定位数据文件,则应该放置在一个RUN块里进行 2.因为步骤一已经实现了一次还原,则RMAN对这次还原只是比对了数据块与RMAN备份的是否一致,一致的话不实行真的还原,节省时间 3.如果恢复过程没有成功的switch,一方面还原的数据文件到了指定的地方,成为原数据文件的副本,不会被删除,另一方面因为没有成功修改controlfile,因此无法实现recover也无法打开DB(即数据库不认这个到新位置的文件)
|
CHAPTER 15 RMAN Incomplete Recovery
一. RMAN的不完全恢复要求及步骤
1. 要求
有完整的datafile的备份,数据库可到mount的状态,不可针对单个TBS/数据文件做恢复,不完全恢复为针对整个数据库的恢复
2. 步骤
A.关闭DB,再启动到mount状态
B.分配多个channel提高并行度
C.restore所有的数据文件
D.recover数据库until time / sequence / scn
E.打开数据库使用resetlogs选项
F.对数据库执行完整的backup
步骤B.C.D.E最好是在一个run块里面执行
3. 例子
例1 :until time |
例2:until sequence |
run { set until time "to_date('2006-10-17 08:38:00','yyyy-mm-dd hh24:mi:ss')"; restore database; recover database; alter database open resetlogs; } 可使用logminer分析具体要恢复到的时间 |
run { set until sequence 6 thread 1; restore database; recover database; alter database open resetlogs; } 可以使用archive log list命令查看当前的sequence号 |
三.不完全恢复小结
无论是用户管理的还是使用RMAN的不完全恢复,特点都一样:不完全恢复是针对整个DB做的一次恢复,使整个DB回到以前的某个状态。实现的条件是:只需要全部的datafile的备份,要重起DB到mount状态,使用recover命令时指定恢复到的时间点(until time / sequence / scn)。重起DB时,一律使用resetlogs选项
PS:一旦DB使用resetlogs选项OPEN,则以前所有的backup,archivedlog,online redolog无效
CHAPTER 16 RMAN Maintenance
本章涉及的命令:crosscheck / delete / backup … delete input / change … (un)available
/ change … (no)keep / catalog / change … uncatalog
一. crosscheck
1.作用
确保RMAN信息库的信息与实际备份信息同步。检查backup或copy是否可用。当OS命令删除备份时更新RMAN的信息库
2.命令 --检查所有的backup / copy
RMAN> crosscheck backup;
RMAN> crosscheck copy;
3.例子
List backup;显示备份A状态为available -> 在OS上删除了备份A -> List backup;仍显示备份A状态为available –> crosscheck backup;
-> List backup;此时显示备份A状态为EXPIRED -> delete expired backup; -> List backup;此时无备份A的信息
说明:crosscheck backup;是把不再存在或不可用的备份在RMAN的信息库内显示成EXPIRED。而delete expired backup;命令是把被标记为EXPIRED的备份记录从RMAN信息库删除
二. delete
1.作用
物理的删除指定的backup或copy。 同时删除RMAN信息库中指定的backup或copy的相关信息
2.命令
RMAN> delete backupset 8; |
删除指定的备份集,备份集号可通过list backup;查看其BS KEY值 |
RMAN> delete copy of datafile 1; |
删除数据文件号为1的镜像备份 |
RMAN> delete noprompt expired backup of tablespce users; |
Noprompt:不显示提示,直接删除。 删除表空间users被标记为expired的备份 |
RMAN> delete obsolete; |
基于备份的保持策略,删除一切冗余的backups,copies,archived redolog |
三. backup … delete input
1.作用
这命令相当于备份的备份,比如disk导到stb时使用。先备份原备份,在物理删除原备份。
会被删除的原备份有3种:archived redologs,datafile copies,backup sets
2.命令
RMAN> backup archivelog all delete input; --先备份所有的归档日志,再删除备份成功的归档日志
四. change … available / unavailable
1.作用
改变backup或copy的状态为available或unavailable
2.命令
RMAN> change datafilecopy '/u1/4.dbf' unavailable; |
修改指定backup 或 copy的状态 |
RMAN> change copy of datafile 4 available; |
|
RMAN> change backup of controlfile unavailable; |
修改所有控制文件的backup为不可用状态 |
RMAN> change copy of archivelog 2> sequence between 230 and 240 unavailable; |
修改日志号在230到240之间的归档日志的copy为不可用 |
RMAN> change copy of archivelog all unavailable; |
修改所有归档日志的copy不可用 |
五. change … keep / nokeep
1.作用
keep:使指定备份的保留时间不受缺省的retention policy影响
nokeep:使指定备份重新服从缺省的retention policy
2.命令
RMAN> change backupset 11 keep forever nologs; |
使备份集11长期的保存 |
RMAN> change copy of datafile 4 keep until ’sysdate+60’; |
从今天开始的60天数据文件4的拷贝不受retention policy影响 |
六. catalog
1.作用
使用该命令把非RMAN产生的备份添加到RMAN的信息库
可添加的备份有3类:OS的数据文件copy,归档日志的copy,控制文件的copy
2.命令
RMAN> catalog datafilecopy ’/u01/users01.dbf’; |
添加copy文件’/u01/users01.dbf’到RMAN信息库 |
RMAN> catalog archivelog ’/ora/ar_1.arc’,’/ora/ar_2.arc’; |
添加指定归档日志到RMAN信息库 |
RMAN> catalog controlfile copy ’/u01/control.ctl’ |
添加控制文件的copy到RMAN信息库 |
七. change … uncatalog
1.作用
使指定记录在RMAN信息库中标识为DELETED状态
从recovery catalog中删除指定backup或copy的信息
注意:1并非物理删除指定backup或copy 2不适用于backupset
2.命令
RMAN> change archivelog ’/ora/ar_1.arc’ uncatalog; |
把指定归档日志信息移出RMAN信息库 |
RMAN> change datafilecopy ’/u01/users01.dbf’ uncatalog; |
把指定数据文件copy信息移出RMAN信息库 |
CHAPTER 17 Recovery Catalog Creation And Maintenance
一. Recovery catalog 存储的内容
Recovery catalog是使用RMAN的一个可选的资源库。她的内容包括:
1. 备份记录
数据文件和归档日志的备份集和备份片。数据文件的镜像拷贝。归档日志
2. 所管理的目标DB的物理结构
3. RMAN的配置信息
4. RMAN的脚本
二. Recovery catalog 优点
1.一个recovery catalog可同时管理多个目标DB
2.保存目标DB的历史元数据
3.可存储脚本
4.保存目标DB的多个肉身
三. Recovery catalog 建立
Recovery catalog可以作为一台单独的数据库,来管理其他多个数据库。也可以存在于其中一个目标DB上,管理其他多个数据库。
建立顺序是一致的。
|
步骤 |
说明 |
1 |
建立专署TBS |
SQL> create tablespace rc datafile '/u02/oradata/sating/rc01.dbf' size 20M; 至少要20M,且catalog用户名不可与该专署TBS名相同 |
2 |
建立管理catalog的用户 |
SQL> create user rman identified by rman 2 default tablespace rc; |
3 |
为该用户付权 |
SQL> grant connect,recovery_catalog_owner,unlimited tablespace to rman; 只需要赋予connect,recovery_catalog_owner,unlimited tablespace这3个权限即可。(connect是个角色,该角色拥有包括建表,建PLSQL等基本权限) |
4 |
建立catalog |
[oracle@sating admin]$ rman catalog rman/rman@sating RMAN> create catalog tablespace rc; 该步骤是在管理catalog的用户下建立相关的表和试图。(recovery catalog的内容实际上存储在表里) |
5 |
连接目标DB |
RMAN> exit [oracle@sating admin]$ rman catalog rman/rman@sating target sys/sating@sating |
6 |
将目标DB登记到catalog |
RMAN> register database; |
四. Recovery catalog 维护
|
维护项目 |
说明 |
1 |
Recovery catalog的同步 |
法A:某些命令使catalog与目标DB自动同步,比如:report schema;等 法B:手工同步 RMAN> resync catalog; |
2 |
重置catalog中目标DB的肉身(incarnation) |
原因:当DB启动使用resetlogs选项时,需要重建catalog中该DB的肉身,以前的无效 命令:RMAN> reset database; |
3 |
Recovery catalog存储内容报告 |
法A:可使用report和list命令 Eg. RMAN> report need backup days 3; --显示3天内没有备份的数据文件 RMAN> list backup of datafile 4; --显示数据文件4的备份 法B:在RMAN模式下,RC_开头的视图 Eg. SQL> select * from rc_database; |
4 |
维护RMAN的存储脚本 |
建立:create script 脚本名{ 内容 } Eg. RMAN> create script fullDB{ 2> backup database; } 执行:run {execute script 脚本名;} Eg. RMAN> run {execute script fullDB;} 修改:replace script 脚本名{ 内容 } Eg. RMAN> replace script fullDB{ 2> backup database format '/home/oracle/U%.BAK';} 删除:delete script 脚本名; Eg. RMAN> delete script fullDB; 查看:print script 脚本名; Eg. RMAN> print script fullDB; |
5 |
备份Recovery catalog |
法A:备份整个数据库 法B:备份catalog所在的TBS 法C:export整个catalog所在DB,或export管理catalog的用户模式 |
6 |
恢复Recovery catalog |
法A:使用之前recovery catalog DB的备份重建DB 法B:重定位catalog到另外的DB后,imp数据 法C:从exp的备份中imp整个DB |
CHAPTER 18 Transporting Data Between Database
一. EXP
1.EXP的使用方法
|
方法 |
说明 |
法A |
交互界面 |
直接发出exp回车即可 |
法B |
完整的命令行 |
exp keyword=(value1,value2,…,valuen) Eg. C:/> exp s/s@sating file=d:/s.dmp tables=(t1,t2) query=”””where id!=8””” C:/> exp s/s@sating file=d:/s.dmp TRANSPORT_TABLESPACE=y TABLESPACES=(S) 1. query条件是针对同时导出的所有表的,无法只针对指定单个表 2. TRANSPORT_TABLESPACE=y只是引出TBS的定义,若要实现真正的传输表空间需要先将TBS的物理文件传输,再IMP引入 |
法C |
使用脚本 |
exp parfile=脚本名 Eg.脚本A.txt的内容 userid=s/s@sating file=d:/dish.dmp tables=(dish) C:/> exp parfile=d:/a.txt Windows下,脚本格式为.txt |
法D |
Oracle Enterprise Manager |
|
2.EXP的模式
无论何种模式,EXP都无法导出SYS模式下的信息,包括全库导出时
EXP模式 |
EXP内容1 |
EXP内容2 |
EXP内容3 |
EXP内容4 |
EXP内容5 |
EXP内容6 |
Table |
table definitions |
table data (all / query) |
owner’s table grants |
owner’s table indexes |
table constraints |
|
User |
table definitions |
tables data |
owner’s grants |
owner’s indexes |
table constraints |
|
TBS |
table definitions |
|
grants |
indexes |
table constraints |
triggers |
FullDB |
table definitions |
table data |
grants |
indexes |
table constraints |
|
二. Direct-Path EXP
1.Direct-Path EXP的概念
Direct-path方式不使用SQL command processing和buffer cache manager,既不转换成SQL导入也不使用buffer cache.直接写文件。而无论何种EXP,都需要经过TTC,即:都需要进行字符集或数据类型不同时,进行转换
2.Direct-Path EXP的语法
C:/> exp userid=s/s@sating full=y file=d:/s.dmp direct=y
3.Direct-Path EXP的特点
A. data导出时已是用户预期的格式,避免了不必要的数据转换
B. 使用优化的SQL select命令
4.Direct-Path EXP的限制
A. 不可使用交互界面完成,只可打命令行(direct=y)
B. 发出EXP的客户端必须与数据库服务器端的字符集一致
C.BUFFER参数无效
D.不可以导出含有LOB,BFILE,REFER,OBJECT TYPE这4种数据类型的行
三. IMP
1.IMP的用途
创建表结构。从有效的EXP文件中导出数据。恢复用户的误操作
2.IMP的模式
EXP模式 |
描述 |
举例 |
Table |
导入指定的表到某个模式中 |
C:/> imp s/s@sating file=d:/full.dmp tables=(t1) touser=p 从一个全备份中只导出表T1到P用户下, |
User |
导入该模式下所有的对象 |
C:/> imp s/s@sating file=d:/full.dmp fromuser=p 把full.exp里P用户下所有EXP对象导入S用户下 |
TBS |
导入该TBS里所有对象的结构信息,非物理信息(data).用于传输表空间 |
C:/> imp system/manager@sating file=d:/tbs.dmp transport_tablespace=y tablespaces=users |
FullDB |
导出EXP文件中所有对象 |
C:/> imp s/s@sating file=d:/full.dmp 把full.exp里的全部内容导入S用户下 |
touser不写就是默认导入当前连接IMP的用户下
3. IMP使用SYSDBA身份
使用条件:oracle技术支持要求 或 IMP一个传输表空间集
否则不要使用SYSDBA身份IMP数据
命令:imp ’sys/admin@sating as sysdba’ file=… … …
4. IMP导入的顺序:6个步骤
建立新的表 -> imp数据 -> 建立普通index -> 导入triggers -> 在新表上启用完整性约束(FK)
-> 建立bitmap/functional/domain indexes
四. 关于国际字符集
EXP把数据字符集的信息放在EXP文件中
IMP翻译时使用发出该命令所在OS的主机字符集
多字节字符集的EXP文件只能IMP到具有相同字符集的系统,而单字节字符集间可相互转换
CHAPTER 19 Loading Data Into A Database
一. Data loading的3种方式
1. EXP/IMP :oracle不同版本不同平台间 数据导入
2. direct-load insert :用于一个DB不同table间 数据导入
3. SQL*Loader :不同数据库系统间 数据导入
二. Direct-load INSERT 方式
1. 特点
A.数据导入到该表的high water mark以上,会浪费空间
B.可串行导入(serially使用一个server process),也可并行导入(parallel使用指定数量的slave process)
C.可导入分区表,非分区表,分区表的单个指定分区
D.导入过程可生成log也可nolog
2. 举例
串行导入
串行导入 (无日志) |
并行导入 (并行度为3,无日志) |
SQL> insert /*+ APPEND */ into t1 2 nologging 3 select * from t2; SQL> commit; |
SQL> insert /*+ PARALLEL(s.t1,3) */ into t1 2 nologging 3 select * from t2; SQL> commit; |
三. SQL*Loader 方式
1. 组成
数据导入到该表的high water mark以上,会浪费空间。该特点与direct-load insert方式一样
2. 导入方式比较
|
常规导入(conventional load) |
直接导入(direct path load) |
1 |
导入时先转换成SQL,用SQL 插入数据 |
直接写数据文件 |
2 |
肯定产生redolog |
默认不产生redolog,但可指定产生 |
3 |
启用所以的约束 |
只启用PK,UK,NOT NULL约束 |
4 |
insert trigger触发起作用 |
insert trigger触发不起作用 |
5 |
可导入cluster表 |
不可导入cluster表 |
6 |
导入过程不锁表,其他用户可对该表操作 |
导入过程锁住表,其他用户不可对该表操作 |
7 |
|
可使用parallel方式导入,该种方式会将数据放入一个临时段,汇总后写入表。高效 |
3. 相关各文件描述
A.控制文件:指出需导入的数据文件位置,数据格式,导入过程参数配置
特点:语法自由,大小写不敏感,注释使用--,CONSTANT为保留字
B.数据文件:
记录格式:固定长度,可变长度(根据分隔符辨别),数据流格式
转换方式:用常规导入方法时,SQL*Loader根据控制文件描述的格式将数据文件内容转换成insert语句写入数据库,自动提交
注意:数据文件内容也可放在控制文件中,但最好不要这样