oracle19c特性以及CDB环境搭建

原理篇

  • Oracle19c的CDB和PDB

目录

1、 什么是CDB和PDB 

2、 CDB环境中的用户 

2、1 公用用户以及其创建 

2、2 公用用户创建语句 

3、1 表空间 

3、2 文件 

3、3 归档日志 

3、4 参数文件是公用的 

3、5 控制文件是公用的 

3、6 告警日志和跟踪文件是公用的 

3、7 CDB的操作和管理 

3、8 使用 orcl 来登录 cdb$root 数据库 

3、9 使用 orclpdb 来登录 pdb 数据库 

1          CDB$ROOT                  SYS 

3、10 启动和关闭CDB 

2 PDB$SEED                       READ ONLY  NO 

3 ORCLPDB 

3、11 手工启动 PDB 到 open 

3、12 查询 CDB 数据库的表空间使用情况 

二、 Oracle RAC集群(客户oracle集群模式) 

三、 Oracle主从/灾备方案ADG和DG的区别 

四、 实时数据挖掘基础Oracle Redo日志 

五、 日志分析工具LogMiner 

六、 Oracle19c CDB环境的搭建 

七、 Oracle19c主从环境设置 

八、 物理standby database的日常维护命令 

九、 oracle日志实操 

十、 采集用户权限设置 

  1. 什么是CDB和PDB

Oracle Multitenant Container Database(CDB) ,即多租户容器数据库,是 Oracle 12C引入的特性,指的是可以容纳一个或者多个可插拔数据库的数据库,这个特性允许在 CDB 容器数据库中创建并且维护多个数据库,在 CDB中创建的数据库被称为 PDB ,每个 PDB 在 CDB 中是相互独立存在的,在单独使用 PDB 时,与普通数据库无任何区别。

CDB 根容器数据库的主要作用就是容纳所有相关的 PDB 的元数据,以及在 CDB 中对所有的 PDB 进行管理。

容器数据库Root 容器数据库,是 CDB 环境中的根数据库,在根数据库中含有主数据字典视图,其中包含了与 Root 容器有关的元数据和 CDB 中所包含的所有的 PDB 信息。在 CDB 环境中被标识为 CDB$ROOT , 每个 CDB 环境中只能有一个 Root 容器数据库 。

CDB seed 为 PDB 的种子,其中提供了数据文件,在 CDB 环境中被标识为 PDB$SEED ,是创建新的 PDB 的模板,你可以连接 PDB$SEED ,但是不能执行任何事物,因为 PDB$SEED 是只读的 ,不可进行修改。

PDB 数据库,在 CDB 环境中每个 PDB 都是独立存在的,与传统的 Oracle 数据库基本无差别,每个 PDB 拥有自己的数据文件和 objects ,唯一的区别在于 PDB 可以插入到 CDB 中,以及在 CDB 中拔出,并且在任何一个时间点之上 PDB 必须拔出或者插入到一个 CDB 中,当用户链接 PDB 时不会感觉到根容器和其他 PDB 的存在。

数据库CDB和PDB结构图

1、1通过以下命令可以查看当前数据库的pdb

SQL> show pdbs;

    CON_ID CON_NAME   OPEN MODE  RESTRICTED

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

 2 PDB$SEED   READ ONLY  NO

 3 TEST1   READ WRITE NO

其中 PDB$SEED 为 CDB seed , ORCLPDB 为 PDB 数据库。

  1. CDB环境中的用户

CDB 环境中包含两类用户,公用用户和本地用户。

2、1 公用用户以及其创建

公用用户是在 root 容器数据库中和所有的 PDB 数据库中都存在的用户, 公用用户必须在根容器中创建 ,然后此用户会在所有的现存的 PDB 中自动创建, 公用用户标识必须以 c## 或者 C## 开头 , sys 和 system 用户是 Oracle 在 CDB 环境中自动创建的公用用户。

2、2 公用用户创建语句

    SQL> create user c##mytest1 identified by mytest1;

    User created.

2、3 公用用户赋权

创建完成公用用户,需要为公用用户赋予所有可插拔数据库的权限,公用用户才可以访问其他 PDB ,如果在连接根容器时仅仅为公用用户赋予了相关权限,那么该权限不会被传递到所有的可插拔数据库中,必须为公用用户赋予能够传递到 PDB 中的权限,可以创建公用角色然后赋予公用用户,或者在为公共用户付权时指定子句 container=ALL;

赋予 c##mytest1 用户基本的连接权限。

SQL> grant resource,connect to c##mytest1;

Grant succeeded.

SQL>

测试 ”c##mytest1” 用户的登录情况,可以正常登录

[oracle@linux14 ~]$ sqlplus /nolog

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jan 5 23:01:30 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

SQL> conn c##mytest1/mytest1;

Connected.

SQL>

在没有赋予的访问 pdb 的相关权限下,登录失败

SQL> alter session set container=orclpdb;

ERROR:

ORA-01031: insufficient privileges  

SQL>

赋予 c##mytest1 用户 pdb 访问权限的 2 种方式

( 1 )在赋权的时候加 container=all

[oracle@linux14 ~]$ sqlplus / as sysdba  

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jan 5 23:08:15 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.  

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> grant resource,connect to c##mytest1 container=all;

Grant succeeded.

SQL> conn c##mytest1/mytest1

Connected.

SQL>

SQL> alter session set container=orclpdb;

Session altered.

SQL>

( 2 )赋予已有的角色权限

1. 创建 c##mytestprivs 的角色 -->

2. 赋予 resource,connect 权限 -->

3. 然后把 c##mytestprivs 赋予 c##mytest1-->

4. 然后 c##mytest1 就可以正常登录 pdb

[oracle@linux14 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sat Jan 5 23:19:16 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.  

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

SQL> create role c##mytestprivs container=all;  

Role created.  

SQL> grant resource,connect to c##mytestprivs container=all;  

Grant succeeded.  

SQL> grant c##mytestprivs to c##mytest1 container=all;  

Grant succeeded.  

SQL>

SQL> conn c##mytest1/mytest1

Connected.

SQL>

SQL> show user

USER is "C##MYTEST1"

SQL>

SQL> alter session set container=orclpdb;  

Session altered.  

SQL>

  1. CDB环境基础知识点

3、1 表空间

SYSTEM 和 SYSAUX 表空间是独立的 ,在 PDB 和 root 容器数据库中各自拥有,并非共用。

在 CDB$ROOT 容器数据库中查询结果:

SQL> show con_id con_name user;                  

CON_ID

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

1

CON_NAME

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

CDB$ROOT

USER is "SYS"

SQL>

SQL>

SQL> select tablespace_name,file_name from dba_data_files;

  

TABLESPACE_NAME                FILE_NAME

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

USERS                          /data/oradata/orcl/users01.dbf

UNDOTBS1                       /data/oradata/orcl/undotbs01.dbf

SYSTEM                         /data/oradata/orcl/system01.dbf

SYSAUX                         /data/oradata/orcl/sysaux01.dbf

在 orclpdb 的 pdb 数据库中查询结果为:

SQL> alter session set container=orclpdb;

Session altered.

SQL> show con_id con_name user;

CON_ID

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

3  

CON_NAME

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

ORCLPDB

USER is "SYS"

SQL>

SQL> select tablespace_name,file_name from dba_data_files;

  

TABLESPACE_NAME                FILE_NAME

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

UNDOTBS1                       /data/oradata/orcl/orclpdb/undotbs01.dbf

SYSAUX                         /data/oradata/orcl/orclpdb/sysaux01.dbf

SYSTEM                         /data/oradata/orcl/orclpdb/system01.dbf

USERS                          /data/oradata/orcl/orclpdb/users01.dbf

SQL>

3、2 文件

(1) redo 日志文件为公用的 ,存在于 root 容器中 CDB$ROOT , REDO 中的条目标识 REDO 是来自哪个 PDB 。

(2)在 PDB 中无法执行 ALTER SYSTEM SWITCH LOGFILE 命令,只有公用用户在 ROOT 容器中才可以执行该命令。

SQL> alter system switch logfile;

alter system switch logfile

*

ERROR at line 1:

ORA-65040: operation not allowed from within a pluggable database

(3)另外 ALTER SYSTEM CHECKPOINT 命令是可以在 PDB 中执行的。

SQL> alter system checkpoint;

System altered.

SQL>

3、3 归档日志

归档日志是公用的。

在 CDB 环境中所有的 PDB 共用 CDB 的归档模式,以及归档文件,不可以单独为 PDB 设置自己的归档模式,只有特权用户连接根容器之后才可以启动归档模式。

表空间

(1)在 12.2 之前的版本中,所有的 PDB 共用 CDB$ROOT 中的 UNDO 文件。

(2)在 12.2 之后的版本中 UNDO 的使用模式有两种: SHARED UNDO MODE 和 LOCAL UNDO MODE ,顾名思义, LOCAL UNDO MODE 就是每个 PDB 使用自己的 UNDO 表空间,但当 PDB 中没有自己的 UNDO 表空间时,会使用 CDB$ROOT 中的公共 UNDO 表空间。  

查看 UNDO 表空间的使用模式 (CDB$ROOT) :

SQL> COL PROPERTY_NAME FOR A50

SQL> COL PROPERTY_VALUE FOR A50

SQL> COL DESCRIPTION FOR A50

SQL>

SQL> SELECT property_name, property_value

  2  FROM database_properties

  3  WHERE property_name='LOCAL_UNDO_ENABLED';

PROPERTY_NAME                                      PROPERTY_VALUE

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

LOCAL_UNDO_ENABLED                                 TRUE

SQL>

关闭 Local UNDO ( 操作需要重启数据库 )

直接关闭 local undo 会报错:

SQL> alter database local undo off;

alter database local undo off

*

ERROR at line 1:

ORA-65192: database must be in UPGRADE mode for this operation

关闭数据库,启动到 upgrade 模式下关闭 local undo

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>

SQL> startup upgrade

ORACLE instance started.

Total System Global Area 1241513984 bytes

Fixed Size                  8792248 bytes

Variable Size             788531016 bytes

Database Buffers          436207616 bytes

Redo Buffers                7983104 bytes

Database mounted.

Database opened.

SQL>

SQL> alter database local undo off;

Database altered.

重启数据库后,查询 local undo 已经关闭了

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 1241513984 bytes

Fixed Size                  8792248 bytes

Variable Size             788531016 bytes

Database Buffers          436207616 bytes

Redo Buffers                7983104 bytes

Database mounted.

Database opened.

SQL>

SQL> SELECT property_name, property_value

  2  FROM database_properties

  3  WHERE property_name='LOCAL_UNDO_ENABLED';

  

PROPERTY_NAME                                      PROPERTY_VALUE

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

LOCAL_UNDO_ENABLED                                 FALSE  

SQL>

开启 local UNDO( 操作需要重启数据库 )

直接开启 local undo 也会报错                                                                                                                                                                                                

SQL> alter database local undo on;                                                                  

alter database local undo on                                                                        

*                                                                                                    

ERROR at line 1:                                                                                    

ORA-65192: database must be in UPGRADE mode for this operation

重启数据库到 upgrade 模式,然后关闭 local undo                                                                   

SQL> shutdown immediate;                                                                            

Database closed.                                                                                    

Database dismounted.                                                                                

ORACLE instance shut down.                                                                          

SQL>                                                                                                 

SQL> startup upgrade                                                                                

ORACLE instance started.                                                                            

                                                                                                      

Total System Global Area 1241513984 bytes                                                           

Fixed Size                  8792248 bytes                                                            

Variable Size             788531016 bytes                                                           

Database Buffers          436207616 bytes                                                           

Redo Buffers                7983104 bytes                                                           

Database mounted.                                                                                   

Database opened.                                                                                     

SQL>                                                                                                

SQL> alter database local undo on;                                                                                                                                                                       

Database altered.

再次重启数据库,查询 local undo 的开启状态                                                                                                       

SQL> shutdown immediate;                                                                            

Database closed.                                                                                     

Database dismounted.                                                                                

ORACLE instance shut down.                                                                          

SQL> startup                                                                                         

ORACLE instance started.                                                                            

                                                                                                      

Total System Global Area 1241513984 bytes                                                           

Fixed Size                  8792248 bytes                                                           

Variable Size             788531016 bytes                                                           

Database Buffers          436207616 bytes                                                           

Redo Buffers                7983104 bytes                                                            

Database mounted.                                                                                   

Database opened.                                                                                    

SQL>                                                                                                

SQL> SELECT property_name, property_value                                                           

  2  FROM database_properties                                                                        

  3  WHERE property_name='LOCAL_UNDO_ENABLED';                                                      

                                                                                                     

PROPERTY_NAME                                      PROPERTY_VALUE                                   

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

LOCAL_UNDO_ENABLED                                 TRUE                                              

                                                                                                     

SQL>

( 1 ) 默认情况下临时表空间也是独立的 , PDB 和 root 容器数据库各自拥有,

( 2 )如果 PDB 没有自己的临时表空间文件,那么, PDB 可以使用 CDB$ROOT 中的临时表空间。

3、4 参数文件是公用的

(1) 参数文件中只记录了根容器的参数信息,没有记录 PDB 级别的参数信息,在根容器中修改初始化参数,会被继承到所有的 PDB 中,

(2)在 PDB 中修改参数后, PDB 的参数会覆盖 CDB 级别的参数, PDB 级别的参数记录在根容器的 pdb_spfile$ 视图中,但并不是所有的参数都可以在 PDB 中修改,

(3)可以通过 v$system_parameter 视图查看 PDB 中可修改的参数:

SELECT name FROM v$system_parameter

WHERE ispdb_modifiable = 'TRUE'

ORDER BY name;

3、5 控制文件是公用的

CDB 环境中只有一组控制文件,所有的 PDB 共用这组公共的控制文件,从任何 PDB 中添加数据文件都会记录到公共控制文件当中,公用用户连接根容器时,可对控制文件进行管理。

SQL> show parameter control_files;

  

NAME                                 TYPE        VALUE

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

control_files                        string      /data/oradata/orcl/control01.c

                                                 tl, /data/flash_recovery_area/

                                                 orcl/control02.ctl

SQL>

3、6 告警日志和跟踪文件是公用的

在 CDB 中所有的 PDB 共用一个告警日志和一组跟踪文件,所有的 PDB 告警信息都会写入同一个告警日志中。

在 CDB 环境中可以为 CDB 以及所有的 PDB 设置相同的时区,也可以为每个 PDB 设置单独的时区。

查询时区语句:

SQL> select dbtimezone from dual;

DBTIME

------

+00:00

在 CDB 中定义字符集也可以应用于它所含有的 PDB 中,每个 PDB 也可以有自己的字符集设置。

查询字符集的语句:

SELECT a.value || '_' || b.value || '.' || c.value NLS_LANG

  FROM nls_database_parameters a,

       nls_database_parameters b,

       nls_database_parameters c

 WHERE a.parameter = 'NLS_LANGUAGE'

   AND b.parameter = 'NLS_TERRITORY'

   AND c.parameter = 'NLS_CHARACTERSET';

(1)在 CDB 环境中引入了 CDB 级别的数据字典视图,它的级别高于 DBA_/ALL_/USER_ , CDB 级别的数据字典视图含有所有 PDB 的元数据信息,其中增加了 con_id 列, con_id 为 CDB 中所有容器唯一标识符,

(2)其中 con_id 为 的是 CDB$ROOT , con_id 为 2 的是 PDB$SEED ,每个 PDB 在 CDB 中都会分配一个唯一的 con_id 。

(3)如果要想查看 CDB 级别的数据字典视图,必须使用公用用户在跟容器中查看,并且要查看的 PDB 必须处于 open 状态,才可以看到 PDB 中的信息。

3、7 CDB的操作和管理

管理 CDB 通常也是使用 sys 用户,其连接和操作方式跟非 CDB 数据库相同和 PDB 数据库的方法在 oracle 12c 中使用 tnsname 的方式来进行登录 CDB 和 PDB

tnsnames.ora 的举例配置

[oracle@linux14 admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /opt/app/oracle/product/12c/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

  

LISTENER_ORCL =

  (ADDRESS = (PROTOCOL = TCP)(HOST = linux14)(PORT = 1521))

  

  

ORCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = linux14)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

  

ORCLPDB =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = linux14)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orclpdb)

    )

  )

其中的 ORCL 的配置是用于登录 CDB 的 cdb$root 容器数据库

ORCLPDB 的配置是用于登录 PDB 为 orclpdb 数据库

3、8 使用 orcl 来登录 cdb$root 数据库

[oracle@linux14 admin]$ sqlplus sys/oracle@orcl as sysdba

  

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 8 22:13:15 2019

  

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

  

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

  

SQL> show con_id con_name user;

  

CON_ID

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

1

  

CON_NAME

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

CDB$ROOT

USER is "SYS"

3、9 使用 orclpdb 来登录 pdb 数据库

[oracle@linux14 admin]$ sqlplus sys/oracle@orclpdb as sysdba  

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 8 22:14:37 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production  

SQL> show con_id con_name user;

CON_ID

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

3

  

CON_NAME

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

ORCLPDB

USER is "SYS"

SQL>

(1) 方式 1

SQL> show con_id con_name user;

  

CON_ID

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

1

  

CON_NAME

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

CDB$ROOT

USER is "SYS"

SQL>

(2) 方式 2

SQL> COL CON_ID FOR A10

SQL> COL CUR_CONTAINER FOR A25

SQL> COL CUR_USER FOR A25

SQL> SELECT

  2  sys_context('USERENV','CON_ID')con_id,

  3  sys_context('USERENV','CON_NAME') cur_container,

  4  sys_context('USERENV','session_user') cur_user

  5  FROM dual;

  

CON_ID     CUR_CONTAINER             CUR_USER

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

1          CDB$ROOT                  SYS

  

SQL>

3、10 启动和关闭CDB

启动和关闭 CDB 数据库的方式跟普通的非 CDB 数据库一致,其中 PDB 的数据库不会随着 CDB 一起其中,只会到 mounted 状态:

[oracle@linux14 ~]$ sqlplus / as sysdba

  

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 8 20:47:24 2019

  

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

  

Connected to an idle instance.

  

SQL> startup

ORACLE instance started.

  

Total System Global Area 1241513984 bytes

Fixed Size                  8792248 bytes

Variable Size             788531016 bytes

Database Buffers          436207616 bytes

Redo Buffers                7983104 bytes

Database mounted.

Database opened.

SQL>

SQL> show pdbs;

  

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

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

         2 PDB$SEED                       READ ONLY  NO

         3 ORCLPDB                        

MOUNTED

SQL>

alter pluggable database orclpdb open;

  

Pluggable database altered.

  

SQL>

3、11 手工启动 PDB 到 open

alter pluggable database orclpdb open; -->指定某个pdb启动,比如orclpdb

alter pluggable database all open; -->所有的pdb数据库都启动

关闭 CDB 的命令:

SQL> shutdown immediate;

3、12 查询 CDB 数据库的表空间使用情况

with generator0 as

 (select cf.con_id, cf.tablespace_name, sum(cf.bytes) / 1024 / 1024 frm

    from cdb_free_space cf

   group by cf.con_id, cf.tablespace_name),

generator1 as

 (select cd.con_id, cd.tablespace_name, sum(cd.bytes) / 1024 / 1024 usm

    from cdb_data_files cd

   group by cd.con_id, cd.tablespace_name),

generator2 as

 (select g0.con_id, c.name con_name, g0.tablespace_name, g0.frm, g1.usm

    from generator0 g0, generator1 g1, v$containers c

   where g0.con_id = g1.con_id

     and g0.tablespace_name = g1.tablespace_name

     and c.con_id = g1.con_id

  union

  select c.con_id,

         c.name,

         ct.tablespace_name,

         null,

         sum(ct.bytes) / 1024 / 1024

    from v$containers c, cdb_temp_files ct

   where c.con_id = ct.con_id

   group by c.con_id, c.name, ct.tablespace_name)

select con_id,

       case

         when con_name = LAG(con_name, 1)

          OVER(PARTITION BY con_name ORDER BY tablespace_name) THEN

          null

         ELSE

          con_name

       END con_name,

       tablespace_name,

       frm || 'M' freemb,

       usm || 'M' usemb

  from generator2

 order by con_id;

结果如图所示:

正常情况下都是用 公用用户 来做操作

使用 公用用户 连接 CDB 后,可以使用 alter session 的方式切换不同的容器。

例如:

alter session set container=orclpdb;

alter session set container = cdb$root;

实验:

在 pdb 数据库 orclpdb 中创建了 mytest1 用户,用此用户进行切换容器,会报没有权限的错误

[oracle@linux14 admin]$ sqlplus mytest1/mytest1@orclpdb ;

  

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 8 22:01:09 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Last Successful login time: Tue Jan 08 2019 21:50:33 +08:00

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

SQL> alter session set container=cdb$root;

ERROR:

ORA-01031: insufficient privileges

尝试用 sys 用户给 mytest1 用户赋予权限,也出现了报错

SQL> conn sys/oracle as sysdba

Connected.

SQL> show con_id user;  

CON_ID

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

1

USER is "SYS"

SQL>

SQL>

SQL> alter session set container=orclpdb;

  

Session altered.

  

SQL>

SQL> show con_id user;

  

CON_ID

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

3

USER is "SYS"

SQL>

SQL>

SQL> grant dba to mytest1 container=all;

grant dba to mytest1 container=all

*

ERROR at line 1:

ORA-65030: cannot grant a privilege commonly to a local user or role   

SQL>

因此建议, CDB 容器数据库的操作使用公用用户来进行相关的操作。

  • Oracle RAC集群(客户oracle集群模式)

rac体系结构

  1. RAC 概述

共享存储文件系统(NFS),或甚至集群文件系统(如:OCFS2)主要被用于存储区域网络(所有节点直接访问共享文件系统上存储器),这就使得节点失效而不影响来自其他节点对文件系统的访问,通常,共享磁盘文件系统用于高可用集群。

Oracle RAC的核心是共享磁盘子系统,集群中所有节点必须能够访问所有数据、重做日志文件、控制文件和参数文件,数据磁盘必须是全局可用的,允许所有节点访问数据库,每个节点有它自己的重做日志和控制文件,但是其他节点必须能够访问它们以便在那个节点出现系统故障时能够恢复。

Oracle RAC 运行于集群之上,为 Oracle 数据库提供了最高级别的可用性、可伸缩性和低成本计算能力。如果集群内的一个节点发生故障,Oracle 将可以继续在其余的节点上运行。Oracle 的主要创新是一项称为高速缓存合并的技术。高速缓存合并使得集群中的节点可以通过高速集群互联高效地同步其内存高速缓存,从而最大限度地低降低磁盘 I/O。高速缓存最重要的优势在于它能够使集群中所有节点的磁盘共享对所有数据的访问。数据无需在节点间进行分区。Oracle 是唯一提供具备这一能力的开放系统数据库的厂商。其它声称可以运行在集群上的数据库软件需要对数据库数据进行分区,显得不切实际。企业网格是未来的数据中心,构建于由标准化商用组件构成的大型配置之上,其中包括:处理器、网络和存储器。Oracle RAC 的高速缓存合并技术提供了最高等级的可用性和可伸缩性。Oracle 数据库 10g 和 OracleRAC 10g 显著降低了运营成本,增强了灵活性,从而赋予了系统更卓越的适应性、前瞻性和灵活性。动态提供节点、存储器、CPU 和内存可以在实现所需服务级别的同时,通过提高的利用率不断降低成本。

  1. RAC 集成集群件管理

Oracle RAC 19c 在 Oracle 数据库 19c 运行的所有平台上提供了一个完整集成的集群件管理解决方案。这一集群件功能包括集群连接、消息处理服务和锁定、集群控制和恢复,以及一个工作负载管理框架(将在下文探讨)。Oracle RAC 19c 的集成集群件管理具有以下优势:

(1) 成本低。Oracle 免费提供这一功能。

(2) 单一厂商支持。消除了相互推诿的问题。

(3) 安装、配置和持续维护更简单。Oracle RAC 19c 集群件使用标准 Oracle 数据库管理工具进行安装、配置和维护。这一过程无须其它的集成步骤。

(4) 所有平台,质量始终如一。与第三方产品相比,Oracle 对新软件版本进行了更严格的测试。

(5) 所有平台,功能始终如一。例如,一些第三方集群件产品限制了集群内可以支持的节点的数量。借助Oracle RAC 19c,所有平台可以支持多达 64 个节点。用户还可以在所有平台上获得一致的响应体验,从而有效解决了高可用性挑战,包括服务器节点故障、互连故障以及 I/O 隔离现象等。

(6) 支持高级功能。这包括集成监视和通知功能,从而在发生故障时,在数据库和应用层之间实现快速协调的恢复。

  1. RAC 的体系结构

RAC 是 Oracle 数据库的一个群集解决方案,是有着两个或者两个以上的数据库节点协调运作能力的。如下图所示的 RAC 结构图:

RAC 结构图

集群管理器(Cluster Manager)在集群系统中对其他各个模块进行整合,通过高速的内连接来提供群集节点之间的通信。各节点之间内连接使用心跳线互联,心跳线上的信息功能确定群集逻辑上的节点成员信息和节点更新情况,以及节点在某个时间点的运行状态,保证群集系统正常运行。通信层管理节点之间的通信。它的职责是配置,互联群集中节点信息,在群集管理器中使用由心跳机制产生的信息,由通信层负责传输,确保信息的正确到达。还有一些群集监视进程不断验证系统的不同领域运行状况。例如,心跳监测不断验证的心跳机制的运作是否良好。在一个应用环境当中,所有的服务器使用和管理同一个数据库,目的是分散每一台服务器的工作量。硬件上至少需要两台以上的服务器,而且还需要一个共享存储设备;同时还需要两类软件,一类是集群软件,另外一类就是 Oracle 数据库中的 RAC 组件。同时所有服务器上的 OS 都应该是同一类 OS,根据负载均衡的配置策略,当一个客户端发送请求到某一台服务的 listener 后,这台服务器根据负载均衡策略,会把请求发送给本机的 RAC组件处理,也可能会发送给另外一台服务器的 RAC 组件处理,处理完请求后,RAC 会通过群集软件来访问共享存储设备。逻辑结构上看,每一个参加群集的节点有一个独立的实例,这些实例访问同一个数据库。节点之间通过集群软件的通信层(Communication Layer)来进行通信。同时为了减少 I/O 的消耗,存在一个全局缓存服务,因此每一个数据库的实例,都保留了一份相同的数据库 cache。RAC 中的特点如下:

  1. 每一个节点的实例都有自己的 SGA;
  2. 每一个节点的实例都有自己的后台进程
  3. 每一个节点的实力都有自己的 redo logs
  4. 每一个节点的实例都有自己的 undo 表空间
  5. 所有节点都共享一份 datafiles 和 controlfiles
  1. RAC 的结构组成和机制

在 Oracle9i 之前,RAC 称为 OPS(Oracle Parallel Server)。RAC 与 OPS 之间的一个较大区别是,RAC 采用了Cache Fusion(高缓存合并)技术,节点已经取出的数据块更新后没有写入磁盘前,可以被另外一个节点更新,然后以最后的版本写入磁盘。在 OPS 中,节点间的数据请求需要先将数据写入磁盘,然后发出请求的节点才可以读取该数据。使用 Cache Fusion 时,RAC 的各个节点间数据缓冲区通过高速、低延迟的内部网络进行数据块的传输。

  1. 集群的节点(Cluster node)——2 个到 N 个节点或者主机运行 Oracle Database Server。
  2. 私有网络(Network Interconnect)——RAC 之间需要一个高速互联的私有网络来处理通信和 Cache Fusion。
  3. 共享存储(shared Storage)——RAC 需要共享存储设备让所有的节点都可以访问数据文件。
  4. 对外服务的网络(Production Network)——RAC 对外服务的网络。客户端和应用都通过这个网络来访问。
  1. RAC 后台进程

Oracle RAC 有一些自己独特的后台进程,在单一实例中不发挥配置作用。如下图所示,定义了一些 RAC 运行的后台进程。这些后台进程的功能描述如下。

后台进程

  1. LMS(Global cache service processes 全局缓存服务进程)进程主要用来管理集群内数据块的访问,并在不同实例的 Buffer Cache 中传输数据块镜像。直接从控制的实例的缓存复制数据块,然后发送一个副本到请求的实例上。并保证在所有实例的 Buffer Cache 中一个数据块的镜像只能出现一次。LMS 进程靠着在实例中传递消息来协调数据块的访问,当一个实例请求数据块时,该实例的 LMD 进程发出一个数据块资源的请求,该请求指向主数据块的实例的 LMD 进程,主实例的 LMD 进程和正在使用的实例的 LMD 进程释放该资源,这时拥有该资源的实例的 LMS 进程会创建一个数据块镜像的一致性读然后把该数据块传递到请求该资源的实例的BUFFER CACHE 中。LMS 进程保证了在每一时刻只能允许一个实例去更新数据块,并负责保持该数据块的镜像记录(包含更新数据块的状态 FLAG)。RAC 提供了 10 个 LMS 进程(0~9),该进程数量随着节点间的消息传递的数据的增加而增加。(2)LMON(Lock Monitor Process,锁监控进程)是全局队列服务监控器,各个实例的 LMON 进程会定期通信,以检查集群中各个节点的健康状况,当某个节点出现故障时,负责集群重构、GRD 恢复等操作,它提供的服务叫做 Cluster Group Service(CGS)。

LMON 主要借助两种心跳机制来完成健康检查。

(一) 节点间的网络心跳(Network Heartbeat):可以想象成节点间定时的发送 ping 包检测节点状态,如果能在规定时间内收到回应,就认为对方状态正常。

(二) 通过控制文件的磁盘心跳(controlfile heartbeat):每个节点的 CKPT 进程每隔 3 秒钟更新一次控制文件的数据块,这个数据块叫做 Checkpoint Progress Record,控制文件是共享的,所以实例间可以互相检查对方是否及时更新来判断。

(三) LMD(the global enqueue service daemon,锁管理守护进程)是一个后台进程,也被称为全局的队列服务守护进程,因为负责对资源的管理要求来控制访问块和全局队列。在每一个实例的内部,LMD 进程管理输入的远程资源请求(即来自集群中其他实例的锁请求)。此外,它还负责死锁检查和监控转换超时。

(四) LCK(the lock process,锁进程)管理非缓存融合,锁请求是本地的资源请求。LCK 进程管理共享资源的实例的资源请求和跨实例调用操作。在恢复过程中它建立一个无效锁元素的列表,并验证锁的元素。由于处理过程中的 LMS 锁管理的首要职能,只有一个单一的 LCK 进程存在每个实例中。

(五) DIAG(the diagnosability daemon,诊断守护进程)负责捕获 RAC 环境中进程失败的相关信息。并将跟踪信息写出用于失败分析,DIAG 产生的信息在与 Oracle Support 技术合作来寻找导致失败的原因方面是非常有用的。每个实例仅需要一个 DIAG 进程。

  • GSD(the global service daemon,全局服务进程)与 RAC 的管理工具 dbca、srvctl、oem 进行交互,用来完成实例的启动关闭等管理事务。为了保证这些管理工具运行正常必须在所有的节点上先start gsd,并且一个 GSD 进程支持在一个节点的多个 rac.gsd 进程位ORACLE_HOME/srvm/log/gsdaemon.log。GCS 和 GES 两个进程负责通过全局资源目录(Global Resource Directory GRD)维护每个数据的文件和缓存块的状态信息。当某个实例访问数据并缓存了数据之后,集群中的其他实例也会获得一个对应的块镜像,这样其他实例在访问这些数据是就不需要再去读盘了,而是直接读取 SGA 中的缓存。GRD 存在于每个活动的 instance 的内存结构中,这个特点造成 RAC 环境的 SGA 相对于单实例数据库系统的 SGA 要大。其他的进程和内存结构都跟单实例数据库差别不大。
  1. RAC 共享存储

RAC 需要有共享存储,独立于实例之外的信息,如上面提到的ocr 和 votedisk 以及数据文件都存放在这个共享存储里的。有OCFS、OCFS2、RAW、NFS、ASM 等这样的一些存储方式。OCFS(Oracle Cluster File System) 和 OCFS2 就是一个文件系统而已,和 NFS 一样,提供一种集群环境中的共享存储的文件系统。RAW 裸设备也是一种存储方式,是 oracle11g 之前的版本中 RAC 支持的存储方式,在 Oralce9i 之前,OPS/RAC的支持只能使用这样的方式,也就是把共享存储映射到 RAW Device,然后把 Oracle 需要的数据选择 RAW device存储,但是 RAW 相对于文件系统来说不直观,不便于管理,而且 RAW Device 有数量的限制,RAW 显然需要有新的方案来代替,这样就有了 OCFS 这样的文件系统。当然,这只是 Oracle 自己的实现的集文件系统而已,还有其他厂商提供的文件系统可以作为存储的选择方案。ASM 只是数据库存储的方案而已,并不是 cluster 的方案,所以这里 ASM 应该是区别于 RAW 和 OCFS/OCFS2同一级别的概念,RAW 和 OCFS/OCFS2 不仅可以作为数据库存储的方案,同时也可以作为 Clusterware 里的存储方案,是 CRS 里需要的 storage,而 ASM 仅作为数据库的存储而已,严格来说仅是 RAC 中的一个节点应用(nodeapps)。ASM 对于 clusterware 安装时需要的 ocr 和 votedisk 这两项还不支持,毕竟 ASM 本身就需要一个实例,而 CRS 是完全在架构之外的,这也就是为什么使用了 ASM 的方案,却总还要加上 OCFS/OCFS2 和 RAW 其中的一个原因。各种 RAC 共享存储方式的对比如下:

  1. 集群文件系统——支持 windows 和 Linux 的 OCFS/OCFS2
  2. AIX 下的 GPFS 等方式——优点是管理方便,表示也很直观,但缺点是基于文件系统管理软件,又要经过 OS 的 cache 处理,性能上和稳定性上都有欠缺,所以不适合在生产环境下使用。可以支持 CRS 集群软件文件和数据库文件。
  3. RAW 裸设备方式——通过硬件支持的共享存储系统,直接用 RAW 设备存储,可以支持集群软件文件和数据库文件。
  4. 网络文件系统(NFS)——通过 NFS 实现共享存储,不过需要经过 Oracle 认证的 NFS 才行,可以支持CRS 集群软件文件和数据库文件。
  5. ASM——集合 RAW 方式 I/O 高性能和集群文件系统易管理等优点,Oracle10g 下推出的共享存储方式,但是本身 ASM 就是需要 Oracle 的实例支持,所以 ASM 仅支持数据库文件,而不支持 CRS 文件。
  1. RAC 数据库和单实例数据库的区别

为了让 RAC 中的所有实例能够访问数据库,所有的 datafiles、control files、PFILE/Spfile 和 redo log files 必须保存在共享磁盘上,并且要都能被所有节点同时访问,就涉及到裸设备和集群文件系统等。RAC database 在结构上与单实例的不同之处:至少为每个实例多配置一个 redo 线程,比如:两个实例组成的集群至少要 4 个 redo log group。每个实例两个 redo group。另外要为每一个实例准备一个 UNDO 表空间。

  1. redo 和 undo,每个实例在做数据库的修改时谁用谁的 redo 和 undo 段,各自锁定自己修改的数据,把不同实例的操作相对的独立开就避免了数据不一致。后面就要考虑备份或者恢复时 redo log 和归档日志在这种情况下的特殊考虑了。
  2. 内存和进程各个节点的实例都有自己的内存结构和进程结构.各节点之间结构是基本相同的.通过 Cache Fusion(缓存融合)技术,RAC 在各个节点之间同步 SGA 中的缓存信息达到提高访问速度的效果也保证了一致性。
  • Oracle主从/灾备方案ADG和DG的区别

首先,DG(Data Guard,数据卫士)不是一个备份恢复的工具,然而,DG却拥有备份的功能,在物理DG下它可以和主库一模一样,但是它存在的目的并不仅仅是为了备份恢复数据,应该说它的存在是为了确保企业数据的高可用性,数据保护以及灾难恢复。DBA可以通过将一些操作(例如查询报表)转移到备库执行的方式来减小主库的压力,构建高可用的企业数据库应用环境。

在DG环境中,至少有两个数据库,一个处于OPEN状态对外提供服务,这个数据库叫作主库(Primary Database)。第二个处于恢复状态,叫作备库(Standby Database)。在通常情况下,主库对外提供服务,用户在主库上进行操作,操作被记录在联机日志和归档日志中,这些日志通过网络传递给备库,然后在备库上被应用,从而实现主库和备库的数据同步。Oracle对这一过程进一步地优化设计,使得日志的传递、恢复工作更加自动化、智能化,并且提供一系列参数和命令简化了DBA工作。如果软硬件升级,那么可以把备库切换为主库继续对外服务,这样既减少了服务停止时间,并且数据不会丢失。如果异常原因导致主库不可用,那么也可以把备库强制切换为主库继续对外服务,这时数据损失都和配置的数据保护级别有关系。所以,Primary和Standby只是一个角色概念,并不固定在某个数据库中。

  1. DG的优点:
  1. 灾难恢复及高可用性。
  2. 全面的数据保护。
  3. 有效利用系统资源。
  4. 在高可用及高性能之间更加灵活的平衡机制。
  5. 故障自动检查及解决方案。
  6. 集中的、易用的管理模式。
  7. 自动化的角色转换。
  1. DG的缺点:
  1. 由于传输整个日志文件,所以,需要较高的网络传输带宽。
  2. 在Oracle 11g之前的物理备库虽然可以以只读方式打开,然后执行查询、报表等操作,但需要停止应用日志,这将使目标库与源数据不能保持同步,如果在此期间源数据库发生故障,那么将延长切换的时间。从Oracle 11g开始,ADG可以在数据库打开的情况下应用日志,这极大地提高了DG的应用范围。
  1. 逻辑备库不能支持某些特定的数据对象和数据类型。
  1. 不支持双向复制,所以,无法应用于信息集成的场合。
  1. 只能复制整个数据库,不能选择某个SCHEMA或表空间或表进行单独复制。
  2. 不支持异构的系统环境,需要相同的操作系统版本和数据库版本(Oracle 11g支持部分异构平台)。
  1. DG 与 ADG 的对比

3、1 DG 只能用Real-Time Apply

什么是real-Time Apply ,先看一下主备库日志的应用。

DG模式下主备库日志应用情况

默认备库只对 archived redo log 做 MRP 日志应用。启用real-Time Apply(实时应用),备库可以对 standby redolog 进行日志应用。 需要备库创建 standby redolog。

3、2 ADG主要应用在实时Oracle数据保护,可用性和灾难恢复

Active Data Guard是Oracle数据库企业版的选件许可证。Active Data Guard支持扩展基本Data Guard功能的高级功能。 这些包括:

  1. 实时查询  - 负责将主库最新的数据刷新到物理备库。
  2. 自动块修复  - 自动修复对坏的数据块进行修复。
  3. 远程同步  - 任何情况下的主备同步,实现零数据丢失保护。
  4. 备库开启块跟踪  - 在备库开启块跟踪,实现备用数据库上启用增量备份。
  5. Active Data Guard滚动升级  - 简化计划停机时间。
  6. 全局数据库服务  - 跨复制数据库的负载平衡和服务管理。
  7. 应用程序连续性  - 使中断对用户透明。
  • 实时数据挖掘基础Oracle Redo日志
  1. RedoLog

重做日志(Redo Log)是Oracle数据库事务的记录者。LGWR后台进程和联机重做日志是Oracle日志机制的组成部分。在出现实例失败或数据库崩溃时,可以实现实例的自动恢复和数据库的介质恢复。

在数据库中,Redo的功能主要通过 3 个组件来实现:Redo Log Buffer、LGWR 后台进程 和Redo Log File(在归档模式下,Redo Log File 最终会写出为归档日志文件)。 在Oracle的SGA 中,存在一块共享内存,称为 Redo Log Buffer。

架构模型

Redo Log Buffer 位于SGA 之中,是一块循环使用的内存区域,其中保存数据库变更的相关信息。这些信息以重做条目(Redo Entries )形式存储(Redo Entries 也经常被称为 Redo Records)。Redo Entries包含重构、重做数据库变更的重要信息,这些变更包括 INSERT、 UPDATE、DELETE 、CREATE 、ALTER 或者DROP等。在必要的时候 Redo Entries被用于数据库恢复。

Redo Entries的内容被Oracle 数据库进程从用户的内存空间复制到SGA 中的Redo Log Buffer之中。Redo Entries在内存中占用连续的顺序空间,由于Redo Log Buffer是循环使 用的,Oracle 通过一个后台进程 LGWR 不断地把 Redo Log Buffer的内容写出到 Redo Log File 中。

当用户在Buffer Cache中修改数据时,Oracle 并不会立即将修改数据写出到数据文件 上,因为那样做效率会很低,到目前为止,计算机系统中最繁忙的部分是磁盘的 I/O 操作, Oracle这样做的目的是为了减少 IO 的次数,当修改过的数据达到一定数量之后,可以进行 高效地批量写出。大部分传统数据库(当然包括 Oracle )在处理数据修改时都遵循 no-force-at-commit 策略。也就是说,在提交时并不强制写。那么为了保证数据在数据库发生故障时(例如断电) 可以恢复,Oracle 引入了Redo机制,通过连续的、顺序的日志条目的写出将随机的、分散的数据块的写出推延。这个推延使得数据的写出可以获得批量效应的性能提升。

同Redo Log Buffer 类似,Redo Log File 也是循环使用的,Oracle 允许使用最少两个 日志组。缺省情况下,数据库创建时会建立 3 个日志组。

当一个日志文件写满之后,会切换到另外一个日志文件,这个切换过程称为Log Switch 。 Log Switch 会触发一个检查点,促使 DBWR 进程将写满的日志文件保护的变更数据写回到数 据库。在检查点完成之前,日志文件是不能够被重用的。

由于Redo机制对于数据的保护,当数据库发生故障时,Oracle就可以通过 Redo重演进行数据恢复。那么一个非常重要的问题是,恢复应该从何处开始呢?

如果读取的Redo过多,那么必然导致恢复的时间过长,在生产环境中,我们必需保证恢复时间要尽量得短。Oracle通过检查点(Checkpoint )来缩减恢复时间。检查点只是一个数据库事件,它存在的根本意义在于减少恢复时间。当检查点发生时(此时的 SCN 被称为Checkpoint SCN )Oracle会通知DBWR进程,把修改过的数据,也就是此 Checkpoint SCN 之前的脏数据(Dirty Buffer )从 Buffer Cache 写入磁盘,在检查点完成后 CKPT进程会相应地更新控制文件和数据文件头,记录检查点信息,标识变更。

在检查点完成之后,此检查点之前修改过的数据都已经写回磁盘,重做日志文件中的相应重做记录对于崩溃/实例恢复不再有用。如果此后数据库崩溃,那么恢复只需要从最后一次完成的检查点开始恢复即可。如果数据库运行在归档模式(所有生产数据库,都建议运行在 归档模式),日志文件在重用之前必须写出到归档日志文件,归档日志在介质恢复时可以用来恢复数据库故障。

  1. ArchiveLog

归档日志即重做日志的备份,使用归档日志的目的是为了实现介质恢复。

日志操作模式分为两种:

1. Noarchivelog(非归档模式)

不保存重做日志。

不能在open状态下进行物理备份;要定期执行完全数据库备份;只能将数据库恢复到上次的完全备份点。

2. Archivelog

当进行日志切换时,ARCH进程会将重做日志的内容复制到归档日志中。

在归档重做日志前,新事务变化不能覆盖旧事务变化。

可以在open 状态下进行物理备份。

可以将数据库恢复到失败前的状态。

  • 日志分析工具LogMiner
  1. Logminer概述

Oracle LogMiner是Oracle公司从产品8i以后提供的一个实际非常有用的日志分析工具,使用该工具可以轻松获得Oracle在线/离线日志(或者叫做重做/归档日志)文件中的具体内容,比如操作数据库的DML和DDL语句。LogMiner本质上是集成在Oracle数据库的一个日志读取、分析工具,不仅可以分析自己数据库的重作日志文件,也可以用来分析其它Oracle数据库的重作日志文件(需要使用该数据库的字典文件)。在默认情况下,Oracle已经安装了LogMiner工具,用户可以建立Oracle数据库的连接后,通过执行sql使用LogMiner。

总的说来,LogMiner工具的主要用途有:

  1. 跟踪数据库的变化:可以离线地跟踪数据库的变化,而不会影响在线系统的性能。
  2. 回退数据库的变化:回退特定的变化数据,减少Point-In-Time Recovery的执行。
  3. 优化和扩容计划:可通过分析日志文件中的数据以分析数据的增长模式。
  1. 作为解决方案和场景

2、1 可以分析的日志类型

LogMiner既可以分析重做日志也可以分析归档日志,分析重做日志可以获取最新的变更,并且由于重做日志文件名是不变的,不需要为LogMiner重新配置需要解析的文件名;但是一旦涉及到历史变更的获取,就必须要分析归档日志,归档日志的问题在于:只有在重做日志组写满后才写入,因此具有延迟性,不可能只依赖归档日志做到实时的数据同步,另外归档日志不断增加,需要不断调整LogMiner的文件列表,关于LogMiner是否可以同时分析归档日志和重做日志(并做日志的链接和去重),以及自动追加归档日志的列表,还需要进一步探讨,目前没有看到这样的方案。

2、2 关于延迟

开启LogMiner日志分析后,从V$LOGMNR_CONTENTS视图中查询结果,具有一定的延迟,这个延迟会直接造成数据同步的延迟。

实操篇

  • Oracle19c CDB环境的搭建
  1. 安装包下载

https://download.oracle.com/otn/linux/oracle19c/190000/LINUX.X64_193000_db_home.zip

下载版本为:Oracle 19.3.0.0.0

  1. 准备工作

(1)拷贝安装包 LINUX.X64_193000_db_home.zip 到 /opt 目录下。

(2)关闭防火墙

systemctl  stop firewalld

systemctl  disable firewalld

(3)关闭selinux

vim /etc/selinux/config

修改

SELINUX=disabled

立即生效修改:

set enforce 0

getenforce查看是否生效

(4)检查硬件

RAM:>2G。官方要求内存大于2G

/tmp目录:至少1G

SWAP:

    1G<RAM<=2G:内存*1.5

    2G<RAM<=16G:等于内存

    RAM>16G:16G

  1. Oracle 19c的依赖包安装:

yum install -y bc binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat ipmiutil net-tools nfs-utils python python-configshell python-rtslib python-six targetcli

rpm -qa bc binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat ipmiutil net-tools nfs-utils python python-configshell python-rtslib python-six targetcli |wc

如果有缺少的包,单独处理

yum install -y bc binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat ipmiutil net-tools nfs-utils python python-configshell python-rtslib python-six targetcli

  1. 系统内核优化

vim /etc/sysctl.conf

net.ipv4.icmp_echo_ignore_broadcasts = 1

net.ipv4.conf.all.rp_filter = 1

#设置最大打开文件数

fs.file-max = 6815744

fs.aio-max-nr = 1048576

#共享内存的页数,Linux共享内存页大小为4KB,8G内存按照官方设置为内存的1/2。

kernel.shmall = 1572864

#最大共享内存,官方文档建议是内存的1/2。

kernel.shmmax = 6442450944

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

#tcp参数设置

net.ipv4.ip_local_port_range = 9000 65500

#默认&最大的TCP数据接收窗口大小(字节)

net.core.rmem_default = 262144

net.core.rmem_max= 4194304

#默认&最大的TCP数据发送窗口大小(字节)

net.core.wmem_default= 262144

net.core.wmem_max= 1048576

使内核参数立即生效,执行

sysctl -p  #或者 sysctl --system

修改oracle用户限制,提高软件运行性能,在/etc./security/limits.conf文件末尾添加配置项:

vim /etc/security/limits.conf

oracle           soft    nproc           2047

oracle           hard    nproc           16384

oracle           soft    nofile          1024

oracle           hard    nofile          65536

# End of file

  1. 开始安装数据库

创建 oracle 目录,授权,cd到oracle安装包路径下,解压oracle到 $ORACLE_HOME 目录下,然后执行 runInstaller 安装

(1)创建Oracle相关用户和组

groupadd -g 54321 oinstall

groupadd -g 54322 dba

groupadd -g 54324 backupdba

groupadd -g 54325 dgdba

groupadd -g 54326 kmdba

groupadd -g 54327 asmdba

groupadd -g 54328 asmoper

groupadd -g 54330 racdba

(2)创建oracle用户

useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba oracle

(3)设置Oracle用户的密码

passwd oracle

(4)创建目录

mkdir -p /opt/oracle

mkdir -p /opt/oraInventory

mkdir -p /opt/database

mkdir -p /opt/oracle/product/19.3.0

mkdir -p /opt/oracle/oradata

mkdir -p /opt/oracle/flash_recovery_area

mkdir -p /opt/oracle/product/19.3.0/db_1

(5)修改权限

chown -R oracle:oinstall /opt/oracle

chown -R oracle:oinstall /opt/oracle/oradata

chown -R oracle:oinstall /opt/oraInventory

chown -R oracle:oinstall /opt/database

chmod -R 775 /opt/oracle

(6)配置Oracle用户的环境变量

# su oracle

$ vim .bash_profile

末尾添加环境变量配置内容如下:

umask 022

#oracle数据库安装目录

export ORACLE_BASE=/opt/oracle

#oracle数据库路径

export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1

#oracle启动数据库实例名

export ORACLE_SID=orcl

#xterm窗口模式安装

export ORACLE_TERM=xterm

#配置时间格式

NLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS"

#添加系统环境变量

export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH

#添加系统环境变量

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

#防止安装过程出现乱码

#export LANG=en_US.gbk

export LANG=en_US.UTF-8

#设置Oracle客户端字符集,必须与Oracle安装时设置的字符集保持一致,

export NLS_LANG=AMERICAN_AMERICA.UTF8

重新登录或者执行source 立即生效

$ source  /home/oracle/.bash_profile

(7)切换到oracle用户解压安装zip包

# su - oracle

$ cd /opt/

$ unzip -q LINUX.X64_193000_db_home.zip -d $ORACLE_HOME

(8)修改响应文件 db_install.rsp

$ cp -r $ORACLE_HOME/install/response  /home/oracle

$ vim /home/oracle/response/db_install.rsp    #修改设置下列参数

oracle.install.option=INSTALL_DB_SWONLY

UNIX_GROUP_NAME=oinstall

INVENTORY_LOCATION=/opt/oraInventory

ORACLE_BASE=/opt/oracle

ORACLE_HOME=/opt/oracle/product/19.3.0/db_1

oracle.install.db.InstallEdition=EE

oracle.install.db.OSDBA_GROUP=dba

oracle.install.db.OSOPER_GROUP=oinstall

oracle.install.db.OSBACKUPDBA_GROUP=backupdba

oracle.install.db.OSDGDBA_GROUP=dgdba

oracle.install.db.OSKMDBA_GROUP=kmdba

oracle.install.db.OSRACDBA_GROUP=racdba

oracle.install.db.rootconfig.executeRootScript=true

oracle.install.db.rootconfig.configMethod=ROOT

oracle.install.db.ConfigureAsContainerDB=true

oracle.install.db.config.PDBName=test1

(9)以 oracle 用户开始静默安装数据库

$ $ORACLE_HOME/runInstaller -silent -ignorePrereq -responseFile /home/oracle/response/db_install.rsp

(10)安装完毕后,启动监听

# su - oracle

$ lsnrctl start

#查看默认监听端口1521的监听状态

$ netstat -an |grep 1521

tcp6       0      0 :::1521                 :::*                    LISTEN

(11)创建数据库

静默方式使用dbca.rsp来创建数据库

$cp$ORACLE_HOME/assistants/dbca/dbca.rsp /home/oracle/response/

vim /home/oracle/response/dbca.rsp

gdbName=orcl

sid=orcl

sysPassword=1q2w3e

systemPassword=1q2w3e

dbsnmpPassword=1q2w3e

datafileDestination=/opt/oracle/oradata

$ORACLE_BASE/flash_recovery_area

recoveryAreaDestination=/opt/oracle/flash_recovery_area

characterSet=AL32UTF8

totalMemory=6144

databaseType=OLTP

templateName=General_Purpose.dbc

$ dbca -silent -createDatabase -responseFile /home/oracle/response/dbca.rsp

kernel.shmall = 1048576

kernel.shmmax = 4294967296

修改后执行生效

$ sysctl -p

然后再重新静默建库

(12)安装成功(建库大概分钟级别):

[oracle@localhost response]$ su - oracle

[oracle@localhost response]$ lsnrctl  status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 21-JUN-2021 23:32:52

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production

Start Date                21-JUN-2021 21:00:27

Uptime                    0 days 2 hr. 32 min. 25 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Log File         /opt/oracle/diag/tnslsnr/localhost/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))

Services Summary...

Service "orcl" has 1 instance(s).

  Instance "orcl", status READY, has 1 handler(s) for this service...

Service "orclXDB" has 1 instance(s).

  Instance "orcl", status READY, has 1 handler(s) for this service...

The command completed successfully

[oracle@localhost response]$

[oracle@localhost response]$ netstat -an |grep 1521

tcp6       0      0 :::1521                 :::*                    LISTEN     

tcp6       0      0 ::1:1521                ::1:51071               ESTABLISHED

tcp6       0      0 ::1:1521                ::1:51107               TIME_WAIT  

tcp6       0      0 ::1:1521                ::1:51105               TIME_WAIT  

tcp6       0      0 ::1:51071               ::1:1521                ESTABLISHED

[oracle@localhost response]$

(13)登录查看实例状态:

[oracle@localhost response]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Jun 21 23:35:07 2020

Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.3.0.0.0

SQL> select status from v$instance;

STATUS

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

OPEN

  • Oracle19c主从环境设置
  1. 前置条件

主库 192.168.70.138 sid:orcl service:orcl

备库 192.168.70.139 sid:orcl service:orcldg

Sid查询:sql>select instance_name from  V$instance;

Service查询:show parameter service_name;

判断DG是否安装:

select * from v$option where parameter = 'Oracle Data Guard';

如果是true表示已经安装可以配置,否则需要安装相应组件。

  1. 设置归档

1) 开启强制归档

SQL> conn / as sysdba (以DBA身份连接数据库)

SQL> shutdown immediate; (立即关闭数据库)

SQL> startup mount (启动实例并加载数据库,但不打开)

SQL> alter database archivelog; (更改数据库为归档模式)

SQL>alter database force logging; (设置强制归档)

说明:startup nomount:启动实例,读取参数文件,分配内存空间,启动后台进程,打开跟踪文件和报警文件。startup mount:装载数据库,打开控制文件。nomount方式下还没有读取控制文件,该选项用于在数据库的控制文件全部损坏,需要重新创建数据库控制文件或创建一个新的数据库时使用。mount 选项下并没有打开数据文件,该选项可以用来修改数据库的运行模式或进行数据库恢复。

shutdown normal :正常方式关闭数据库。shutdown immediate:立即方式关闭数据库。在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。

shutdown abort :

   直接关闭数据库,正在访问数据库的会话会被突然终止,  

   如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间 shutdown abort 的时候,跟kill 进程是一样的效果

数据库立即关闭,这个时候文件状态可能不一致,因为正常关闭数据库会同步校验各文件,使得重新启动的时候文件时间点一致并且不用进行崩溃恢复,若检查点信息一致,则做崩溃恢复,若检查点信息不一致(正好在更新文件头)则需要做介质恢复。这些问题都好处理,最怕的问题是这个时候系统有大量IO,结果这样造成写的突然中断,碰巧造成文件块的逻辑坏块,那麻烦比较大一些,尤其是系统表空间的block损坏,虽然shutdown abort 出错的几率很小,1000个人可能只有一个人碰到,但是我们还是要小心。正确的处理流程是,shutdown immediate ,若数据库迟迟不能down下来,在os上观察IO状况,几乎没有io的时候,另开一窗口shutdown abort ,几乎不会出问题了。

2) 检查状态

sql>select name,force_logging from v$database;

(YES为强制)

3) 设置自动同步

如果需要在主库添加或者删除数据文件时,这些文件也会在备份添加或删除,使用如下:

sql>show parameter standby (默认此参数是manual手工方式)

sql> alter system set STANDBY_FILE_MANAGEMENT=auto;(设置自动同步)

  1. 密码文件和控制文件的创建传输

1) 密码文件位置:

一般数据库默认就有密码文件,存放在$ORACLE_HOME/dbs/orapwSID

如果没有:

sql>orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle

2) 检查密码文件状态:

检查REMOTE_LOGIN_PASSWORDFILE值是否为 EXCLUSIVE sql>show parameter REMOTE_LOGIN_PASSWORDFILE

如果值不是EXCLUSIVE则:

alter system set remote_login_passwordfile=exclusive scope=spfile;

3) 密码文件需要scp到从库

scp orapworcl oracle@192.168.70.139:/home/oracle/app/oracle/product/19.3.0/db_1/dbs

  1. db_name和db_unique_name设置

默认db_name和db_unique_name和实例名是一致的,这里是orcl需要注意在DG中主库和从库的db_unique_name是不能一致的,需要区分开的。这里我们设置主库的db_unique_name为orcl,从库为orcldg. sql>show parameter db_unique_name sql>alter system set db_unique_name=orcl scope=spfile; (主库)

sql>alter system set db_unique_name=orcldg scope=spfile; (从库)

注意虽然默认db_unique_name和db_name是一致的,但是需要显式设置,否则在spfile中没有此参数

  1. SQL*NET设置

1) 配置主库的监听

虽然可以通过netca来进行配置,但是除了这个默认的外,我们还需要一个静态注册SID_LIST_LISTENER,如果没有此从参数而且dataguard启动顺序不正确,

主库会报PING[ARC1]:Heartbeat failed to connect to standby '***'.Error is 12514导致归档无法完成。配置如下:

vim $ORACLE_HOME/network /admin/listener.ora

LISTENER =

  (ADDRESS_LIST=

       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.70.138)(PORT=1521))

       (ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

 SID_LIST_LISTENER=

   (SID_LIST=

       (SID_DESC=

                       #BEQUEATH CONFIG

          (GLOBAL_DBNAME=orcl_DGMGRL)

          (SID_NAME=sid1)

          (ORACLE_HOME=/opt/oracle/product/19.3.0/db_1)

          (SID_NAME = orcl)

        )

       )

2) 配置tnsnames

vim $ORACLE_HOME/network/admin/tnsnames.ora

LISTENER_ORCL =

        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.70.138)(PORT = 1521))

        ORCL =

                (DESCRIPTION =

                        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.70.138)(PORT = 1521))

                        (CONNECT_DATA =

                        (SERVER = DEDICATED)

                        (SERVICE_NAME = orcl)

                        )

                )

ORCLDG =

        (DESCRIPTION =

                (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.70.139)(PORT = 1521))

                (CONNECT_DATA =

                        (SERVER = DEDICATED)

                        (SERVICE_NAME = orcldg)

                        (UR=A)

                )

3) 传输到备库并修改listener.ora和tnsnames.ora

scp $ORACLE_HOME/network/admin/listener.ora oracle@192.168.70.139: $ORACLE_HOME/network/admin/

scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@192.168.75.139: $ORACLE_HOME/network/admin/

LISTENER =

  (ADDRESS_LIST=

       (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.70.139)(PORT=1521))

       (ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

 SID_LIST_LISTENER=

   (SID_LIST=

       (SID_DESC=

                       #BEQUEATH CONFIG

          (GLOBAL_DBNAME=orcl_DGMGRL)

          (SID_NAME=sid1)

          (ORACLE_HOME=/opt/oracle/product/19.3.0/db_1)

          (SID_NAME = orcl)

        )

       )

tnsnames.ora:不需要修改

  1. 重做日志传输配置

1) 查询当前归档路径(默认在快速恢复区)

sql>archive log list;

(主库操作)

mkdir /home/oracle/app/oracle/archive

sql> alter system set log_archive_dest_1='LOCATION=/home/oracle/app/oracle/archive valid_for=(all_logfiles,all_roles) db_unique_name=orcl' scope=spfile;

SQL> alter system set log_archive_dest_state_1='enable' scope=spfile;

(备库操作)

mkdir /home/oracle/app/oracle/archive

sql> alter system set log_archive_dest_1='LOCATION=/home/oracle/app/oracle/archive valid_for=(all_logfiles,all_roles) db_unique_name=orcldg' scope=spfile;

SQL> alter system set log_archive_dest_state_1='enable' scope=spfile;

(注:官方文档里说使用 valid_for=(online_logfiles, all_roles),这将导致备库无法归档备用日志文件,因为它们不是在线日志。但如果使用 all_logfiles 选项,主备库将都能归档在线以及备用日志。如果你想在备库进行备份,并同时备份归档日志的话,必须使用 all_logfiles。)

2) 配置重做日志到备份库

(主库操作)

sql>alter system set log_archive_dest_2='SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcldg';

SQL> alter system set log_archive_dest_state_2='enable' scope=spfile;

(备库操作)

SQL> alter system set log_archive_dest_2='SERVICE=orcl LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl';

SQL> alter system set log_archive_dest_state_2='enable' scope=spfile;

3) 设置db_file_name_convert和log_file_name_conver参数:

(主库、备库都操作)

SQL> alter system set log_file_name_convert='/home/oracle/app/oracle/archive','/home/oracle/app/oracle/archive' scope=spfile;

SQL> alter system set db_file_name_convert='/home/oracle/app/oracle/oradata/ORCL/dg','/home/oracle/app/oracle/oradata/ORCL/dg' scope=spfile;

  1. 配置FAL_SERVER

这个参数指定当日志传输出现问题时,备库到哪里去找缺少的归档日志。它用在备库接收的到的重做日志间有缺口的时候。这种情况会发生在日志传输出现中断时,比如你需要对备库进行维护操作。在备库维护期间,没有日志传输过来,这时缺口就出现了。设置了这个参数,备库就会主动去寻找那些缺少的日志,并要求主库进行传输。

查看方式:show parameter FAL_SERVER;

主库使用 :fal_server=从库

从库上就反过来:fal_server=主库

sql>alter system set FAL_SERVER='orcldg'; (主库)

alter system set fal_client=orcl scope=spfile; (主库)

sql>alter system set FAL_SERVER='orcl'; (从库)

alter system set fal_client=orcldg scope=spfile; (从库)

  1. Data Guard 配置里的另外一个库的名字(主备)

主库操作

sql> alter system set log_archive_config = 'dg_config=(orcl,orcldg)';

备库操作

sql> alter system set log_archive_config = 'dg_config=(orcldg,orcl)';

参数设置完,查看方式:show parameter log_archive_config;

  1. initorcl.ora文件修改

主库生成pfile (initorcl.ora),并传输到备库进行修改。

1) 主库操作:

生成init**.ora文件:

sql>create pfile from spfile;

复制到备库:

scp $ORACLE_HOME/ dbs/initorcl.ora oracle@192.168.70.139: $ORACLE_HOME//dbs

2) 备库操作:

修改备库的initorcl.ora 修改参数如下:

*.db_name='orcl'

*.db_unique_name='orcldg'

*.fal_server='orcl'

*.log_archive_config='dg_config=(orcldg,orcl)'

*.log_archive_dest_1='LOCATION=/home/oracle/app/oracle/archive valid_for=(all_logfiles,primary_role) db_unique_name=orcldg'

*.log_archive_dest_2='SERVICE=orcl lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcl'

注意:根据实际情况修改内存大小,否则,会出现共享内存异常,

  1. 启动备库到nomount状态: (备库操作)

SQL> shutdown immediate

SQL> create spfile from pfile='/opt/oracle/product/19.3.0/db_1/dbs/initorcl.ora';

SQL> startup nomount

4) 在主库上执行RMAN 并连接主数据库和备数据库(备库还是保持nomount模式)

rman target / auxiliary sys/password@orcldg   (远程连接辅助库,用户和密码)

RMAN>duplicate target database for standby from active database nofilenamecheck dorecover;

  1. 启用物理备用数据库: (duplicate 完成之后,备库是mount的)

备库操作

SQL>select status,instance_name from v$instance;

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

  1. 主备库角色验证、查看主备库同步状态

(1)分别在主备库上,执行下面的SQL进行验证:

主库:SQL> select database_role,switchover_status from v$database;

备库:SQL> select database_role,switchover_status from v$database;

  1. 查看归档日志同步状况

SQL> alter system switch logfile; //主库

sql>select sequence# from v$archived_log; 查看日志序号

sql>select sequence#,applied from v$archived_log;备库验证

  1. 启动备库到只读模式

SQL> recover managed standby database cancel;

SQL> alter database open read only;

SQL> recover managed standby database disconnect from session;

  • 物理standby database的日常维护命令
  1. 停止Standby

select process, status from v$managed_standby; --查看备库是否在应用日志进行恢复

alter database recover managed standby database cancel;

shutdown immediate;

  1. 切换到只读模式

-----由shutdown模式切换到只读模式-------

startup nomount;

alter database mount standby database;

alter database open read only;

-----由应用日志模式切换到只读模式-------

alter database recover managed standby database cancel; -- 取消日志应用

alter database open read only;

  1. 切换回管理恢复模式

startup nomount;

alter database mount standby database;

alter database recover managed standby database disconnect from session; -- 启动日志应用

alter database recover managed standby database using current logfile disconnect from session;

  1. 主库和备库之间角色切换

4.1 主库切换为备库

alter database commit to switchover to physical standby;

alter database commit to switchover to physical standby with session shutdown;-- 主库有会话连接的时候

shutdown immediate

startup nomount;

alter database mount standby database;

alter database recover managed standby database disconnect from session;

4.2 从库切换为主库

alter database commit to switchover to primary;

shutdown immediate;

startup

alter system switch logfile;

  1. 备库自动使用主库传过来的日志进行恢复

alter database recover automatic standby database;

  1. 更改保护模式

alter database set standby database to maximize protection;

alter database set standby database to maximize availability;

alter database set standby database to maximize performancen;

  1. 取消自动恢复模式

alter database recover managed standby database cancel;

alter database recover managed standby database finish;

alter database recover managed standby database finish force;

  • oracle日志实操
  1. Oracle日志的路径:

登录:sqlplus "/as sysdba"

select * from v$logfile;    --查看日志文件路径

  GROUP# STATUS  TYPE

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

MEMBER

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

IS_RECOVE     CON_ID

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

 3  ONLINE

/opt/oracle/oradata/ORCL/redo03.log

NO    0

 2  ONLINE

/opt/oracle/oradata/ORCL/redo02.log

NO    0

    GROUP# STATUS  TYPE

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

MEMBER

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

IS_RECOVE     CON_ID

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

 1  ONLINE

/opt/oracle/oradata/ORCL/redo01.log

NO    0

  1. 与logmnr相关的视图

select * from dict t where t.table_name like '%LOGMNR%';

TABLE_NAME

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

COMMENTS

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

DBA_LOGMNR_LOG

DBA_LOGMNR_PROFILE_PLSQL_STATS

DBA_LOGMNR_PROFILE_TABLE_STATS

TABLE_NAME

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

COMMENTS

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

DBA_LOGMNR_PURGED_LOG

DBA_LOGMNR_SESSION

CDB_LOGMNR_LOG

 in all containers

TABLE_NAME

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

COMMENTS

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

CDB_LOGMNR_PROFILE_PLSQL_STATS

 in all containers

CDB_LOGMNR_PROFILE_TABLE_STATS

 in all containers

CDB_LOGMNR_PURGED_LOG

 in all containers

TABLE_NAME

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

COMMENTS

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

CDB_LOGMNR_SESSION

 in all containers

GV$LOGMNR_CONTENTS

Synonym for GV_$LOGMNR_CONTENTS

GV$LOGMNR_DICTIONARY

Synonym for GV_$LOGMNR_DICTIONARY

TABLE_NAME

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

COMMENTS

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

GV$LOGMNR_DICTIONARY_LOAD

Synonym for GV_$LOGMNR_DICTIONARY_LOAD

GV$LOGMNR_LATCH

Synonym for GV_$LOGMNR_LATCH

GV$LOGMNR_LOGFILE

Synonym for GV_$LOGMNR_LOGFILE

TABLE_NAME

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

COMMENTS

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

GV$LOGMNR_LOGS

Synonym for GV_$LOGMNR_LOGS

GV$LOGMNR_PARAMETERS

Synonym for GV_$LOGMNR_PARAMETERS

GV$LOGMNR_PROCESS

Synonym for GV_$LOGMNR_PROCESS

TABLE_NAME

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

COMMENTS

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

GV$LOGMNR_SESSION

Synonym for GV_$LOGMNR_SESSION

GV$LOGMNR_STATS

Synonym for GV_$LOGMNR_STATS

GV$LOGMNR_TRANSACTION

Synonym for GV_$LOGMNR_TRANSACTION

TABLE_NAME

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

COMMENTS

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

V$LOGMNR_CONTENTS

Synonym for V_$LOGMNR_CONTENTS

V$LOGMNR_DICTIONARY

Synonym for V_$LOGMNR_DICTIONARY

V$LOGMNR_DICTIONARY_LOAD

Synonym for V_$LOGMNR_DICTIONARY_LOAD

TABLE_NAME

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

COMMENTS

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

V$LOGMNR_LATCH

Synonym for V_$LOGMNR_LATCH

V$LOGMNR_LOGFILE

Synonym for V_$LOGMNR_LOGFILE

V$LOGMNR_LOGS

Synonym for V_$LOGMNR_LOGS

TABLE_NAME

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

COMMENTS

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

V$LOGMNR_PARAMETERS

Synonym for V_$LOGMNR_PARAMETERS

V$LOGMNR_PROCESS

Synonym for V_$LOGMNR_PROCESS

V$LOGMNR_SESSION

Synonym for V_$LOGMNR_SESSION

TABLE_NAME

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

COMMENTS

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

V$LOGMNR_STATS

Synonym for V_$LOGMNR_STATS

V$LOGMNR_TRANSACTION

Synonym for V_$LOGMNR_TRANSACTION

  1. 日志操作sql语句:

1.查询系统使用的是哪一组日志文件:

select * from v$log;

2.查询正在使用的组所对应的日志文件:

select * from v$logfile;

3.强制日志切换:

alter system switch logfile;

4.查询历史日志:

select * from v$log_history;

5.查询日志的归档模式:

select dbid,name,created,log_mode from v$database;

6.查询归档日志的信息:

select recid,stamp,thread#,sequence#,name from v$archived_log;

7.增加与删除日志文件组

alter database add logfile group 1 ('/home1/oracle/oradata/ora8i/log1a.log'),'/home2/oracle/oradata/ora8i/log1b.log') size 100M;

alter database drop logfile group 1;

8.增加与删除日志成员

alter database add logfile member '/home1/oracle/oradata/ora8i/log1a.log' to group 1,'/home1/oracle/oradata/ora8i/log2a.log' to group 2;

alter database drop logfile member '/home1/oracle/oradata/ora8i/log1a.log' ;

9.日志文件移动

alter database rename file '/home1/oracle/oradata/ora8i/log1a.log' to '/home2/oracle/oradata/ora8i/log1a.log';

执行该命令之前必须保证该日志文件物理上已经移动到新目录

10.清除日志文件

alter database clear logfile '/home1/oracle/oradata/ora8i/log1a.log';

该命令不能用删除组及组成员命令删除日志时使用

  1. 在备库重建online redo和standby redo log

重建online redo

SQL> alter database rename file '/u01/app/oracle/flash_recovery_area/DG_ST/onlinelog/o1_mf_1_8qwomcmy_.log' to '/u01/app/oracle/oradata/dg/redo01.log';

alter database rename file '/u01/app/oracle/flash_recovery_area/DG_ST/onlinelog/o1_mf_1_8qwomcmy_.log' to '/u01/app/oracle/oradata/dg/redo01.log'

*

ERROR at line 1:

ORA-01511: error in renaming log/data files

ORA-01275: Operation RENAME is not allowed if standby file management is

automatic.

关闭数据库,在开启状态下。将auto修改成manual

SQL>alter system set standby_file_management=manual;

初始化参数STANDBY_FILE_MANAGEMENT用于激活或禁止自动备用文件管理特征,默认值为MANUAL。

当设置该参数为MANUAL时,需要手工管理备用数据库的文件;当设置该参数为AUTO时,如果在主数据库上增加或删除文件,则会自动在备用数据库上增加或删除文件。

该初始化参数是动态参数,可以使用ALTER  SYSTEM命令进行修改。

 alter database rename file '/u01/app/oracle/flash_recovery_area/DG_ST/onlinelog/o1_mf_1_8qwomcmy_.log' to '/u01/app/oracle/oradata/dg/redo01.log';

重建standby redo log

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

SQL>alter database clear logfile group 1;

SQL> alter database drop standby logfile group 1;

SQL> alter database add standby logfile group 1 ('/u03/redo/stby01.log') size 50m;

  • 采集用户权限设置

当前从库为Read only模式,所以一下操作只能通过操作主库然后同步到从库。

  1. 远程登录rac模式登录虚出来的ip

sqlplus sys/oracle@xxx.xxx.x.xxx:1521/SID as sysdba

  1. create role c##cbrole;     --创建CDB级别的权限,权限名称为cbrole。

  1. grant create session to c##cbrole;         --赋给cbrole权限创建session的权限,logminer是基于session隔离的。

  1. grant execute_catalog_role,select any transaction,select any dictionary to c##cbrole; --赋给执行权限。

  1. create user c##cbuser identified by cbuser;    --创建CDB级别的用户,logminer是基于根库的(CDB)。

  1. grant c##cbrole to c##cbuser;       --把上边的CDB级别的权限赋给新建用户。

  1. grant dba to c##cbuser container = all;   --把容器(pdb)的dba权限复制给新建用户,能连接pdb。
  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值