当前位置:首页 » 存储配置 » oracle存储过程truncate

oracle存储过程truncate

发布时间: 2024-07-18 19:46:17

‘壹’ truncate和delete之间有什么区别

truncate和delete的主要区别:

1、delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。

2、delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。

3、delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。

4、truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。

5、truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage,。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。

6、对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。

7、truncatetable不能用于参与了索引视图的表。

(1)oracle存储过程truncate扩展阅读:

在速度上,一般来说truncate>delete。

如果想保留表而将所有数据删除,如果和事务无关,用truncate就好。

如果和事务有关,或者想触发trigger,还是用delete。

‘贰’ Oracle 删除表中记录 如何释放表及表空间大小

解决方案

执行

sql">altertablejk_testmove

altertablejk_testmovestorage(initial64k)


altertablejk_testdeallocateunused

altertablejk_testshrinkspace.

注意:因为alter table jk_test move 是通过消除行迁移,清除空间碎片,删除空闲空间,实现缩小所占的空间,但会导致此表上的索引无效(因为ROWID变了,无法找到),所以执行 move 就需要重建索引。


找到表对应的索引

selectindex_name,table_name,tablespace_name,index_type,statusfromdba_indexeswheretable_owner='SCOTT'

根据status 的值,重建无效的就行了。sql='alter index '||index_name||' rebuild'; 使用存储过程执行,稍微安慰。

还要注意alter table move过程中会产生锁,应该避免在业务高峰期操作!



另外说明:truncate table jk_test 会执行的更快,而且其所占的空间也会释放,应该是truncate 语句执行后是不会进入oracle回收站(recylebin)的缘故。如果drop 一个表加上purge 也不会进回收站(在此里面的数据可以通过flashback找回)。


不管是delete还是truncate 相应数据文件的大小并不会改变,如果想改变数据文件所占空间大小可执行如下语句:

alterdatabasedatafile'filename'resize8g

重定义数据文件的大小(不能小于该数据文件已用空间的大小)。


另补充一些PURGE知识

Purge操作:

1). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin

2). Purge tablespace tablespace_name user user_name: 清空指定表空间的Recycle Bin中指定用户的对象

3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象。

4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限

5). Drop table table_name purge:删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。

6). Purge index recycle_bin_object_name: 当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。 因为索引是可以重建的。

二、如果某些表占用了数据文件的最后一些块,则需要先将该表导出或移动到其他的表空间中,然后删除表,再进行收缩。不过如果是移动到其他的表空间,需要重建其索引。

1、

SQL>altertablet_objmovetablespacet_tbs1;---移动表到其它表空间

也可以直接使用exp和imp来进行

2、

SQL>alterowner.index_namerebuild;--重建索引


3、删除原来的表空间

‘叁’ Oracle数据库的面试题目及答案

Oracle数据库的面试题目及答案

基础题目:

1. 比较truncate和 命令

解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .

而Delete是DML操作, 需要rollback segment 且花费较长时间.

【相同点

truncate和不带where子句的, 以及drop都会删除表内的数据

不同点:

1. truncate和 只姿轿删除数据不删除表的结构(定迹谈肆义)

drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的.存储过程/函数将保留,

但是变为invalid状态.

2.语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.

truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

3.语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动

显然drop语句将表所占用的空间全部释放

truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使侍渣用reuse storage; truncate会将高水线复位(回到最开始).

4.速度,一般来说: drop>; truncate >;

5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及

使用上,想删除部分数据行用,注意带上where子句. 回滚段要足够大.

想删除表,当然用drop

想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用.

如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据

2.Oracle中,需要在查询语句中把空值(NULL)输出为0,如何处理?

答案:nvl(字段,0).

nvl( ) 函数

从两个表达式返回一个非 null 值。

语法

NVL(eExpression1, eExpression2)

参数

eExpression1, eExpression2

如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不是 null 值,

则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。如果 eExpression1 与 eExpression2

的结果皆为 null 值,则 NVL( ) 返回 .NULL.。

返回值类型

字符型、日期型、日期时间型、数值型、货币型、逻辑型或 null 值

说明

在不支持 null 值或 null 值无关紧要的情况下,可以使用 NVL( ) 来移去计算或操作中的 null 值。

select nvl(a.name,空得) as name from student a join school b on a.ID=b.ID

注意:两个参数得类型要匹配

3.Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到10)和varchar2(10)类型的字段中,

其存储长度及类型有何区别?

答案:

区别: 1).CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“test",对于CHAR (10),


;
热点内容
android虚拟键高度 发布:2024-08-31 14:59:44 浏览:246
androidstudio如何 发布:2024-08-31 14:54:00 浏览:626
金蝶连接服务器ip地址变化 发布:2024-08-31 14:21:30 浏览:633
安卓充电器在哪里买靠谱 发布:2024-08-31 14:21:29 浏览:269
小米便签私密文件夹 发布:2024-08-31 14:21:28 浏览:962
python搭建http服务器 发布:2024-08-31 14:21:23 浏览:205
存储段基址 发布:2024-08-31 14:20:12 浏览:856
百米路由器登录账号密码是多少 发布:2024-08-31 14:18:55 浏览:893
金钱手源码 发布:2024-08-31 14:15:51 浏览:738
视频删了还占存储 发布:2024-08-31 14:08:59 浏览:624