DevGang
Авторизоваться

Flashback в GBase 8c для обеспечения согласованности данных

Технология Flashback в GBase 8c является важнейшим методом обеспечения глобальной согласованности данных. Она позволяет выполнять выборочный и эффективный откат результатов зафиксированной транзакции, облегчая восстановление после человеческих ошибок. До внедрения технологии Flashback восстановление зафиксированных изменений базы данных было возможно только с помощью таких методов, как резервное копирование и PITR, что могло занять минуты или даже часы. С технологией Flashback восстановление данных до состояния до зафиксированных изменений занимает всего несколько секунд, и это время восстановления не зависит от размера базы данных.

Flashback поддерживает два режима восстановления:

  • Многоверсионное восстановление данных на основе MVCC: этот режим подходит для восстановления ошибочно удаленных, обновленных или вставленных данных. Пользователи могут настроить время хранения для старых версий и выполнить соответствующий запрос или команду восстановления, чтобы восстановить данные до указанного момента времени или точки CSN.
  • Восстановление на основе корзины, аналогичное системной корзине Windows: этот режим используется для восстановления таблиц, которые были ошибочно удалены или усечены. Пользователи могут настроить параметры корзины и выполнить соответствующую команду восстановления, чтобы восстановить ошибочно удаленные или усеченные таблицы.

Применение

Настройте следующие параметры:

gs_guc set -N all -I all -c "undo_zone_count=16384"          
 ## Количество зон отмены, которые можно выделить в памяти, 0 означает, что таблицы отмены и Ustore отключены, рекомендуемое значение max_connections*4.

gs_guc set -N all -I all -c "enable_default_ustore_table=on" 
## Включить поддержку по умолчанию для хранилища Ustore.

gs_guc set -N all -I all -c "version_retention_age=10000"     
## Количество транзакций, для которых сохраняются старые версии, версии сверх этого количества будут очищены.

Или войдите в базу данных, чтобы изменить параметры:

ALTER SYSTEM SET undo_zone_count=16384;
ALTER SYSTEM SET enable_default_ustore_table=on;
ALTER SYSTEM SET version_retention_age=10000;

Рекомендуемые параметры корзины:

gs_guc set -N all -I all -c "enable_recyclebin=on"           
 ## Включить корзину.

gs_guc set -N all -I all -c "recyclebin_retention_time=15min" 
## Установите время хранения объектов в корзине, объекты, покинувшие этот период, будут автоматически удалены.

Перезапустите базу данных, чтобы применить изменения:

gs_om -t restart

Пример 1:

Создайте образец таблицы и вставьте данные:

postgres=# drop table if exists t1;
postgres=# create table t1(a int,b int,c int,d int);
postgres=# insert into t1 values(1,2,3,4),(21,22,23,24),(31,32,33,34);

Запросите данные:

postgres=# select * from t1;

postgres=# select current_timestamp;
  pg_systimestamp
------------------------------
2021-10-12 10:03:08.272344+08

postgres=# update t1 set a=99;
postgres=# select * from t1;
a  | b  | c  | d
----+----+----+----
99 |  2 |  3 |  4
99 | 22 | 23 | 24
99 | 32 | 33 | 34

postgres=# select snptime,snpcsn from gs_txn_snapshot where snptime between '2022-04-21 13:39:36.007842+08' and '2022-04-21 13:39:39.007842+08';
postgres=# select * from t1 timecapsule timestamp to_timestamp('2022-04-21 13:39:38.540667+08','YYYY-MM-DD HH24:MI:SS.FF');
a  | b  | c  | d
----+----+----+----
 1 |  2 |  3 |  4
21 | 22 | 23 | 24
31 | 32 | 33 | 34

postgres=# select * from t1 timecapsule csn 417232;
a  | b  | c  | d
----+----+----+----
 1 |  2 |  3 |  4
21 | 22 | 23 | 24
31 | 32 | 33 | 34
postgres=# SELECT rcyname,rcyoriginname,rcytablespace FROM GS_RECYCLEBIN;
      rcyname           | rcyoriginname | rcytablespace
-----------------------------+---------------+---------------
BIN$3BFF4EB403B$4C71318==$0 | t2            |             0   -- Note: Only the t2 table stored in Astore is visible; the t1 table stored in Ustore is not visible.
(1 row)

postgres=# timecapsule table t1 to before drop rename to t1_bak;
# Возвращаемое сообщение «TimeCapsule Table» указывает на успешное выполнение.

postgres=# select * from t2_bak;
id |   name
----+----------
1 | t2_Tom
2 | t2_Jerry

Пример 2:

postgres=# create table t_astore(id int,col1 varchar(8)) with (storage_type=astore);
postgres=# create table t_ustore(id int,col1 varchar(8));
postgres=# insert into t_ustore values(1,'u1'),(2,'u2');
postgres=# select now();
postgres=# update t_ustore set col1='uu' where id=2;
postgres=# select now();
postgres=# delete from t_ustore;
postgres=# select now();
postgres=# select * from t_ustore ;

postgres=# select * from t_ustore timecapsule timestamp to_timestamp('2022-03-20 23:33:41','YYYY-MM-DD HH24:MI:SS.FF');
id | col1
----+------
 1 | u1
 2 | u2
(2 rows)


postgres=# select * from t_ustore timecapsule timestamp to_timestamp('2022-03-20 23:34:04','YYYY-MM-DD HH24:MI:SS.FF');
id | col1
----+------
 1 | u1
 2 | uu
(2 rows)

postgres=# select * into t from t_ustore timecapsule timestamp to_timestamp('2022-03-20 23:34:04','YYYY-MM-DD HH24:MI:SS.FF');
postgres=# select * from t;
id | col1
----+------
 1 | u1
 2 | uu
(2 rows)

Источник:

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу