当前位置:  数据库>oracle

Oracle 12c中数据删除(delete)新特性之数据库内归档功能

    来源: 互联网  发布时间:2017-06-27

    本文导语: 有些应用有“标记删除”的概念,即不是删除数据,而是数据依然保留在表中,只是对应用不可见而已。这种需求通常通过如下方法实现: 1)  给相关表增加一个另外的列,该列存储标志数据被删除的标记。 2)  给每个语句增加...

有些应用有“标记删除”的概念,即不是删除数据,而是数据依然保留在表中,只是对应用不可见而已。这种需求通常通过如下方法实现:

1)  给相关表增加一个另外的列,该列存储标志数据被删除的标记。

2)  给每个语句增加一个谓词,检查被删除行的状态,像:“WHERE deleted = 'N'”,以便排除被删除行。 谓词能被硬编码进SQL语句中,或动态应用类似VPD的安全策略。

数据库内归档是Oracle12c的新特性,该特性可以对现有代码做最少改动的情况下,实现了这种“标记删除”的功能和需求。

1.  开启数据库内归档

ROW ARCHIVAL子句被用来开启数据库内归档。该子句可以用在创建表时用在CREATE TABLE中,也可以在表创建后用在ALTER TABLE中。

DROPTABLE tab1 PURGE;

--创建表并开启数据库内归档特性

CREATETABLE tab1 (

  no        NUMBER,

  desc VARCHAR2(50),

  CONSTRAINT tab1_pk PRIMARY KEY (no)

)

ROWARCHIVAL;

--禁用并重新开启数据库内归档特性

ALTERTABLE tab1 NO ROW ARCHIVAL;

ALTERTABLE tab1 ROW ARCHIVAL;

--往表中加入1000行数据。

INSERT INTO tab1

SELECTlevel, 'Description of ' || level

FROM  dual

CONNECTBY level

开启数据库内归档特性将会引起表另外增加一个叫做“ORA_ARCHIVE_STATE”系统隐藏列。

COLUMNcolumn_name FORMAT A20

COLUMNdata_type FORMAT A20

SELECTcolumn_id,

      column_name,

      data_type,

      data_length,

      hidden_column

FROM  user_tab_cols

WHERE  table_name = 'TAB1'

ORDERBY column_id;

 COLUMN_ID COLUMN_NAME        DATA_TYPE          DATA_LENGTH HID

------------------------------ -------------------- ----------- ---

        1NO                  NUMBER                      22 NO

        2DESC        VARCHAR2                    50 NO

          ORA_ARCHIVE_STATE  VARCHAR2                  4000 YES

SQL>

默认的,该列的每行被填充为‘0’。

COLUMNora_archive_state FORMAT A20

SELECTora_archive_state, COUNT(*)

FROM  tab1

GROUPBY ora_archive_state

ORDERBY ora_archive_state;

ORA_ARCHIVE_STATE      COUNT(*)

------------------------------

0                          1000

1row selected.

SQL>

2.  归档(删除)的行

并非删除不需要的行,而是把ORA_ARCHIVE_STATE系统隐藏列的值更改为‘1’。这将导致应用看不到这些行。

UPDATEtab1

SET    ora_archive_state = '1'

WHERE  no BETWEEN 751 and 1000;

COMMIT;

SELECTCOUNT(*) FROM tab1;

  COUNT(*)

----------

      750

SQL>

其实,可以把ORA_ARCHIVE_STATE列设置为非‘0‘的其他任何字符串值来归档这些数据,但DBMS_ILM包使用如下常量。

1)  ARCHIVE_STATE_ACTIVE='0'

2)  ARCHIVE_STATE_ARCHIVED='1'

3.  显示归档行

通过将ROW_ARCHIVAL_VISIBILITY设置为ALL,可以使得这些隐藏行对会话可见。将该参数设置回ACTIVE可以再次使这些行不可见。

--使归档的行可见

ALTERSESSION SET ROW ARCHIVAL VISIBILITY = ALL;

SELECTCOUNT(*) FROM tab1;

  COUNT(*)

----------

      1000

SQL>

COLUMNora_archive_state FORMAT A20

SELECTora_archive_state, COUNT(*)

FROM  tab1

GROUPBY ora_archive_state

ORDERBY ora_archive_state;

ORA_ARCHIVE_STATE      COUNT(*)

------------------------------

0                          750

1                          250

2rows selected.

SQL>

--使归档行再次不可见

ALTERSESSION SET ROW ARCHIVAL VISIBILITY = ACTIVE;

SELECTCOUNT(*) FROM tab1;

  COUNT(*)

----------

      750

SQL>


    
 
 

您可能感兴趣的文章:

  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • ORACLE数据库常用字段数据类型介绍
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • jsp文件上传smartupload到oracle数据库中没有longblob的数据类型如何处理的?
  • 将Oracle 8i数据成功移植Oracle 10g的方法
  • Oracle收购TimesTen 提高数据库软件性能
  • 我从JSP页将数据插入到oracle数据库中,为何汉字插入后数据库中显示为乱码呢?
  • Oracle数据库恢复后心得
  • 紧急求救:对Oracle数据库中long 型数据进行模糊查询 如何查?
  • Linux下Oracle数据库,dbstart持续不动,数据库无法启动解决
  • 卸载oracle数据库
  • 切换Oracle的归档模式以及非归档模式
  • oracle的归档模式 ORACLE数据库归档日志常用命令
  • 更改Oracle数据库的归档模式
  • 查看修改Oracle10G归档日志空间的限制
  • 关于Oracle将目标数据库设为归档模式应该注意的问题
  • Oracle 删除归档日志实例
  • oracle 如何关闭打开归档日志
  • Oracle数据库归档模式的切换
  • Linux下Oracle归档日志自动清理脚本代码(sh)
  • Oracle中归档模式的定义简述
  •  
    本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.169IT.COM)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c的九大最新技术特性介绍
  • 也谈Oracle 数据库的绑定变量特性及应用
  • Oracle 11g 新特性 Flashback Data Archive 使用实例
  • Oracle9i 动态SGA,PGA特性探索
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • ORACLE日期相关操作
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • ORACLE中DBMS_RANDOM随机数生成包
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • Linux系统下Oracle的启动与Oracle监听的启动
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • 网间Oracle的连接,远程连接Oracle服务器??
  • 请教:.profile中:if [ -d /opt/oracle/db01/app/oracle/product/9.2.0 ]是什么意思?
  • 在linux 中如何删除oracle db 与卸载oracle.
  • linux下安装oracle后使用命令行启动的方法 linux启动oracle
  • 如何将Aix上的oracle 物理备份 然后再在linux 系统上还原oracle
  • 那里有免费的oracle odbc driver for linux?或怎么破解easysoft oracle odbc driver安装包?急
  • Oracle的thin driver,是不是装了Oracle 8i就自带了还是要另外下载.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号