今早pub上和一个帖子是关于noarchivelog模式下rman做的冷备份,总是出现了noarchivelog下无法备份,从冷备份的原理来说:冷备份与数据库归档模式无关,刚好自己测试也可以通过
ora-19602: cannot backup or copy active file in NOARCHIVELOG mode
*Cause:You tried to copy or backup a file that was not closed cleanly,
and the database was in NOARCHIVELOG mode.This is not allowed
because when restored, the file will require redo application
before it is usable, and redo is not currently being saved
beyond the contents of the online redo logs.
*Action: Take the tablespace offline clean or close the database and retry
the copy or backup.
根据上面的cause很有可能是数据文件并没有关闭干净,从上面的问题个人认为是mount阶段instance依然存在,服务进程和后台进程可能会对datafile还在写入,所以会出现没有关闭干净的数据文件!
接下来网友在open阶段做了一下switch log,oracle执行ckpt强制优先让所有的dbwn写入当前和活动的所有重做条目所在的buffer cache到disk上。然后再次启动mount时,可以备份了,不再出现ora-19602了,看来datafile已经完全释放了!
不过这种情况很少见!因为一般数据库关闭时,sga完全释放后台进程和服务进程也已经不在工作,此时我们关闭到重新mount阶段时,数据文件没有打开。
还是这里继续说下关于深入浅出中pga的管理,之前看过oracle concept中对于pga的一些基本整理的信息,pga程序全局区包含数据和控制信息的一块内存区域,一般包含私有sql区和session信息等内容。
私有sql区又可分为持续数据区(包含绑定变量等信息)和运行时区(运行时的内存结构),其中持续数据区在游标关闭时才会被释放,而运行时区在程序运行结束后就会释放。
关于sql语句和游标关系可以参考之前个人整理的二篇blog
关于oracle 9I后推出了pga自动管理,其中的两个参数pga_aggregate_target和workarea_size_policy,前一个是pga所用的最大pga内存总和,而workare_size_policy用于开关pga的自动管理,pga自动调整中分为可调整内存和不可调整内存,其中的可调整内存则是由sql工作区使用。
这里摘要下oracle concept中关于工作区的一些概念:
对于复杂查询来说,运行时区大部分容量均供需要占用大量内存的操作创建工作区,排序等操作需要使用工作区以便在内存中进行排序,如果一个工作区无法容纳全部输入数据,那么此时数据将被分割为数个小块,这样系统可以在内存中处理部分数据,同时其余的数据放入临时的磁盘存储区等候处理。不过位图操作例外,即使工作区过小,位图融合和位图创建也不会放入磁盘。
工作区调整:
正如我们对工作区的容量控制调整,更大的工作区能够显著提高sql操作性能,但是消耗更多内存。最理想是,工作区能够容纳sql语句全部输入数据及额外控制内存结构,不然sql语句响应时间增加,因为部分输入数据必须放入临时磁盘区。
Sql在工作区中三种方式执行:
Optimal:指所有处理可以在内存中完成
Onepass:大部分可以在内存中完成,但是需要使用到磁盘操作
Multipass:大量操作需要产生磁盘交互,性能极差
而对于pga的管理我们是调整sql工作区,使得optimal执行尽量高,在内存中完成排序散列等操作,同时是multipass操作尽量低,减少磁盘交互。
SQL> select name,value from v$sysstat where name like '%workarea executions%';
NAMEVALUE
---------------------------------------------------------------- ----------
workarea executions - optimal5407695350
workarea executions - onepass244
workarea executions - multipass0
在自动sga和pga管理中一样,同样引入了v$sgastat和v$pgastat视图,其中的v$pgastat视图中name列有global memory bound,global memory bound用于允许单个进程使用pga的上限
关于pga调整的还有视图v$pga_target_advice_histogram
SQL> desc v$pga_target_advice_histogram;
NameTypeNullable Default Comments
--------------------------- ----------- -------- ------- --------
PGA_TARGET_FOR_ESTIMATENUMBERY
PGA_TARGET_FACTORNUMBERY
ADVICE_STATUSVARCHAR2(3) Y
LOW_OPTIMAL_SIZENUMBERY
HIGH_OPTIMAL_SIZENUMBERY
ESTD_OPTIMAL_EXECUTIONSNUMBERY
ESTD_ONEPASS_EXECUTIONSNUMBERY
ESTD_MULTIPASSES_EXECUTIONS NUMBERY
ESTD_TOTAL_EXECUTIONSNUMBERY
IGNORED_WORKAREAS_COUNTNUMBERY
其中low_optimal_size就是histogram评估区间optimal下限,当high_optimal_size是上限,estd_optimal_size评估区间评估optimal执行次数,estd_total_executions_histogram评估区间内评估执行总次数。
[@more@]