zoukankan      html  css  js  c++  java
  • 验证GaussDB T 闪回事务查询功能;闪回表功能强劲闪回TRUNCATE

    一、验证 GaussDB T 支持闪回事务查询功能

    环境:redhat7.5+gaussdb100

    1. 创建表:

    SQL> conn wsx/password@127.0.0.1:1888
    
    connected.
    
    SQL> create table wsx.t1 as select * from dual;
    
    Succeed.
    

    2. 模拟delete操作:

    SQL> delete from wsx.t1;
    
    1 rows affected.
    
    SQL>
    SQL>
    SQL> commit;
    
    Succeed.
    
    SQL> select * from t1;
    
    DUMMY
    -----
    
    0 rows fetched.
    
    
    SQL> select sysdate from dual;
    
    SYSDATE
    ----------------------
    2020-02-18 17:05:56
    
    1 rows fetched.
    

    3. 查看回收站是否有记录。

    SQL> col org_name format a10;
    
    SQL>
    SQL> col partition_name format a10;
    
    SQL>
    SQL>
    SQL> conn / as sysdba
    
    connected.
    
    SQL>
    SQL> select name,user#,org_name,partition_name,operation#,flags from sys_recyclebin;
    
    NAME                           USER#        ORG_NAME   PARTITION_ OPERATION#   FLAGS
    ------------------------------ ------------ ---------- ---------- ------------ ------------
    
    0 rows fetched.
    
    4.闪回查询
    SQL> SELECT * FROM wsx.t1
        AS OF TIMESTAMP TO_DATE ('2020/02/18 17:04:00', 'yyyy/mm/dd hh24:mi:ss');
    
    DUMMY
    -----
    X
    
    1 rows fetched.
    

    5.恢复表wsx.t1在2020.02.18 17:04:00误删除的记录:

    SQL> conn wsx/password@127.0.0.1:1888
    
    connected.
    
    SQL>
    SQL>
    SQL> insert into wsx.t1
    (SELECT * FROM wsx.t1
        AS OF TIMESTAMP TO_DATE ('2020/02/18 17:04:00', 'yyyy/mm/dd hh24:mi:ss'));
    
    1 rows affected.
    
    SQL>
    SQL> commit;
    
    Succeed.
    
    SQL>
    SQL>
    SQL> select * from wsx.t1;
    
    DUMMY
    -----
    X
    
    1 rows fetched.
    
    ----可以看到,表wsx.t1已经有记录了
    

    总的来说,gaussdb100 T 是可以支持闪回事务查询。

    二、GaussDB T 的 Flashback Table 功能非常强劲可以闪回TRUNCATE

    Gaussdb提供了类似Oracle的闪回表功能;可以很好的应对drop table或者truncate table的误操作场景;这个功能非常赞。本质上来讲也是使用了回收站功能。下面进行简单测试:

    清空回收站

    SQL> select * from v$version;
    
    VERSION
    ----------------------------------------------------------------
    GaussDB_100_1.0.1.SPC2.B003 Release 3ae9d6c
    ZENGINE
    3ae9d6c
    
    3 rows fetched.
    
    SQL> purge recyclebin;
    
    Succeed.
    
    SQL> select name,USER#,ORG_NAME,PARTITION_NAME,OPERATION#,FLAGS from SYS_RECYCLEBIN;
    
    NAME                           USER#        ORG_NAME             PARTITION_ OPERATION#   FLAGS
    ------------------------------ ------------ -------------------- ---------- ------------ ------------
    
    0 rows fetched.
    
    
    drop table
    SQL> conn roger/Roger007@127.0.0.1:1611
    
    connected.
    
    SQL> drop table test;
    
    Succeed.
    
    

    查看回收站内容

    SQL> conn / as sysdba
    
    connected.
    
    SQL> select name,USER#,ORG_NAME,PARTITION_NAME,OPERATION#,FLAGS from SYS_RECYCLEBIN;
    
    NAME                           USER#        ORG_NAME             PARTITION_ OPERATION#   FLAGS
    ------------------------------ ------------ -------------------- ---------- ------------ ------------
    BIN$0$88F6E0==$0               2            IDX_TEST_ID                     1            2
    BIN$0$88F6D6==$0               2            TEST                            1            3
    
    2 rows fetched.
    

    闪回被drop table

    SQL>  flashback table roger.test to before drop;
    
    Succeed.
    
    SQL> select name,USER#,ORG_NAME,PARTITION_NAME,OPERATION#,FLAGS from SYS_RECYCLEBIN;
    
    NAME                           USER#        ORG_NAME             PARTITION_ OPERATION#   FLAGS
    ------------------------------ ------------ -------------------- ---------- ------------ ------------
    
    0 rows fetched.
    
    SQL> select * from roger.test;
    
    A                                        B
    ---------------------------------------- --------------------
    1                                        www.enmotech.com
    1                                        www.killdb.com
    666                                      www.modb.pro
    
    3 rows fetched.
    
    

    那么truncate 的表能闪回吗 ?

    SQL> create table roger.test_copy as select * from roger.test ;
    
    Succeed.
    
    SQL> select * from roger.test_copy;
    
    A                                        B
    ---------------------------------------- --------------------
    1                                        www.enmotech.com
    1                                        www.killdb.com
    666                                      www.modb.pro
    
    3 rows fetched.
    
    SQL> truncate table roger.test_copy;
    
    Succeed.
    
    SQL> select * from roger.test_copy;
    
    A                                        B
    ---------------------------------------- --------------------
    
    0 rows fetched.
    
    SQL> select name,USER#,ORG_NAME,PARTITION_NAME,OPERATION#,FLAGS from SYS_RECYCLEBIN;
    
    NAME                           USER#        ORG_NAME             PARTITION_ OPERATION#   FLAGS
    ------------------------------ ------------ -------------------- ---------- ------------ ------------
    BIN$1$88FFA4==$0               2            TEST_COPY                       0            3
    
    1 rows fetched.
    
    SQL> flashback table roger.test_copy to before truncate force;
    
    Succeed.
    
    SQL> select * from roger.test_copy;
    
    A                                        B
    ---------------------------------------- --------------------
    1                                        www.enmotech.com
    1                                        www.killdb.com
    666                                      www.modb.pro
    
    3 rows fetched.
    
    SQL>
    

    可以看到成功闪回了被truncate table。

    那么如果表被truncate之后,被写入数据之后,还能闪回吗? 下面测试一下。

    SQL> create table roger.test_copy2 as select * from roger.test ;
    
    Succeed.
    
    SQL> select * from roger.test_copy2;
    
    A                                        B
    ---------------------------------------- --------------------
    1                                        www.enmotech.com
    1                                        www.killdb.com
    666                                      www.modb.pro
    
    3 rows fetched.
    
    SQL> truncate table roger.test_copy2;
    
    Succeed.
    
    SQL> insert into roger.test_copy2 values(999,'www.baidu.com');
    
    1 rows affected.
    
    SQL> commit;
    
    Succeed.
    
    SQL> select name,USER#,ORG_NAME,PARTITION_NAME,OPERATION#,FLAGS from SYS_RECYCLEBIN;
    
    NAME                           USER#        ORG_NAME             PARTITION_ OPERATION#   FLAGS
    ------------------------------ ------------ -------------------- ---------- ------------ ------------
    BIN$2$890165==$0               2            TEST_COPY2                      0            3
    
    1 rows fetched.
    
    SQL> flashback table roger.test_copy2 to before truncate force;
    
    Succeed.
    
    SQL> select * from roger.test_copy2;
    
    A                                        B
    ---------------------------------------- --------------------
    1                                        www.enmotech.com
    1                                        www.killdb.com
    666                                      www.modb.pro
    
    3 rows fetched.
    

    可以看到非常强大;仍然可以进行闪回。 这样妈妈再也不用担心数据被truncate了。

    那么如果表被ddl change了,还能闪回吗? 我们进一步验证一下呢?

    SQL> create table roger.test_copy3 as select * from roger.test;
    
    Succeed.
    
    SQL> select * from roger.test_copy3;
    
    A                                        B
    ---------------------------------------- --------------------
    1                                        www.enmotech.com
    1                                        www.killdb.com
    666                                      www.modb.pro
    
    3 rows fetched.
    
    SQL> desc roger.test_copy3
    
    Name                                Null?    Type
    ----------------------------------- -------- ------------------------------------
    A                                            NUMBER
    B                                            VARCHAR(20 BYTE)
    
    SQL> truncate table roger.test_copy3;
    
    Succeed.
    
    SQL> alter table roger.test_copy3 modify (b VARCHAR(30));
    
    Succeed.
    
    SQL> insert into roger.test_copy3 values(55,'support.enmotech.com');
    
    1 rows affected.
    
    SQL> commit;
    
    Succeed.
    
    SQL> select * from roger.test_copy3;
    
    A                                        B
    ---------------------------------------- ------------------------------
    55                                       support.enmotech.com          
    
    1 rows fetched.
    
    SQL> flashback table roger.test_copy3 to before truncate force;
    
    GS-00732, The table definition of ROGER.TEST_COPY3 has been changed.
    SQL>
    SQL> alter table roger.test_copy3 modify (b VARCHAR(20));
    
    GS-00805, Column B is not empty in table TEST_COPY3
    SQL>
    SQL> delete from roger.test_copy3;
    
    1 rows affected.
    
    SQL> commit;
    
    Succeed.
    
    SQL> alter table roger.test_copy3 modify (b VARCHAR(20));
    
    Succeed.
    
    SQL> flashback table roger.test_copy3 to before truncate force;
    
    GS-00732, The table definition of ROGER.TEST_COPY3 has been changed.
    SQL>
    

    可以看到,如果表进行了ddl 变更,即表定义发生了改变,就不再能进行flashback了。

    总的来说,gaussdb这个flashback table的功能还是非常赞的。

    本文根据墨天轮(www.modb.pro)两篇文章整理而得

    原文参考:

    1. https://www.modb.pro/db/21656

    2. https://www.modb.pro/db/21559

    更多GaussDB T相关内容请锁定墨天轮(www.modb.pro)中的"数据库”频道(modb.pro/db)


    点击下图查看更多 ↓

    云和恩墨大讲堂 | 一个分享交流的地方

    长按,识别二维码,加入万人交流社群

    请备注:云和恩墨大讲堂

      点个“在看” 
    你的喜欢会被看到????

  • 相关阅读:
    引入background和background-size不显示图片
    vue,新手上路,基础,常见问题
    Java设置环境变量
    JS判断是否是手机登录及类型
    Mongodb查询语句与Sql语句对比
    IIS7下使用urlrewriter.dll配置
    反射获取属性
    数据库Convert关于时间取值
    JS实现嵌套Iframe页面F11全屏效果
    针对上次表格编辑的打印问题及解决方案
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13311809.html
Copyright © 2011-2022 走看看