Oracle In-Database Archiving演示

Voir ici pour une démo dans Oracle LiveSQL .

Cet article utilise l'exemple d'Oracle By Examples .

aperçu

L'archivage en base de données est une fonctionnalité 12c.

Ce didacticiel montre comment utiliser l'archivage dans la base de données pour stocker toutes les lignes de la base de données, mais masquer des lignes spécifiques de l'application. Expérimentez pendant environ 15 minutes.

L'archivage en base de données vous permet d'archiver des lignes dans une table en les marquant comme invisibles. Ces lignes invisibles sont dans la base de données et optimisées à l'aide de la compression ( est-ce automatique ? ), mais ne sont pas visibles par l'application. Les données de ces lignes peuvent être utilisées à des fins de conformité en définissant des paramètres de session si vous le souhaitez.

Avec l'archivage en base de données, vous pouvez stocker plus de données dans une seule base de données pendant de plus longues périodes sans affecter les performances des applications. Les données d'archive peuvent être compressées pour aider à améliorer les performances de sauvegarde, et les mises à jour des données d'archive peuvent être différées pendant les mises à niveau des applications pour améliorer les performances de mise à niveau.

Pour gérer l'archivage dans la base de données d'une table, vous devez activer ROW ARCHIVAL pour la table, manipuler la colonne masquée ORA_ARCHIVE_STATE de la table et spécifier ACTIVE ou ALL pour le paramètre de session ROW ARCHIVAL VISIBILITY.

Créer une table et activer l'archivage des lignes

connect hr/****@orclpdb1;

create table emp_arch
as select employee_id, first_name from employees where rownum <= 4;

alter table emp_arch row archival;

-- 不显示隐藏列
desc emp_arch;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPLOYEE_ID                                        NUMBER(6)
 FIRST_NAME                                         VARCHAR2(20)

-- 显示隐藏列
col ORA_ARCHIVE_STATE for a10
select employee_id, first_name, ora_archive_state from emp_arch;

EMPLOYEE_ID FIRST_NAME           ORA_ARCHIV
----------- -------------------- ----------
        100 Steven               0
        101 Neena                0
        102 Lex                  0
        103 Alexander            0

select * from emp_arch;
EMPLOYEE_ID FIRST_NAME
----------- --------------------
        100 Steven
        101 Neena
        102 Lex
        103 Alexander

définir le statut d'archivage pour certaines lignes

-- 修改归档状态,直接修改为'1'也可以
update emp_arch
set ora_archive_state=dbms_ilm.archivestatename(1)
where employee_id in (102, 103);

commit;

-- 看不到已归档的行
select employee_id, first_name, ora_archive_state from emp_arch;
EMPLOYEE_ID FIRST_NAME           ORA_ARCHIV
----------- -------------------- ----------
        100 Steven               0
        101 Neena                0

Ligne archivée montrant les paramètres de session

-- 看到所有行
alter session set row archival visibility = all;

select employee_id, first_name, ora_archive_state from emp_arch;
EMPLOYEE_ID FIRST_NAME           ORA_ARCHIV
----------- -------------------- ----------
        100 Steven               0
        101 Neena                0
        102 Lex                  1
        103 Alexander            1

-- 看到未归档的行
alter session set row archival visibility = active;

select employee_id, first_name, ora_archive_state from emp_arch;

EMPLOYEE_ID FIRST_NAME           ORA_ARCHIV
----------- -------------------- ----------
        100 Steven               0
        101 Neena                0

Déterminer que la copie de lignes archivées pour les tables ne copie pas le statut d'archivage

Notez que même si la colonne virtuelle d'état d'archivage n'est pas copiée, les paramètres de session affectent le nombre de lignes copiées.

-- all会拷贝所有行,而active只会拷贝可见(非归档)的行
alter session set row archival visibility = all;
create table emp_arch_copy as select * from emp_arch;

select employee_id, first_name, ora_archive_state from emp_arch_copy;
select employee_id, first_name, ora_archive_state from emp_arch_copy
                                *
ERROR at line 1:
ORA-00904: "ORA_ARCHIVE_STATE": invalid identifier

select employee_id, first_name from emp_arch_copy;
EMPLOYEE_ID FIRST_NAME
----------- --------------------
        100 Steven
        101 Neena
        102 Lex
        103 Alexander


alter table emp_arch_copy row archival;
select employee_id, first_name, ora_archive_state from emp_arch_copy;
EMPLOYEE_ID FIRST_NAME           ORA_ARCHIV
----------- -------------------- ----------
        100 Steven               0
        101 Neena                0
        102 Lex                  0
        103 Alexander            0

update emp_arch_copy
set ora_archive_state=dbms_ilm.archivestatename(1)
where employee_id in (102, 103);

commit;

select employee_id, first_name, ora_archive_state from emp_arch_copy;

EMPLOYEE_ID FIRST_NAME           ORA_ARCHIV
----------- -------------------- ----------
        100 Steven               0
        101 Neena                0
        102 Lex                  1
        103 Alexander            1

select employee_id, first_name, ora_archive_state from emp_arch;

EMPLOYEE_ID FIRST_NAME           ORA_ARCHIV
----------- -------------------- ----------
        100 Steven               0
        101 Neena                0
        102 Lex                  1
        103 Alexander            1

insert into emp_arch_copy select employee_id, first_name || '_New' from emp_arch;

commit;

select employee_id, first_name, ora_archive_state from emp_arch_copy;

EMPLOYEE_ID FIRST_NAME           ORA_ARCHIV
----------- -------------------- ----------
        100 Steven               0
        101 Neena                0
        102 Lex                  1
        103 Alexander            1
        100 Steven_New           0
        101 Neena_New            0
        102 Lex_New              0
        103 Alexander_New        0

Comme le montre la dernière commande, l'état de l'archive n'a pas été copié.

réinitialiser l'environnement

drop table emp_arch purge;

drop table emp_arch_copy purge;

référence

  • https://oracle-base.com/articles/12c/in-database-archiving-12cr1
  • https://www.youtube.com/watch?v=fvGkKJeQFTs

Je suppose que tu aimes

Origine blog.csdn.net/stevensxiao/article/details/128598075
conseillé
Classement