ORACLE 19c 统一恢复处于ASM中的CDB含PDB数据文件到某一个文件目录下面

本文介绍了在NOCDB环境中,针对PDB中不同路径的文件恢复方法,涉及RMAN操作和路径设置实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NOCDB情况下,要把ASM中的文件恢复到文件系统,大家都知道分别设置每个文件的路径即可,但如果是租户环境,每个PDB都有不同路径,而且每个PDB都有SYSTEM,SYSAUX等一些表空降,不可能放在同一个目录中,而是放在不同的目录,那恢复时,怎么设置呢 ?

比如下面数据库以在本地恢复为例,如果是异机恢复,步骤类似:

SYS@orclcdb> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

ORCLCDB,有一个PDB,ORCLPDB,一个PDBSEED,数据文件放在ASM磁盘组DATA中,想整体恢复到文件系统,比如 /u01/app/oracle/oradata/orclcdb/

RMAN> report schema;

Report of database schema for database with db_unique_name ORCLCDB

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    1700     SYSTEM               ***     +DATA/ORCLCDB/DATAFILE/system.257.1140286827
3    1024     SYSAUX               ***     +DATA/ORCLCDB/DATAFILE/sysaux.258.1140286963
4    1500     UNDOTBS1             ***     +DATA/ORCLCDB/DATAFILE/undotbs1.259.1140287029
5    540      PDB$SEED:SYSTEM      ***     +DATA/ORCLCDB/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.266.1140289995
6    430      PDB$SEED:SYSAUX      ***     +DATA/ORCLCDB/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.267.1140289995
7    5        USERS                ***     +DATA/ORCLCDB/DATAFILE/users.260.1140287029
8    215      PDB$SEED:UNDOTBS1    ***     +DATA/ORCLCDB/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.268.1140289995
9    550      ORCLPDB:SYSTEM       ***     +DATA/ORCLCDB/FECB9F1537517278E0537885A8C0E7DC/DATAFILE/system.272.1140292289
10   500      ORCLPDB:SYSAUX       ***     +DATA/ORCLCDB/FECB9F1537517278E0537885A8C0E7DC/DATAFILE/sysaux.273.1140292289
11   215      ORCLPDB:UNDOTBS1     ***     +DATA/ORCLCDB/FECB9F1537517278E0537885A8C0E7DC/DATAFILE/undotbs1.271.1140292289
12   15       ORCLPDB:USERS        ***     +DATA/ORCLCDB/FECB9F1537517278E0537885A8C0E7DC/DATAFILE/users.275.1140292305

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    500      TEMP                 32767       +DATA/ORCLCDB/TEMPFILE/temp.265.1140287089
2    138      PDB$SEED:TEMP        32767       +DATA/ORCLCDB/FECB1A5B8C146A75E0537885A8C0F418/TEMPFILE/temp.269.1140290063
3    139      ORCLPDB:TEMP         32767       +DATA/ORCLCDB/FECB9F1537517278E0537885A8C0E7DC/TEMPFILE/temp.274.1140292293


步骤如下:
 

1.备份


  rman >backup database plus archivelog;


2.关闭数据库


  sql>shutdown immediate;


3.恢复到文件系统


  RMAN>
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
allocate channel c4 device type disk;
set newname for database "cdb$root" to '/u01/app/oracle/oradata/ORCLCDB/%b';
set newname for database "PDB$SEED" to '/u01/app/oracle/oradata/ORCLCDB/pdbseed/%b';
set newname for database "ORCLPDB" to '/u01/app/oracle/oradata/ORCLCDB/orclpdb/%b';
restore database root database "PDB$SEED" DATABASE "ORCLPDB";
switch datafile all;
switch tempfile all;
recover database;
}
需要注意的是:这里不同的PDB,要对应到不同的目录,需要单独指定PDB,而且,cdb$root要单独指定。

allocated channel: c1
channel c1: SID=613 device type=DISK

allocated channel: c2
channel c2: SID=11 device type=DISK

allocated channel: c3
channel c3: SID=213 device type=DISK

allocated channel: c4
channel c4: SID=414 device type=DISK

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 19-AUG-23

channel c2: starting datafile backup set restore
channel c2: specifying datafile(s) to restore from backup set
channel c2: restoring datafile 00001 to /u01/app/oracle/oradata/ORCLCDB/system.257.1140286827
channel c2: restoring datafile 00003 to /u01/app/oracle/oradata/ORCLCDB/sysaux.258.1140286963
channel c2: restoring datafile 00004 to /u01/app/oracle/oradata/ORCLCDB/undotbs1.259.1140287029
channel c2: restoring datafile 00007 to /u01/app/oracle/oradata/ORCLCDB/users.260.1140287029
channel c2: reading from backup piece +FRA/ORCLCDB/BACKUPSET/2023_08_19/nnndf0_tag20230819t170606_0.291.1145293567
channel c3: starting datafile backup set restore
channel c3: specifying datafile(s) to restore from backup set
channel c3: restoring datafile 00009 to /u01/app/oracle/oradata/ORCLCDB/orclpdb/system.272.1140292289
channel c3: restoring datafile 00010 to /u01/app/oracle/oradata/ORCLCDB/orclpdb/sysaux.273.1140292289
channel c3: restoring datafile 00011 to /u01/app/oracle/oradata/ORCLCDB/orclpdb/undotbs1.271.1140292289
channel c3: restoring datafile 00012 to /u01/app/oracle/oradata/ORCLCDB/orclpdb/users.275.1140292305
channel c3: reading from backup piece +FRA/ORCLCDB/FECB9F1537517278E0537885A8C0E7DC/BACKUPSET/2023_08_19/nnndf0_tag20230819t170606_0.290.1145293671
channel c1: restoring datafile 00005
input datafile copy RECID=22 STAMP=1144754940 file name=+FRA/ORCLCDB/FECB1A5B8C146A75E0537885A8C0F418/DATAFILE/system.260.1144754939
destination for restore of datafile 00005: /u01/app/oracle/oradata/ORCLCDB/pdbseed/system.266.1140289995
channel c4: restoring datafile 00006
input datafile copy RECID=24 STAMP=1144754946 file name=+FRA/ORCLCDB/FECB1A5B8C146A75E0537885A8C0F418/DATAFILE/sysaux.259.1144754945
destination for restore of datafile 00006: /u01/app/oracle/oradata/ORCLCDB/pdbseed/sysaux.267.1140289995
channel c4: copied datafile copy of datafile 00006, elapsed time: 00:00:45
output file name=/u01/app/oracle/oradata/ORCLCDB/pdbseed/sysaux.267.1140289995 RECID=34 STAMP=1145295053
channel c4: restoring datafile 00008
input datafile copy RECID=25 STAMP=1144754949 file name=+FRA/ORCLCDB/FECB1A5B8C146A75E0537885A8C0F418/DATAFILE/undotbs1.268.1144754949
destination for restore of datafile 00008: /u01/app/oracle/oradata/ORCLCDB/pdbseed/undotbs1.268.1140289995
channel c1: copied datafile copy of datafile 00005, elapsed time: 00:01:00
output file name=/u01/app/oracle/oradata/ORCLCDB/pdbseed/system.266.1140289995 RECID=36 STAMP=1145295065
channel c3: piece handle=+FRA/ORCLCDB/FECB9F1537517278E0537885A8C0E7DC/BACKUPSET/2023_08_19/nnndf0_tag20230819t170606_0.290.1145293671 tag=TAG20230819T170606
channel c3: restored backup piece 1
channel c3: restore complete, elapsed time: 00:01:00
channel c4: copied datafile copy of datafile 00008, elapsed time: 00:00:15
output file name=/u01/app/oracle/oradata/ORCLCDB/pdbseed/undotbs1.268.1140289995 RECID=38 STAMP=1145295072
channel c2: piece handle=+FRA/ORCLCDB/BACKUPSET/2023_08_19/nnndf0_tag20230819t170606_0.291.1145293567 tag=TAG20230819T170606
channel c2: restored backup piece 1
channel c2: restore complete, elapsed time: 00:01:41
Finished restore at 19-AUG-23

datafile 1 switched to datafile copy
input datafile copy RECID=41 STAMP=1145295112 file name=/u01/app/oracle/oradata/ORCLCDB/system.257.1140286827
datafile 3 switched to datafile copy
input datafile copy RECID=42 STAMP=1145295112 file name=/u01/app/oracle/oradata/ORCLCDB/sysaux.258.1140286963
datafile 4 switched to datafile copy
input datafile copy RECID=43 STAMP=1145295112 file name=/u01/app/oracle/oradata/ORCLCDB/undotbs1.259.1140287029
datafile 7 switched to datafile copy
input datafile copy RECID=44 STAMP=1145295112 file name=/u01/app/oracle/oradata/ORCLCDB/users.260.1140287029
datafile 5 switched to datafile copy
input datafile copy RECID=45 STAMP=1145295112 file name=/u01/app/oracle/oradata/ORCLCDB/pdbseed/system.266.1140289995
datafile 6 switched to datafile copy
input datafile copy RECID=46 STAMP=1145295113 file name=/u01/app/oracle/oradata/ORCLCDB/pdbseed/sysaux.267.1140289995
datafile 8 switched to datafile copy
input datafile copy RECID=47 STAMP=1145295113 file name=/u01/app/oracle/oradata/ORCLCDB/pdbseed/undotbs1.268.1140289995
datafile 9 switched to datafile copy
input datafile copy RECID=48 STAMP=1145295113 file name=/u01/app/oracle/oradata/ORCLCDB/orclpdb/system.272.1140292289
datafile 10 switched to datafile copy
input datafile copy RECID=49 STAMP=1145295113 file name=/u01/app/oracle/oradata/ORCLCDB/orclpdb/sysaux.273.1140292289
datafile 11 switched to datafile copy
input datafile copy RECID=50 STAMP=1145295113 file name=/u01/app/oracle/oradata/ORCLCDB/orclpdb/undotbs1.271.1140292289
datafile 12 switched to datafile copy
input datafile copy RECID=51 STAMP=1145295113 file name=/u01/app/oracle/oradata/ORCLCDB/orclpdb/users.275.1140292305


Starting recover at 19-AUG-23

starting media recovery
media recovery complete, elapsed time: 00:00:01

Finished recover at 19-AUG-23
released channel: c1
released channel: c2
released channel: c3
released channel: c4


4.打开数据库


RMAN> alter database open;



5.验证数据库数据文件


SYS@orclcdb> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ORCLCDB/system.257.1140286827
/u01/app/oracle/oradata/ORCLCDB/sysaux.258.1140286963
/u01/app/oracle/oradata/ORCLCDB/undotbs1.259.1140287029
/u01/app/oracle/oradata/ORCLCDB/pdbseed/system.266.1140289995
/u01/app/oracle/oradata/ORCLCDB/pdbseed/sysaux.267.1140289995
/u01/app/oracle/oradata/ORCLCDB/users.260.1140287029
/u01/app/oracle/oradata/ORCLCDB/pdbseed/undotbs1.268.1140289995
/u01/app/oracle/oradata/ORCLCDB/orclpdb/system.272.1140292289
/u01/app/oracle/oradata/ORCLCDB/orclpdb/sysaux.273.1140292289
/u01/app/oracle/oradata/ORCLCDB/orclpdb/undotbs1.271.1140292289
/u01/app/oracle/oradata/ORCLCDB/orclpdb/users.275.1140292305


6. 临时文件及其他文件的处理

可以参照这个处理:
http://bbs.cqsztech.com/forum.ph ... hlight=%D2%EC%BB%FA


附录:
     mos:

Doc ID 2818346.1
<think>首先,用户的问题是:我想查询 Oracle 19c 中所有的 CDBPDB。用户需要查看所有 CDBPDB 的列表。 从系统级指令来看: - 所有行内数学表达式必须使用 $...$ 格式,但这个问题是关于 Oracle 数据库的,不涉及数学表达式,所以可能不需要。 - 独立公式必须使用 $$...$$ 格式,但同样,这里没有数学公式。 - LaTeX 语法正确:确保任何数学表达式正确,但这里不适用。 - 使用中文回答:我的回答必须用中文。 - 生成相关问题:在回答结束时,生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识:例如 [^1]。用户提供了几个引用,我需要参考它们。 用户提供的引用: - 引用[1]: 关于 CDB 安装、PDB 安装,查询 CDB 名称,创建 PDB 的步骤。 - 引用[2]: 关于 CDBPDB 的关系,创建 PDB 的方法。 - 引用[3]: 解释 CDBPDB,提到默认 PDBPDB$SEED。 - 引用[4]: 关于 CDBPDB 的转换。 这些引用是关于 Oracle 19c 的 CDBPDB 的安装和操作,但用户的问题是查询所有 CDBPDB 的列表。所以,我需要基于这些信息,提供查询方法。 关键点: - CDB (Container Database) 是容器数据库。 - PDB (Pluggable Database) 是可插拔数据库。 - 在 Oracle 19c 中,CDB多个 PDB。 要查询所有 CDBPDB,我需要提供 SQL 查询语句。 从引用中: - 引用[1] 提到:SELECT PDB_ID, PDB_NAME, GUID, STATUS FROM DBA_PDBS ORDER BY PDB_ID; 这查询了 PDB 信息。 - 引用[4] 提到:在 sqlplus 下用 sys 登陆 CDB 数据库。 所以,查询 PDB 列表可以使用 DBA_PDBS 视图。 对于 CDB,通常只有一个 CDB per instance, but in Oracle, a CDB can have multiple PDBs. To see the CDB itself, we might query v$database or similar. Common ways: - To see the CDB name: SELECT NAME FROM V$DATABASE; - To see all PDBs: SELECT PDB_NAME, STATUS FROM DBA_PDBS; or using CDB_ views if connected to CDB. Since the user is asking for all CDB and PDB, I need to clarify that in a typical setup, there is one CDB containing multiple PDBs. So, querying the CDB name and then the list of PDBs. Steps to query: 1. Connect to the CDB as a privileged user (like SYS). 2. Query the CDB name. 3. Query the PDBs. SQL queries: - For CDB: SELECT NAME FROM V$DATABASE; -- This gives the CDB name. - For PDBs: SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS; -- This lists all PDBs in the CDB. Also, from reference [3], it mentions that there is a default PDB and PDB$SEED. In Oracle 19c, when connected to CDB root, you can see all PDBs. To show all PDBs including their open status, you might use: SELECT NAME, OPEN_MODE FROM V$PDBS; But DBA_PDBS is also fine. Now, for the answer structure: - Answer should be clear and step-by-step. - Use Chinese. - Add references naturally. Structure my response: 1. Explain briefly what CDB and PDB are for context. 2. Provide step-by-step instructions to query: a. Connect to the CDB. b. Query CDB name. c. Query PDB list. 3. Include SQL examples. 4. Add references where applicable. 5. End with generated related questions. References to add: - When mentioning querying DBA_PDBS, refer to [^1]. - When explaining CDB and PDB, refer to [^2] or [^3]. From references: - [^1] has the query: SELECT PDB_ID, PDB_NAME,GUID,STATUS FROM DBA_PDBS ORDER BY PDB_ID; - [^3] explains CDB and PDB. - [^4] shows connecting as SYS. So, I can cite them. Finally, generate related questions at the end.</think>### 查询 Oracle 19c 中所有 CDBPDB 列表的方法 在 Oracle 19c 中,CDB(Container Database,容器数据库)是一个多个 PDB(Pluggable Database,可插拔数据库)的数据库容器。每个 CDB 实例通常包一个根容器(CDB$ROOT)和多个 PDB。要查询所有 CDBPDB 的列表,您需要以特权用户(如 SYS)连接到 CDB 根容器,然后执行特定的 SQL 查询。以下是详细步骤和示例代码: #### 步骤 1: 连接到 CDB 根容器 首先,使用 SQL*Plus 或其他工具以 `SYS` 用户(或具有 `SYSDBA` 权限的用户)连接到 CDB 根容器。参考引用 [^4],连接命令如下: ```sql sqlplus sys/您的密码 as sysdba ``` - 确保您已正确设置 Oracle 环境变量(如 `ORACLE_SID`),指向目标 CDB 实例。 - 如果连接成功,您会看到类似输出:`Connected to: Oracle Database 19c Enterprise Edition`。 #### 步骤 2: 查询 CDB 名称 CDB 名称可以通过 `V$DATABASE` 视图获取。执行以下 SQL: ```sql SELECT NAME AS CDB_NAME FROM V$DATABASE; ``` - **输出示例**: ``` CDB_NAME --------- ORCLCDB ``` - 这表示当前连接的 CDB 名称(例如 `ORCLCDB`)。在 Oracle 19c 中,一个实例通常只运行一个 CDB,因此该查询返回当前活动的 CDB 名称 [^3]。 #### 步骤 3: 查询所有 PDB 列表 要查看该 CDB 中的所有 PDB,包括状态和名称,使用 `DBA_PDBS` 视图(或 `V$PDBS` 视图)。参考引用 [^1],推荐查询: ```sql SELECT PDB_ID, PDB_NAME, STATUS, GUID FROM DBA_PDBS ORDER BY PDB_ID; ``` - **输出示例**: ``` PDB_ID PDB_NAME STATUS GUID ------- -------------- --------- ---------------------------------- 1 PDB$SEED NORMAL 6F1B4A9C8E7F3D12E0530A000AFC4A1C 2 ORCLPDB1 NORMAL 7A2B5C3D9E8F1A23E0530A000AFC8B2D 3 ORCLPDB2 NORMAL 8B3C6D4F0A9B1C34E0530A000AFCD3E4 ``` - **关键字段解释**: - `PDB_NAME`: PDB 的名称(如 `ORCLPDB1`)。 - `STATUS`: PDB 的状态(`NORMAL` 表示正常,`NEW` 表示新创建)。 - `GUID`: PDB 的唯一标识符。 - 默认包 `PDB$SEED`,这是 PDB 的模板数据库 [^3]。 如果需要更详细的状态(如 PDB 是否已打开),使用 `V$PDBS` 视图: ```sql SELECT PDB_ID, NAME AS PDB_NAME, OPEN_MODE FROM V$PDBS; ``` - **输出示例**: ``` PDB_ID PDB_NAME OPEN_MODE ------- -------------- --------- 2 ORCLPDB1 READ WRITE 3 ORCLPDB2 MOUNTED ``` #### 注意事项 - **权限要求**:执行这些查询需要 `SYSDBA` 或 `DBA` 权限。普通用户可能无法访问 `DBA_PDBS` 或 `V$PDBS` 视图。 - **多 CDB 环境**:Oracle 19c 通常一个实例只运行一个 CDB。如果您的系统有多个 CDB(例如通过不同实例),需要分别连接到每个 CDB 重复上述步骤。 - **PDB 状态**:`STATUS` 为 `NEW` 的 PDB 可能需要运行 `noncdb_to_pdb.sql` 脚本来完成转换 [^2]。 - **引用说明**:以上方法基于 Oracle 19c 的标准实践,确保您的数据库已正确安装和配置 [^1][^3]。 如果您在查询中遇到问题(如视图不存在),请检查数据库版本和用户权限。 ### 相关问题 1. 如何创建新的 PDB 数据库? 2. 如何切换或连接到特定的 PDB? 3. Oracle 19c 中 CDBPDB 的管理有哪些最佳实践? 4. 如何备份和恢复 PDB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值