暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Oracle 19c dataguard创建pdb的坑?

原创 jieguo 2024-03-20
788

主库创建新pdb名字为zxm,备库的pdb创建失败

备库的alert日志:
Recovery created pluggable database ZXM
ZXM(4):Tablespace-SYSTEM during PDB create skipped since source is in            r/w mode or this is a refresh clone
ZXM(4):File #22 added to control file as 'UNNAMED00022'. Originally created as:
ZXM(4):'/u01/app/oracle/oradata/ORCL/zxm/system01.dbf'
ZXM(4):because the pluggable database was created with nostandby
ZXM(4):or the tablespace belonging to the pluggable database is
ZXM(4):offline.
ZXM(4):Tablespace-SYSAUX during PDB create skipped since source is in            r/w mode or this is a refresh clone
......

主库创建正常:

[oracle@oracle19c ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 20 12:26:29 2024
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> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 JYC                            READ WRITE NO
SQL> create pluggbale database zxm from jyc;
create pluggbale database zxm from jyc
       *
ERROR at line 1:
ORA-00901: invalid CREATE command


SQL> create pluggable database zxm from jyc;
create pluggable database zxm from jyc
                                     *
ERROR at line 1:
ORA-65016: FILE_NAME_CONVERT must be specified


SQL> !oerr ora 65016;
65016, 00000, "FILE_NAME_CONVERT must be specified"
// *Cause:  Data files, and possibly other files, needed to be copied as a
//          part of creating a pluggable database.  However, Oracle Managed 
//          Files (OMF) was not enabled, PDB_FILE_NAME_CONVERT was not defined,
//          and there was a failure to specify the FILE_NAME_CONVERT clause.
// *Action: Enable OMF or define PDB_FILE_NAME_CONVERT system parameter before
//          issuing CREATE PLUGGABLE DATABASE statement, or specify 
//          FILE_NAME_CONVERT clause as a part of the statement.
//

SQL> show parameter create;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
create_bitmap_area_size              integer     8388608
create_stored_outlines               string
db_create_file_dest                  string
db_create_online_log_dest_1          string
db_create_online_log_dest_2          string
db_create_online_log_dest_3          string
db_create_online_log_dest_4          string
db_create_online_log_dest_5          string
SQL> set time on
12:28:49 SQL> set time off
SQL> set timing on
SQL> CREATE PLUGGABLE DATABASE zxm
  2  FROM jyc
  3  FILE_NAME_CONVERT = ('jyc', 'zxm');

Pluggable database created.

Elapsed: 00:00:06.95
SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 JYC                            READ WRITE NO
         4 ZXM                            MOUNTED
SQL> alter pluggable database zxm open;

Pluggable database altered.

Elapsed: 00:00:03.94
SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 JYC                            READ WRITE NO
         4 ZXM                            READ WRITE NO
SQL> show parameter pdb;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
autotask_max_active_pdbs             integer     2
awr_pdb_autoflush_enabled            boolean     FALSE
awr_pdb_max_parallel_slaves          integer     10
disable_pdb_feature                  big integer 0
enable_automatic_maintenance_pdb     boolean     TRUE
enabled_PDBs_on_standby              string      *
max_datapump_jobs_per_pdb            string      100
max_pdbs                             integer     254
one_step_plugin_for_pdb_with_tde     boolean     FALSE
pdb_file_name_convert                string
pdb_lockdown                         string

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pdb_os_credential                    string
pdb_template                         string
scheduler_follow_pdbtz               boolean     FALSE
standby_pdb_source_file_dblink       string
standby_pdb_source_file_directory    string
target_pdbs                          integer     6
SQL> set line 160
SQL> set wrap off
SQL> select  con_id,file#,name from v$datafile;

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         1          1 /u01/app/oracle/oradata/ORCL/system01.dbf
         1          3 /u01/app/oracle/oradata/ORCL/sysaux01.dbf
         1          4 /u01/app/oracle/oradata/ORCL/undotbs01.dbf
         2          5 /u01/app/oracle/oradata/ORCL/pdbseed/system01.dbf
         2          6 /u01/app/oracle/oradata/ORCL/pdbseed/sysaux01.dbf
         1          7 /u01/app/oracle/oradata/ORCL/users01.dbf
         2          8 /u01/app/oracle/oradata/ORCL/pdbseed/undotbs01.dbf
         3          9 /u01/app/oracle/oradata/ORCL/jyc/system01.dbf
         3         10 /u01/app/oracle/oradata/ORCL/jyc/sysaux01.dbf
         3         11 /u01/app/oracle/oradata/ORCL/jyc/undotbs01.dbf
         3         12 /u01/app/oracle/oradata/ORCL/jyc/users01.dbf

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         3         13 /u01/app/oracle/oradata/ORCL/jyc/users02.dbf
         3         14 /u01/app/oracle/oradata/ORCL/jyc/test01.dbf
         3         15 /u01/app/oracle/oradata/ORCL/jyc/data01.dbf
         1         16 /u01/app/oracle/oradata/ORCL/system02.dbf
         1         17 /u01/app/oracle/oradata/ORCL/test01.dbf
         3         18 /u01/app/oracle/oradata/ORCL/jyc/test101_18.dbf
         3         19 /u01/app/oracle/oradata/ORCL/jyc/test101.dbf
         3         20 /u01/app/oracle/oradata/ORCL/jyc/jyc01.dbf
         3         21 /u01/app/oracle/oradata/ORCL/jyc/users03.dbf
         4         22 /u01/app/oracle/oradata/ORCL/zxm/system01.dbf
         4         23 /u01/app/oracle/oradata/ORCL/zxm/sysaux01.dbf

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         4         24 /u01/app/oracle/oradata/ORCL/zxm/undotbs01.dbf
         4         25 /u01/app/oracle/oradata/ORCL/zxm/users01.dbf
         4         26 /u01/app/oracle/oradata/ORCL/zxm/users02.dbf
         4         27 /u01/app/oracle/oradata/ORCL/zxm/users03.dbf
         4         28 /u01/app/oracle/oradata/ORCL/zxm/test01.dbf
         4         29 /u01/app/oracle/oradata/ORCL/zxm/data01.dbf
         4         30 /u01/app/oracle/oradata/ORCL/zxm/test101_18.dbf
         4         31 /u01/app/oracle/oradata/ORCL/zxm/test101.dbf
         4         32 /u01/app/oracle/oradata/ORCL/zxm/zxm01.dbf

31 rows selected.

Elapsed: 00:00:00.01
SQL> select con_id,file#,name from v$tempfile;

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         1          1 /u01/app/oracle/oradata/ORCL/temp01.dbf
         2          2 /u01/app/oracle/oradata/ORCL/pdbseed/temp012024-03-18_12-27-59-226-PM.dbf
         3          3 /u01/app/oracle/oradata/ORCL/jyc/temp01.dbf
         4          5 /u01/app/oracle/oradata/ORCL/zxm/temp01.dbf

Elapsed: 00:00:00.02
SQL> alter session set container=zxm;

Session altered.

Elapsed: 00:00:00.00
SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
TEST
DATA
TEST1
TEST2
JYC

10 rows selected.

Elapsed: 00:00:00.01

备库处理:

1.执行pdb数据文件恢复:

检查备库缺失的文件号:
image.png

select con_id,file#,name from v$datafile;
select 'alter database datafile '||''||file#||''||' online;' from v$datafile where CON_ID=4;
rman target sys/abcd1234@tns_dgorcl
run
{
set newname for database to '/u01/app/oracle/oradata/DGORCL/zxm/%N%f';
restore datafile 22,23,24,25,26,27,28,29,30,31,32 from service "tns_orcl";
switch datafile all;
}

或者如下命令:
run
{
set newname for pluggable database zxm to '/u01/app/oracle/oradata/DGORCL/zxm/%N%f';
restore pluggable database zxm from service "tns_orcl";
}
switch pluggable database zxm to copy;

2.在cdb的mount状态下将zxm的datafile online,并打开pdb继续应用日志:

备库需重启到mount状态处理:

SQL> conn / as sysdba
Connected.
SQL> shutdown immediate
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 3221223192 bytes
Fixed Size                  9139992 bytes
Variable Size             654311424 bytes
Database Buffers         2550136832 bytes
Redo Buffers                7634944 bytes
Database mounted.
SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       MOUNTED
         3 JYC                            MOUNTED
         4 ZXM                            MOUNTED
         5 JX                             MOUNTED
         7 ZZW                            MOUNTED

SQL> alter session set container=zxm;

Session altered.
SQL> select 'alter database datafile '||''||file#||''||' online;' from v$datafile;
'ALTERDATABASEDATAFILE'||''||FILE#||''||'ONLINE;'
------------------------------------------------------------------------
alter database datafile 22 online;
alter database datafile 23 online;
alter database datafile 24 online;
......

SQL> alter database datafile 22,23,24,25,26,27,28,29,30,31,32 online;

Database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         4 ZXM                            MOUNTED
SQL> conn / as sysdba
Connected.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 JYC                            MOUNTED
         4 ZXM                            MOUNTED
SQL> alter pluggable database all open;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 JYC                            READ ONLY  NO
         4 ZXM                            READ ONLY  NO
SQL> alter database recover managed standby database using current logfile disconnect;

Database altered.

3.对比temp表空间文件,备库手工增加文件:

SQL> select database_role,open_mode from v$database;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY

SQL> set  line 160
SQL> set wrap off
SQL> select  con_id,file#,name from v$datafile;

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         1          1 /u01/app/oracle/oradata/DGORCL/system01.dbf
         1          3 /u01/app/oracle/oradata/DGORCL/sysaux01.dbf
         1          4 /u01/app/oracle/oradata/DGORCL/undotbs01.dbf
         2          5 /u01/app/oracle/oradata/DGORCL/pdbseed/system01.dbf
         2          6 /u01/app/oracle/oradata/DGORCL/pdbseed/sysaux01.dbf
         1          7 /u01/app/oracle/oradata/DGORCL/users01.dbf
         2          8 /u01/app/oracle/oradata/DGORCL/pdbseed/undotbs01.dbf
         3          9 /u01/app/oracle/oradata/DGORCL/jyc/system01.dbf
         3         10 /u01/app/oracle/oradata/DGORCL/jyc/sysaux01.dbf
         3         11 /u01/app/oracle/oradata/DGORCL/jyc/undotbs01.dbf
         3         12 /u01/app/oracle/oradata/DGORCL/jyc/users01.dbf

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         3         13 /u01/app/oracle/oradata/DGORCL/jyc/users02.dbf
         3         14 /u01/app/oracle/oradata/DGORCL/jyc/test01.dbf
         3         15 /u01/app/oracle/oradata/DGORCL/jyc/data01.dbf
         1         16 /u01/app/oracle/oradata/DGORCL/system02.dbf
         1         17 /u01/app/oracle/oradata/DGORCL/test01.dbf
         3         18 /u01/app/oracle/oradata/DGORCL/jyc/test101_18.dbf
         3         19 /u01/app/oracle/oradata/DGORCL/jyc/test101.dbf
         3         20 /u01/app/oracle/oradata/DGORCL/jyc/jyc01.dbf
         3         21 /u01/app/oracle/oradata/DGORCL/jyc/users03.dbf
         4         22 /u01/app/oracle/oradata/DGORCL/zxm/SYSTEM22
         4         23 /u01/app/oracle/oradata/DGORCL/zxm/SYSAUX23

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         4         24 /u01/app/oracle/oradata/DGORCL/zxm/UNDOTBS124
         4         25 /u01/app/oracle/oradata/DGORCL/zxm/USERS25
         4         26 /u01/app/oracle/oradata/DGORCL/zxm/USERS26
         4         27 /u01/app/oracle/oradata/DGORCL/zxm/USERS27
         4         28 /u01/app/oracle/oradata/DGORCL/zxm/TEST28
         4         29 /u01/app/oracle/oradata/DGORCL/zxm/DATA29
         4         30 /u01/app/oracle/oradata/DGORCL/zxm/TEST130
         4         31 /u01/app/oracle/oradata/DGORCL/zxm/TEST231
         4         32 /u01/app/oracle/oradata/DGORCL/zxm/JYC32

31 rows selected.

SQL> select con_id,file#,name from v$tempfile;

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         1          1 /u01/app/oracle/oradata/DGORCL/temp01.dbf
         2          2 /u01/app/oracle/oradata/DGORCL/pdbseed/temp012024-03-18_12-27-59-226-PM.dbf
         3          3 /u01/app/oracle/oradata/DGORCL/jyc/temp01.dbf

SQL> alter session set container=zxm;

Session altered.

SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
TEST
DATA
TEST1
TEST2
JYC

10 rows selected.

SQL> select con_id,file#,name from v$tempfile;

no rows selected


SQL> alter tablespace temp add tempfile '/u01/app/oracle/oradata/DGORCL/zxm/temp01.dbf' size 10M;

Tablespace altered.

SQL> select con_id,file#,name from v$tempfile;

    CON_ID      FILE# NAME
---------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------
         4          5 /u01/app/oracle/oradata/DGORCL/zxm/temp01.dbf

相关参考:

Making Use Deferred PDB Recovery and the STANDBYS=NONE Feature with Oracle Multitenant (Doc ID 1916648.1)

image.png
image.png

Data Guard Impact on Oracle Multitenant Environments (Doc ID 2049127.1)

image.png
image.png

测试直接创建PDB同步正常:(不是create from的方式)

SQL> CREATE PLUGGABLE DATABASE jx ADMIN USER jx IDENTIFIED BY abcd1234 FILE_NAME_CONVERT = ('pdbseed', 'jx');
Pluggable database created.

image.png

pbd坑类似问题参考:https://www.modb.pro/db/1699990660547952640

最后修改时间:2024-03-21 11:08:30
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论