oracle asm最多可以添加多少个磁盘组
If you use ASM you do not have any filesystem in ASM (yet). Therefore no restrictions of filesystems will apply to ASM. The database will directly access the ASM Diskgroups and the diskgroup will either consist of block devices (dev/sd*) or character (raw) devices (dev/raw/raw*).
There is one limit to the size of an ASM Disk which is 4 PB (if you storage system can provide such a lun).
However even if you have any circumstances preventing you from having
block devices/partitions etc bigger than 2 TB what you would do is
create a diskgroup with multiple disk in it. Since you can have 10000 ASM Disks in one Diskgroup (e.g. +DATA) that gives you some space.
Best practices is really to have only 2 Diskgroups one for the DATA and one for the Flashback Recovery Area.
flashback 为什么不能跨ddl操作
这部分的内容,其实早在10年年初就学习过,也记录了相关的笔记.但很多知识不用就慢慢被遗忘了.今天无意中听到同事在讨论问题:为什么删除了一个占用空间大的表后,表空间并没有释放呢? 职业的原因,自己在想Oracle Drop table的过程是怎么实现的,是不是要做个跟踪看下.后来想起在10g后,Oracle有了Flashback的功能,删除表的时候会先放在RecycleBin中,并不真正的物理删除,所以表空间dba_free_space是不是不会有变化?今天重新翻了下之前的笔记,并做了试验,发现dba_free_space也是会体现变化的,这是不是哪个环节理解上有问题,还需要再测试下目录:1 Flashback Database 架构2 Flashback Database3 Flashback Drop4 Flashback Query and Flashback Table5 小结#####################################################1、 Flashback Database 架构#####################################################Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,Flashback Database Log日志和Flash Recovery Area一旦数据库启用了Flash Database, RVWR进程会启动,RVWR进程会向Flash Recovery Area内写入Flashback Database Log, 这些日志包括数据块的"前镜像"#####################################################2 、Flashback Database#####################################################1 启用Flashback Database 1.1 配置Flash Recovery Area1)启用Flash Recovery AreaAlter system set db_recovery_file_dest_size=1G scope=both;Alter system set db_recovery_file_dest='/u01/backup/fb' scope=both;注意这个目录必须是Oracle:dba,属主col name format a32 heading 'Parameter'col value format a32 heading 'Setting'select name, value from v$parameter where name like '%flash%' or name like '%recovery%' order by name;2) 启用数据库Flashback功能数据库必须处于归档模式#重启数据库startup mount(在Open下也可以打开)#检查有没有开启Flashback功能select name, current_scn, flashback_on from v$database;#启动Flashback功能alter database flashback on;#确认启动select name, current_scn, flashback_on from v$database;#确认Flashback Log生成在/u01/backup/fb/目录下,该目录为OMF管理oracle@Z810:/u01/backup/fb/MOUSE/flashback> ll /u01/backup/fb/MOUSE/flashbacktotal 8020-rw-r----- 1 oracle dba 8200192 Aug 2 16:32 o1_mf_65f0nym9_.flb# 设置db_flashback_retention_target参数Alter system set db_flashback_retention_target=1440 scope=both;单位为分钟如果/u01/backup/fb/目录下的空间不够保存一天的回退数据怎么办呢?Override;#打开数据库Alter database open;2 Flashback Database1) 确认能够恢复的时间点SQL> desc v$flashback_database_log; Name Null? Type ----------------------------------------- -------- ---------------------------- OLDEST_FLASHBACK_SCN NUMBER OLDEST_FLASHBACK_TIME DATE RETENTION_TARGET NUMBER FLASHBACK_SIZE NUMBER ESTIMATED_FLASHBACK_SIZE NUMBEROLDEST_FLASHBACK_SCN: 数据库能回退的最早SCNOLDEST_FLASHBACK_TIME: 数据库能回退的最早时间RETENTION_TARGET:当前系统设置参数FLASHBACK_SIZE: Current size (in bytes) of the flashback data 当前的Flashback Log空间ESTIMATED_FLASHBACK_SIZE: 为了达到Retention_target定义的要求,预计需要多大的空间,这个值用于指导设置Flash Recovery Area大小这个会改变2) Flashback databaseFlashback Database 实际上是对数据库的一个不完全恢复操作,因此需要关闭数据库,重启数据库到Mount状态;但与不完全恢复不同的是,它不需要执行restore操作。flashback之前,先对数据库做个备份 #backup database;#Shutdown immediate#startup mount#flashback database to timestamp to_timestamp('2010-08-02 17:10:04','yyyy-mm-dd hh24:mi:ss');如何精确到找到恢复时间点呢?SCN_TO_TIMESTATMP()函数可以将SCN号转换成TimeStamp如何找到某个操作的精确时间点,AUDIT?#alter database open read only;#select count(*) from xxx; 确认数据被找回#shutdown immediate;#Startup mount;#alter database open resetlogs;#backup database; 3 命令和视图1) 检查是否启用了Flashback database 功能Select flashback_on from v$database2) v$flashback_database_log这个视图用来描述Flashback log对Flash Recovery Area的占用情况select * from v$flashback_database_log;3) v$flashback_database_stat这个视图用来对Flashback log的空间情况进行更细粒度的记录和估计4) Flashback命令这个命令既可以在SQL*Plus中使用,也可以在RMAN中使用,Flashback [device type = ] databaseto [before] scn = to [before] sequence = [ thread = ]to [before] time = ''Oracle允许使用3种方式指定回退的时间点,SCN,时间,日志序列号,TO -- 代表回退到指定点Before -- 代表恢复到指定点之前的一点就可以。 #####################################################3 、Flashback Drop#####################################################这个功能是从Oracle 10g开始出现的,用于恢复用户误删的对象(表,索引)。这个技术依赖于Tablespace Recycle Bin(表空间回收).功能类似于Windows的回收站。1 Tablespace Recycle Bin从10g开始,每个表空间都会有一个叫作回收站的逻辑区域(占用表空间所在的空间),当用户执行Drop 命令时,被删除的表和表的关联对象(包括索引,约束,触发器,LOB段,LOB Index段)不会被物理删除,而是先转移到回收站中,使用Flashback Table命令可以恢复这个对象和所有的关联对象。不会物理清楚,是不是说明占用的物理空间仍没有释放,从dba_free_space能否反映空间的变化呢?缺省情况下recyclebin功能是开启的SQL> show parameter recyclebinNAME TYPE VALUE------------------------------------ ----------- ------------------------------recyclebin string onshow recyclebin 查看Recyclebin的对象列表(注意 RecycleBin是表空间级的,每个表空间都对应一个RecycleBin对象池)也可以通过视图来查看Recyclebin对象列表select object_name, original_name from recyclebin;既然是表空间级的,那这个语句反映的是哪个Recycelbin 池的内容呢?是执行语句的用户的默认表空间吧;可以像查看普通表一样,查看Recycle Bin中的对象内容select count(*) from "BIN$jOLWvgYhgyXgQOYKHREVtA==$0";对Recyclebin中的对象执行DDL/DML动作是不允许的.SQL> delete from "BIN$jOLWvgYhgyXgQOYKHREVtA==$0";delete from "BIN$jOLWvgYhgyXgQOYKHREVtA==$0" *ERROR at line 1:ORA-38301: can not perform. DDL/DML over objects in Recycle Bin 2 Flashback Drop 操作flashback table t to before drop;如果在recyclebin中有同名的对象,如两个表T都被删除,则恢复:flashback table "BIN$jOLWvgYhgyXgQOYKHREVtA==$0" to before drop;在恢复表的同时还可以重命名flashback table t to before drop rename to t_bak;Note: 一旦完成恢复,RecycleBin中的对象就消失 3 Recycle Bin的维护Recycle Bin 是和普通对象共用表空间存储区域的,或者说RecycelBin的对象要和普通对象抢夺存储空间。如果发生空间不够,Oracle会按照先入先出的顺序,也就是对象被删除的时间顺序覆盖Recycle Bin中的对象。也可以通过如下办法手动清除Recycle Bin占用的空间。1) #清空某个表空间的RecycleBin池Purge tablespace tablespace_name;2) #清空某个表空间内的某个用户的对象Purge tablespace tablespace_name user user_name;3) 清除删除当前用户的对象purge recyclebin4) 清除所有用户的对象Purge dba_recyclebin需要Sysdba权限5) Drop table xxx purge 永久删除6) purge index object_name 清除对象的关联索引 4 Flashback Drop 的局限性Flashback drop 是一个非常实用的技术,减少了很多不完全恢复的需要。 但仍存在一些局限性:1) 只能用于非系统表空间和本地管理表空间2) 不能对Recycle Bin中的对象执行DDL,DML操作,只支持查询3)对象的参考约束不会被恢复,也就是外键约束需要重建 #####################################################4、 Flashback Query and Flashback Table#####################################################这些功能的实现也依赖于Flashback 功能的打开吗?是的;Flashback Query 实际包含3个工具,即Flashback Query, Flashback Version Query 和 Flashback Transaction Query. 这些工具都是利用Undo的内容来实现回退功能。前两个属于分析工具,用于找出想要回退到的时间点,而Flashback Table才真正完成回退的操作。1 Flashback Query#查询过去某个时间点时的数据select * from emp as of timestamp to_timestamp('2010-08-03 10:55:15','yyyy-mm-dd hh24:mi:ss');# 恢复数据Insert into emp select * from emp as of timestamp to_timestamp('2010-08-03 10:55:15','yyyy-mm-dd hh24:mi:ss');2 Flashback Version Query相对于Flashback Query只能看到某一点的对象状态,Oracle 10g引入的Flashback Version Query可以看到过去某个时间段内,记录如何变化的。根据这个变化的历史,可以决断数据是在什么时间点发生了错误。#查看表EMP的操作历史col versions_xid format a16 heading 'XID'col versions_startscn format 99999999 heading 'Vsn|Start|SCN'col versions_endscn format 99999999 heading 'Vsn|End|SCN'col versions_operation format a12 heading 'Operation'select versions_xid, versions_startscn, versions_endscn,decode( versions_operation, 'I', 'Insert', 'U', 'Update', 'D', 'Delete', 'Original') "operation",id, namefrom empversions between scn minvalue and maxvalue;注意结果主从下向上看。Original代表最开始的数据。 3 相关的伪列1) ORA_ROWSCN记录最后一次被修改时的SCN, 这里的修改是指"被提交的修改",如果没有提交,那么这个伪列不会发生变化。ORA_ROWSCN 缺省是数据块级别的,也就是一个数据块内的所有记录都是一个ORA_ROWSCN. 数据块内的任意一条记录被修改,这个数据块内的所有记录ORA_ROWSCN都会同时改变。通过在建表时使用关键字rowdependencies, 可以改变这咱缺省行为。使用这个关键字后,每条记录都有自己的ORA_ROWSCN.创建表时,如果没有使用rowdependencies关键字,则ORA_ROWSCN使用的是数据块头的SCN,因此在一个数据块内所有记录的ORA_ROWSCN都一样。如果使用了rowdependencies关键字,则每个记录都有自己的ORA_ROWSCN。这个值来自于ITL或dscn字段。2)VERSIONS_STARTSCN表示这行记录获得的值是在哪个SCN获得的,如果为NULL,则表明这一行的值早于versions between scn MINVALUE and MAXVALUE中的MINVALUE。3) VERSIONS_STARTTIME同上4) VERSIONS_ENDSCN这行记录的这个值是到哪个SCN过期的。5) VERSIONS_TIME同上6) VERSIONS_XID导致事务修改的事务号7) VERSIONS_OPERATION修改类型U: updateI: insertD: delete两个函数:SCN_TO_TIMESTAMP(current_scn)select current_scn,scn_to_timestamp(current_scn) curr_time from v$database;TIMESTAMP_TO_SCN('yyyy-mm-dd hh24:mi:ss1')Notes要使用Flashback Version Query, 用户首先要有对象的Select, flashback权限,对表执行过DDL语句之后,就只能查看DDL语句之后的版本,也就是说Flashback Version Query 不会跨越DDL操作。Oracle 11g有没有改变,如果可以跨越DDL的话,就可以作为小范围内的审计了;?? 4 Flashback Transaction QueryFlashback Transaction Query 与Flashback Version Query类似,也是使用UNDO信息来实现,利用这个功能可以查看某个事务执行的所有变化。使用这个功能,需要访问Flashback_transaction_query视图select xid, operation, commit_scn, undo_sqlfrom flashback_transaction_querywhere xid in(select versions_xidfrom empversions between scn minvalue and maxvalue);XID OPERATION COMMIT_SCN UNDO_SQL---------------- -------------------------------- ---------- --------------------------------------------------------------------------------0500260003030000 INSERT 2160333 delete from "GZDC"."EMP" where ROWID = 'AAANPcAAEAAAABUAAB';0500260003030000 BEGIN 21603330A00050086020000 INSERT 2160316 delete from "GZDC"."EMP" where ROWID = 'AAANPcAAEAAAABUAAA';0A00050086020000 INSERT 2160316 delete from "GZDC"."DEP" where ROWID = 'AAANPbAAEAAAABMAAA';0A00050086020000 BEGIN 2160316可以看到每个事务的操作历史。5 Flashback tableFlashback table 真正进行数据的回退。如果想对表进行Flashback,必须允许row movement.alter table t1 enable row movement;flashback table emp,dep to scn xxxx;6 UNDO RetentionUNDO_RETENTION参数定义的是提交修改后的UNDO记录还要保留多长时间,但是Oracle并不强制保留,如果UNDO空间不够,即使时间没有达到限制,这些记录还是会被覆盖。可以通过在UNDO表空间或者数据库设置Retention Guanrantee来强制保留,缺省没有打开这个功能。select tablespace_name, retention from dba_tablespaces;TABLESPACE_NAME RETENTION------------------------------ -----------SYSTEM NOT APPLYUNDOTBS1 NOGUARANTEESYSAUX NOT APPLYTEMP NOT APPLYUSERS NOT APPLYalter tablespace UNDOTBS1 retention guarantee;SQL> select tablespace_name, retention from dba_tablespaces;TABLESPACE_NAME RETENTION------------------------------ -----------SYSTEM NOT APPLYUNDOTBS1 GUARANTEESYSAUX NOT APPLYTEMP NOT APPLYUSERS NOT APPLY即使强制后,如果空间出现不够时,如何处理? #####################################################5 小结#####################################################Flashback 家族技术总结:工具 -- 相关技术 -- 目的1) Flashback database -- Flashback Log -- 回滚数据库2) Flashback drop -- Tablespace Bin -- 恢复用户误删的对象3) Flashback Version Query -- UNDO -- 恢复用户误删的操作4) Flashback Transaction Query -- UNDO -- 恢复用户误删的操作5) Flashback table -- UNDO -- 恢复用户误删的操作,在表级别上的操作