Oracle临时表空间管理及清理策略
正常来说,在完成Select语句、create index等一些使用TEMP表空间的排序操作后,Oracle是会自动释放掉临时段a的。
但有些有侯我们则会遇
到临时段没有被释放,TEMP表空间几乎满的状况,甚至是我们重启了数据库仍没有解决问题。
这个问题在论坛中也常被网友问到,下面我总结
一下,给出几种处理方法。
法一、重启库
库重启时,Smon进程会完成临时段释放,TEMP表空间的清理操作,不过很多的时侯我们的库是不允许down的,所以这种方法缺少了一点的
应用机会,不过这种方法还是很好用的。
法二、Metalink给出的一个方法
修改一下TEMP表空间的storage参数,让Smon进程观注一下临时段,从而达到清理和TEMP表空间的目的。
SQL>alter tablespace temp increase 1;
SQL>alter tablespace temp increase 0;
法三、我常用的一个方法,具体内容如下:
1、使用如下语句a查看一下认谁在用临时段
SELECT username,
sid,
serial#,
sql_address,
machine,
program,
tablespace,
segtype,
contents
FROM v$session se,
v$sort_usage su
WHERE se.saddr=su.session_addr
2、那些正在使用临时段的进程
SQL>Alter system kill session 'sid,serial#';
3、把TEMP表空间回缩一下
SQL>Alter tablespace TEMP coalesce;
法四、使用诊断事件的一种方法,也是被我认为是“杀手锏”的一种方法
1、确定TEMP表空间的ts#
SQL>select ts#, name from sys.ts$ ;
TS# NAME
-----------------------
0 SYSYEM
1 RBS
2 USERS
3* TEMP
4 TOOLS
5 INDX
6 DRSYS
2、执行清理操作
SQL>alter session set events 'immediate trace name DROP_SEGMENTS level 4' ;
说明:
temp表空间的TS# 为 3*, So TS#+ 1= 4
其它:
1、出现如上问题的原因我认为可能是由于大的排序超出了TEMP表空间的空间允许范围引起的。
也可能包含着其它的异常的因素。
2、观注TEMP等这些空间的状态是Dba日常职责之一,我们可以通过Toad、Object Browser等这些工具办到,也可以用如下的语句:
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
2),
'990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC
1、使用如下语句查看一下认谁在用临时段
SELECT ername, s.sid, s.serial#, s.sql_address, s.machine, s.program, su.tablespace, su.segtype, su.contents
FROM v$session s, v$sort_usage su
WHERE s.saddr = su.session_addr;
2、那些正在使用临时段的进程
SQL>Alter system kill session 'sid,serial#';
3、把TEMP表空间回缩一下
SQL>Alter tablespace TEMP coalesce
重建临时表空间
1.创建中转临时表空间
create temporary tablespace TEMP2 TEMPFILE
'E:ORACLEORADATAORCL9temp03.DBF' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE
UNLIMITED;
2.改变缺省临时表空间为刚刚创建的新临时表空间temp2
alter database default temporary tablespace temp2;
3.删除原来临时表空间
drop tablespace temp including contents and datafiles;
4.重新创建临时表空间
create temporary tablespace TEMP TEMPFILE
'E:ORACLEORADATAORCL9temp01.DBF' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE
UNLIMITED;
5.重置缺省临时表空间为新建的temp表空间
alter database default temporary tablespace temp;
6.删除中转用临时表空间
drop tablespace temp2 including contents and datafiles;
create temporary tablespace TEMP1 TEMPFILE 'f:oracleoradataoracledbtemp01.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE
UNLIMITED;
alter database default temporary tablespace temp1;
drop tablespace temp including contents and datafiles;
create temporary tablespace TEMP TEMPFILE 'f:oracleoradataoracledbtemp1.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 1M MAXSIZE
UNLIMITED;
alter database default temporary tablespace temp;
drop tablespace temp1 including contents and datafiles;。
Oracle临时表空间满的处理步骤
Oracle临时表空间主要用来做查询和存放一些缓冲区数据。
临时表空间消耗的主要原因是需要对查询的中间结果进行排序。
重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp 表空间会一直增长。
直到耗尽硬盘空间。
临时表空间不足,会产生如下报错:网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。
也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。
临时表空间的主要作用:索引create或rebuildOrder by 或 group byDistinct 操作Union 或 intersect 或 minusSort-merge joinsanalyze清除临时表空间的方法治标不治本从根本上降低temp表空间的膨胀的方法有2个:1 设置合理的pga或sort_area_size2 优化引起disk sort的sql清除并重建临时表空间的步骤:0.shutdown immediate;1.startup --启动数据库2.create temporary tablespace TEMP2 TEMPFILE'E:/oracle/oradata/battery/temp02.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED; --创建中转临时表空间3.alter database default temporary tablespace temp2;--改变缺省临时表空间为刚刚创建的新临时表空间temp24.drop tablespace temp including contents and datafiles;--删除原来临时表空间5. create temporary tablespace TEMP TEMPFILE 'E:/oracle/oradata/battery/temp.dbf' SIZE 512M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED; --重新创建临时表空间6.alter database default temporary tablespace temp;--重置缺省临时表空间为新建的temp表空间7.drop tablespace temp2 including contents and datafiles;--删除中转用临时表空间8.alter user backwardsys temporary tablespace temp; --重新指定用户表空间(用户名)为重建的临时表空间9.可通过语句select username,default_tablespace,temporary_tablespace from dba_users 来查询数据库用户的临时表空间。
Oracle-undo-表空间管理
Oracle-undo-表空间管理Oracle的Undo表空间管理是Oracle数据库中非常重要而又基础的管理工作之一。
因为数据库中的Undo表空间与事务有着紧密的联系,影响着数据库的性能和稳定性。
本文将对Oracle的Undo表空间管理进行详细介绍,包括Undo表空间的概念、作用、管理方法、优化等方面。
一、Undo表空间的概念Undo表空间是用来存储Oracle数据库中操作的回滚信息,主要的作用是进行事务的回滚和恢复。
在Oracle数据库中,事务的ACID属性可以保证数据的完整性和一致性,而Undo表空间就是为了保证事务的ACID属性而存在的。
在Oracle数据库中,Undo表空间分为两种类型:System Undo表空间和User Undo表空间。
系统Undo表空间是由系统自动创建的一个表空间,用于存储系统级的回滚信息,用户不能自己创建或删除该表空间。
而用户Undo表空间则是由用户自己创建的,用来存储用户级别的回滚信息,一个数据库中可以有多个用户Undo表空间。
二、Undo表空间的作用Undo表空间的作用非常重要,它主要用来完成以下几个方面的功能:1. 事务的回滚当某个事务需要回滚时,Oracle会将该事务所做的修改操作写入到Undo表空间中,然后撤销这些操作来回滚事务。
因此Undo表空间的存储能力和速度直接影响着Oracle数据库回滚事务的性能和效率。
2. 数据库恢复当数据库需要恢复时,Oracle会利用Undo表空间中的回滚信息将数据库恢复到特定的时间点。
因此Undo表空间存储的时间范围和存储能力对数据库恢复能力有着直接的影响。
3. MVCC机制在Oracle数据库中,MVCC(多版本并发控制)机制是一种用来实现并发控制的技术,它需要利用Undo表空间中的回滚信息来实现数据的版本控制。
当多个事务同时对一个数据进行操作时,Undo表空间就派上用场了。
三、Undo表空间的管理方法为了更好地管理Undo表空间,我们需要掌握以下几种管理方法:1. 创建Undo表空间在Oracle数据库中,可以通过语句CREATE UNDO TABLESPACE来创建Undo表空间。
Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等
Oracle tablespace (表空间)的创建、删除、修改、扩展及检查等oracle 数据库表空间的作用1.决定数据库实体的空间分配;2.设置数据库用户的空间份额;3.控制数据库部分数据的可用性;4.分布数据于不同的设备之间以改善性能;5.备份和恢复数据。
--oracle 可以创建的表空间有三种类型:1.temporary: 临时表空间,用于临时数据的存放;create temporary tablespace "sample"......2.undo : 还原表空间. 用于存入重做日志文件.create undo tablespace "sample"......3.用户表空间: 最重要,也是用于存放用户数据表空间create tablespace "sample"......--注:temporary 和undo 表空间是oracle 管理的特殊的表空间.只用于存放系统相关数据.--oracle 创建表空间应该授予的权限1.被授予关于一个或多个表空间中的resource特权;2.被指定缺省表空间;3.被分配指定表空间的存储空间使用份额;4.被指定缺省临时段表空间。
select tablespace_name "表空间名称",status "状态",extent_management "区管理方式",allocation_type "磁盘扩展管理方式",segment_space_management "段管理方式" from dba_tablespaces;--查询各个表空间的区、段管理方式--1、建立表空间--语法格式:create tablespace 表空间名datafile '文件标识符' 存储参数[...]|[minimum extent n] --设置表空间中创建的最小范围大小|[logging|nologging]|[default storage(存储配置参数)]|[online|offline]; --表空间联机\脱机|[permanent|temporary] --指定该表空间是用于保存永久的对象还是只保存临时对象 |[...]--其中:文件标识符=’文件名’[size整数[k\m][reuse]--实例create tablespace data01datafile '/oracle/oradata/db/data01.dbf' size 500muniform size 128k; --指定区尺寸为128k,如不指定,区尺寸默认为64kcreate tablespace "test"loggingdatafile 'd:\oracle\oradata\oracle\sample.ora' size 5m,'d:\oracle\oradata\oracle\dd.ora' size 5mextent management localuniform segment space managementauto;--详解/*第一: create tablespace "sample"创建一个名为"sample" 的表空间.对表空间的命名,遵守oracle 的命名规范就可了. 第二: logging 有nologging 和logging 两个选项,nologging: 创建表空间时,不创建重做日志.logging 和nologging正好相反, 就是在创建表空间时生成重做日志.用nologging时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复;但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的;所以通常不需要表空间的创建日志,因此,在创建表空间时,选择nologging,以加快表空间的创建速度.第三: datafile 用于指定数据文件的具体位置和大小.datafile 的文件是建立表空间后创建的,不过文件路径必须存在才是合法的datafile设置如: datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m说明文件的存放位置是'd:\oracle\oradata\ora92\luntan.ora' , 文件的大小为5m.如果有多个文件,可以用逗号隔开:如:datafile 'd:\oracle\oradata\ora92\luntan.ora' size 5m, 'd:\oracle\oradata\ora92\ dd.ora' size 5m但是每个文件都需要指明大小.单位以指定的单位为准如5m 或500k.对具体的文件,可以根据不同的需要,存放大不同的介质上,如磁盘阵列,以减少io竟争. 指定文件名时,必须为绝对地址,不能使用相对地址.第四: extent management local 存储区管理方法在字典中管理(dictionary):将数据文件中的每一个存储单元做为一条记录,所以在做dm操作时,就会产生大量的对这个管理表的delete和update操作.做大量数据管理时,将会产生很多的dm操作,严得的影响性能,同时,长时间对表数据的操作,会产生很多的磁盘碎片.本地管理(local):用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘.同时能够自动跟踪记录临近空闲空间的情况,避免进行空闲区的合并操作。
oracle清空表的语句
oracle清空表的语句摘要:I.简介- 介绍Oracle数据库- 介绍清空表的语句II.清空表的语句- 删除表中所有记录- 使用TRUNCATE TABLE语句- 使用DROP TABLE语句III.注意事项- 避免数据丢失- 确保操作合法IV.结论- 总结清空表的语句- 强调谨慎操作正文:I.简介Oracle是一种广泛使用的关系型数据库管理系统,其强大的功能和稳定性深受用户的喜爱。
在Oracle数据库中,清空表的语句是经常用到的操作。
它可以用于删除表中所有记录,以便重新填充数据或进行其他操作。
II.清空表的语句在Oracle数据库中,有三种清空表的语句:1.删除表中所有记录使用DELETE语句可以删除表中所有满足特定条件的记录。
例如:```sqlDELETE FROM table_name WHERE condition;```其中,`table_name`是表名,`condition`是删除记录的条件。
2.使用TRUNCATE TABLE语句TRUNCATE TABLE语句可以快速删除表中的所有记录,但无法回滚此操作。
例如:```sqlTRUNCATE TABLE table_name;```其中,`table_name`是表名。
3.使用DROP TABLE语句DROP TABLE语句可以删除整个表,包括表结构和相关数据。
例如:```sqlDROP TABLE table_name;```其中,`table_name`是表名。
III.注意事项在清空表时,需要注意以下几点:1.避免数据丢失清空表时,务必确保已经备份了重要数据,以防止数据丢失。
2.确保操作合法在进行清空表的操作时,请确保您具有合法的权限。
否则,可能会导致操作失败或数据泄露。
IV.结论总之,在Oracle数据库中,清空表的语句有多种方法,包括DELETE、TRUNCATE TABLE和DROP TABLE。
Oracle10g的临时表空间占满之后的解决方法。
Oracle10g的临时表空间占满之后的解决方法。
公司客户数据库用了一段时间之后,总是出现磁盘被占满的情况。
基本上这个情况要么就是undo表空间很大,要么就是临时表空间很大,这个时候就需要进行转储undo表空间或者临时表空间。
以下是解决方法。
---解决临时表空间Temp的方法TEMP文件尚未调整,还是16G,首先创建了一个新的TEMP文件并设定为缺省临时表空间SQL> create temporary tablespace TEMP3 TEMPFILE '/opt/oracle/oradata/cuss/TEMP2.dbf' size 20m reuse autoextend off;SQL>alter database default temporary tablespace "TEMP2"结果这个情况下做exp产生ORA-01403的错误,后来得知是因为TEMP临时表空间容量过小的原因重新创建一个TEMP3文件,初始大小1G,每次增长200M,最大限制为4G。
SQL> create temporary tablespace TEMP3 TEMPFILE'/opt/oracle/oradata/cuss/TEMP3.dbf' size 1000m reuse autoextend on next 200m maxsize 4000m;把缺省临时表空间指向这个新建的TEMP3。
SQL>alter database default temporary tablespace "TEMP3"删除原有的临时表空间文件和操作系统中的对应物理文件,释放磁盘空间SQL>drop tablespace temp2 including contents and datafiles;重新做exp导出,导出成功。
至此调整结束。
Oracle临时表空间不足和批处理缓慢问题探讨
Oracle临时表空间不足和批处理缓慢问题探讨谭红斌【摘要】数据库系统出现问题时,会导致整个系统不稳定.文章分析了Orcale临时表空间不足和批量处理时运行速度缓慢的原因,并给出了解决办法.【期刊名称】《天中学刊》【年(卷),期】2012(027)002【总页数】3页(P36-38)【关键词】SQL;hash;join;临时表空间【作者】谭红斌【作者单位】驻马店职业技术学院,河南驻马店463000【正文语种】中文【中图分类】TP392笔者所在学院的学生管理系统后台使用的是Oracle数据库.在每天凌晨批处理期间,ALERT日志频繁报出临时表空间不足的告警信息,导致批量程序运行失败.在对临时表空间进行多次扩容后(从40 GB增加到 60 GB,再增加到 100 GB),问题仍然无法有效地解决.即使在批量执行成功的时候,也需要执行很长时间才能完成.为了解决此问题,急需对该问题进行全面排查,以找到解决办法.根据以往的经验,笔者分析认为造成这一问题的原因可能是服务器硬件存在性能问题、操作系统设置有问题或者是应用本身的 SQL语句编写有问题.为此,笔者衡量服务器的运算能力以及该数据库的负载,使用测试工具测试,并未发现服务器及Oracle本身的瓶颈问题.因此,把问题定位在应用逻辑方面,并做了如下详细的测试.查看数据库 AWR报告,发现该报告未能准确体现出占用临时表空间最高的SQL 语句.为此,笔者编写了一个记录使用临时表空间SQL语句的shell脚本,用来记录使用临时表空间最高的SQL语句,并将其保存在特定的表中.该脚本的部分SQL语句编写如下:在临时表空间已增加到 100 GB的情况下,重新进行批量运行,出现临时表空间不足错误时,笔者根据编写的监控脚本,顺利抓取到了最消耗临时表空间的两个语句.其中,语句1消耗约40 GB临时表空间,语句2消耗约60 GB临时表空间.由于语句1和语句2的语法结构完全一致,只是批量处理的数据不一样,故这两个语句可用同一语句描述,具体如下:分析语句发现,执行计划使用了hash join连接技术,当驱动表无法在内存中装载时,驱动表一次或多次被置换到临时表空间,发生one-pass或muti-pass的现象,导致临时表空间的消耗和执行效率的低下.由于语句1和2结构完全一致,因此对语句1分析和优化即可,根据监控脚本所抓取到的SQL语句及其id,我们得到了如图1所示的执行计划信息.由图1可以看出,该执行计划的问题在于出现了“merge join cartesian”合并连接笛卡尔乘积,而其乘积结果作哈希连接的驱动表.由于PGA(程序全局区)中的hash area无法完全装载该表,导致出现one-pass、muti-pass,大量占用临时表空间,程序运行效率低下.该合并连接笛卡尔乘积将产生约1 700万条记录,而PGA大小为 1 628 M,hash area最多能使用 1628*5% = 80 M,显然80 M的hash area无法装载更多记录的运算结果,继而大量占用临时表空间,导致程序运行效率低下.SQL优化器CBO之所以选择合并连接笛卡尔乘积,原因在于CBO评估合并连接笛卡尔乘积返回的结果为1行,检查设置该语句的三个分区表的统计信息,发现统计信息为0行.至此,问题已经清楚.由于批量的流程为数据加载、运算、数据全删除.因此系统自动统计信息时往往在批量数据全部删除后进行,导致采集的统计信息的为0行,继而CBO选择了合并连接笛卡尔乘积,导致了错误的执行计划、大量的临时表空间占用和性能低下的执行计划.根据每个系统每日数据并不大的情况,理想的执行计划应为:子查询中的D表和E表做hash join,所产生的结果集做为另外一个hash join的probe表去探测A 表.将复合记录的结果返回.由此,子查询不应该做view merge.我们将语句改写,限制数据库CBO优化器做出错误的执行计划选择.语句重写后,在很短时间内即可完成,同时,未出现对临时表空间的消耗现象.以下为修改后语句的部分内容,其执行计划为笔者所预期的理想路径,执行计划信息如图2所示.语句在修改前在执行时间超过 1个小时仍未结束,而经过语句重写后,测试显示不到1分钟即可完成,同时也消除了对临时表空间的过量消耗的问题.根据以上分析,笔者认为要提高SQL语句的编写效率,简化SQL的处理逻辑,在应用编写时应考虑到表的增量以及相应的执行计划,在关键SQL语句中使用显式执行计划.系统关键SQL语句应考虑:(1) 使用 hint稳定执行计划,通过在子查询中加入no_merge的hint防止CBO 优化器做view merge.同时,由于子查询内部的谓词中已有分区键,且CBO可有效使用分区去除,故通过加入no_index的hint可使对单个分区扫描的索引范围更加有效.(2) 基于批量处理的流程,可在调用批量程序运行的shell脚本,数据加载完毕,并对相关的三张表进行统计信息的收集之后,再开始做merge的批量操作.【相关文献】[1] 滕永昌.Oracle数据库系统管理[M].北京:清华大学出版社,2003:80―96.[2] 郑阿奇.ORACLE实用教程[M].北京:电子工业出版社,2009:120―160.[3] 文平.ORACLE大型数据库系统在AIX\UNIX上的实战详解[M].北京:电子工业出版社,2010:66.[4] 王彬.Oracle IIg基础与提高[M].北京:电子工业出版社,2009:230―261.[5] 肖平.基于Oracle应用服务器的Web开发技术[M].北京:清华大学出版社,2010:90.。
深入浅出谈Oracle临时表
关于临时表上的DML活动,有以下结论: 活动,有以下结论: 关于临时表上的 活动
• 1、 INSERT 会生成很少甚至不生成undo/redo活动。因此,临 时表对insert/select型的应用很有用。 比如在处理web翻页时, 可以通过临时表来模拟cache返回结果。 • 2、 DELETE 在临时表上生成的redo与正常表上生成的redo同 样多。 • 3 、临时表的UPDATE会生成正常表UPDATE一半的redo。
在一个SESSION中(比如SQLPLUS登陆)插入上面3条记录,然后再以另外一个SESSION(用 SQLPLUS再登陆一次)登陆,当你select * from classes;的时候,classes表是空的,而你再第 一次登陆的SQLPLUS中select的时候可以查询到,这个时候你没有进行commit或者rollback之前 你可以对刚才插入的3条记录进行update、delete等操作,当你进行commit或者rollback的时候, 这个时候由于你的表是事务级的临时表,那么在插入数据的session也看不到数据了,这个时候 数据就已经被截断了。
什么时候使用临时表? 什么时候使用临时表?
• 1)、当某一个SQL语句关联的表在2张及以上,并且和一些小表 关联。可以采用将大表进行分拆并且得到比较小的结果集合存放 在临时表中。 • 2)、程序执行过程中可能需要存放一些临时的数据,这些数据在 整个程序的会话过程中都需要用的等等。
<Insert Picture Here>
事务级SQL操作 操作 事务级
• • • • • • • • • • SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(1,'计算机','9608'); 1 row inserted SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(2,'经济信息','9602'); 1 row inserted SQL> insert into classes(Class_id,Class_Name,Class_Memo) values(3,'经济信息','9603'); 1 row inserted SQL> update classes set class_memo ='' where class_id=3 ; 1 row updated SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------1 计算机 9608 2 经济信息 9602 3 经济信息 SQL> delete from classes where class_id=3 ; 1 row deleted SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------1 计算机 9608 2 经济信息 9602 SQL> commit; Commit complete SQL> select *from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------SQL> 再重复插入一次,然后rollback。 SQL> Rollback ; Rollback complete SQL> select * from classes ; CLASS_ID CLASS_NAME CLASS_MEMO -------- ---------- -------------------------------------------------------------------------------SQL>
oracle数据库数据备份清理机制
oracle数据库数据备份清理机制
Oracle数据库有多种备份和恢复机制可以使用,其中包括:
1. 数据库完整备份:使用RMAN (Recovery Manager)工具进行
数据库完整备份。
RMAN可以创建一个完整备份集,包含数
据库中的所有数据文件、日志文件和控制文件。
通过使用RMAN进行完整备份,可以轻松地恢复数据库到一个特定的
时间点。
2. 增量备份:使用RMAN进行增量备份,只备份自上次备份
以来发生更改的数据块。
这种备份机制可以减少备份的时间和存储空间,但在恢复时需要借助完整备份。
3. 归档日志备份:在归档模式下,Oracle将数据库的已提交事
务记录到归档日志中。
通过备份归档日志,可以实现点-in-
time的恢复和恢复到特定的时间点。
4. 数据库闪回:Oracle提供了闪回数据库(Flashback Database)功能,可以快速地将整个数据库恢复到一个特定的时间点,而不是单独恢复数据文件。
这种机制可以避免备份和恢复的过程。
在备份完成后,可以根据存储空间和备份策略的要求来清理备份。
可以使用RMAN的DELETE命令来删除不需要的备份。
可以使用RMAN的RETENTION POLICY来设置RMAN应保
留的备份的时间段。
oracle删除用户及空闲表空间释放空间
第一步:删除过期用户 DROP USER colin CASCADE; 第二步:查询过期用户相关的表空间是否还有对象 SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAMEFROM DBA_SEGMENTSWHERE TABLESPACE_NAME IN(SELECT TABLESPACE_NAMEFROM DBA_TABLESPACESWHERE TABLESPACE_NAME LIKE '%COLIN%') 第三步:转移过期用户表空间上的对象到其他表空间 ALTER TABLE tab_colin MOVE TABLESPACE colin_song_tbs;ALTER INDEX idx_tab_colin REBUILD TABLESPACE colin_song_idx_tbs; 第四步:查询无对象的表空间 SELECT 'DROP TABLESPACE ' || TABLESPACE_NAME ||INCLUDING CONTENTS AND DATAFILES;'FROM DBA_TABLESPACESWHERE NOT EXISTS (SELECT 12FROM DBA_SEGMENTSWHEREDBA_SEGMENTS.TABLESPACE_NAME =DBA_TABLESPACES.TABLESPACE_NAME); 第五步:删除之把上述查询出来的语句贴到文本编辑里检查下( PS:这里会包含一个 temp 的临时表空间一定要去掉啊 )SQL> drop tablespace STAT_FTFY_CHRGSTAY_DTBS including contents and datafiles;Tablespace droppedSQL> drop tablespace STAT_FTFY_CHRGNEW_WIXTBS including contents and datafiles;Tablespace droppedSQL> drop tablespace STAT_FTFY_CHRGSMR_MIXTBS including contents and datafiles;Tablespace dropped最后去看下你的系统空间应该释放了吧。
Oracle临时表和临时表空间组
Oracle临时表和临时表空间组一、临时表功能介绍:Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时。
每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的。
并且不产生日志。
Oracle 的临时表分为事务型和会话型。
事务型临时表就是指在事务处理过程中插入的记录只在事务提交或回滚之前有效,一旦事务完成,表中的记录便被自动清除。
会话型临时表指临时表中的数据在本次会话期间一直有效,直到会话结束。
会话结束后表中针对此次会话的数据会自动清空。
Oracle 临时表的不足之处:1、不支持lob对象,例如Spatial 的SDO_GEOMETRY。
这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。
2、不支持主外键关系。
这意味着临时表创建临时表的语法:CREATE GLOBAL TEMPORARY TABLE table"(" column datatype [DEFAULT expr] [{ NULL | NOT NULL}][, column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")"ON COMMIT {DELETE | PRESERVE } ROWS ;--SampleCREATE GLOBAL TEMPORARY TABLE TABLE_NAME (COL1 VARCHAR2(10),COL2 NUMBER) ON COMMIT PRESERVE(DELETE) ROWS ;如果选择PRESERVE ROWS,则在会话结束后表中的数据自动清空,如果选了DELETE ROWS,则在提交的时候即清空数据,PRESERVE则一直到会话结束。
Oracle中的临时表有两种一种是事务级别的临时表它在事务结束的时候自动清空记录,另一种是会话级的它在我们访问数据库时的一个会话结束后自动的清空。
