2026/10/9 9:56:49

OCA认证模拟题解析:Oracle升级迁移与多租户架构实战指南

OCA认证模拟题解析:Oracle升级迁移与多租户架构实战指南 简介这份资源是面向Oracle数据库初学者的OCA认证分类模拟题集聚焦数据库升级、迁移与空间管理等核心考点适合正在备考OCA认证或希望系统梳理Oracle基础管理知识的考生使用。压缩包内仅含1个doc文档体积约79KB内容以不定项选择题为主覆盖DBUA升级助手、Data Pump迁移、字符集转换、预升级准备、组件兼容性及最小化停机时间等高频考点并附有答案解析便于自测与查漏补缺。目前已有137人学习下载可作为考前专项刷题与知识点巩固的练习材料帮助读者熟悉OCA考试题型与命题思路检验对升级迁移流程的掌握程度。1. 从一份 OCA 模拟题文档说起它到底能帮你解决什么如果你正在准备 OCA 认证或者刚接手一套 Oracle 数据库升级迁移的活儿手头这份「OCA 认证分类模拟题 15-附答案解析」大概率能让你少走不少弯路。它不是那种泛泛而谈的题库而是把不定项选择题按知识域切成了 38 道每道题后面都跟着一段解析告诉你为什么选这个、为什么不选那个。这种「答案 归因」的结构比单纯背选项有用得多。这份文档覆盖的核心场景很集中数据库升级、Data Pump 迁移、多租户架构CDB/PDB、RMAN 备份恢复、资源管理与审核迁移。适合两类人一类是正在刷题备考、需要查漏补缺的考生另一类是实际工作中要执行 11g 到 12c 升级、或者要把非 CDB 插进容器库的 DBA。文档里的题目不是孤立的它们串起来就是一条从预升级检查到升级后验证的完整链路。下面我按技术模块拆开讲把每道题背后的操作逻辑和参数含义落到能复现的程度。2. 升级路径与 DBUA 实操从 10g 到 12c 的选型逻辑2.1 哪些版本能直接升哪些必须绕道第 1 题问的是 DBUA 能在升级期间完成什么。正确答案是 C 和 D从 10g 的最终版本直接升级到 12c以及验证前提条件。A 选项「从旧字符集转换到 Unicode」不是 DBUA 的职责字符集转换得靠 Data Pump 或者手动改字符集B 选项「从 11g 的任何版本直接升级」也不对只有 11.1 的终端版本或 11.2.0.2 以后的版本才能直接升。这里有个容易翻车的点很多人以为只要版本号低于 12c 就能直接升实际上 Oracle 对「直接升级」的起点卡得很死。10g 只有最终版本10.2.0.5能直接跳到 12c11g 也得是 11.2.0.2 之后的版本。如果你手里是 11.2.0.1得先补丁到 11.2.0.2 再升。第 3 题进一步区分了 Data Pump 迁移和 DBUA 升级的边界Data Pump 可以从 10g 或 11g 的任何版本迁移支持字符集转换和 32 位到 64 位的平台迁移但 9i 不行因为 Data Pump 是 10g 才引入的9i 只能用老的 exp/imp。选型上我一般这么判断如果目标只是把数据库版本提上去、存储结构不变走 DBUA 就地升级如果要换平台、换字符集、或者想把多个库合并到一个 CDB 里走 Data Pump 逻辑迁移。第 6 题特别强调了一点Data Pump 导出时数据库必须处于 OPEN 状态不能是只读或装载模式。因为 expdp 需要创建主表来记录导出元数据只读库写不了主表直接报错。2.2 DBUA 的正确启动姿势与手工升级的文件复制第 12 题问 DBUA 的正确用法答案是 D关闭数据库再在新的 Oracle Home 中运行 DBUA。很多人会选 B觉得应该以 UPGRADE 模式从旧 Home 启动数据库再跑 DBUA但 DBUA 自己会负责启动和关闭操作你只需要把库关了剩下的交给它。第 9 题问的是 preupgrd.sql 运行前数据库怎么启动答案是 B用 STARTUP OPEN 在旧 Oracle Home 上启动。注意这里不是 UPGRADE 模式因为 preupgrd.sql 只是个检查脚本需要在正常打开的库上跑收集当前状态信息。手工升级的场景下第 11 题问哪些文件要从旧 Home 复制到新 Home答案是 B 和 C实例参数文件和密码文件。参数文件spfile 或 pfile的默认位置跟 Oracle Home 绑定新 Home 找不到旧 Home 下的 spfile密码文件同理。控制文件不用复制因为升级是就地操作数据文件和控制文件原地不动。时区文件也不用从旧 Home 拷新 Home 自带更新的时区文件。AUDIT_FILE_DEST 目录在升级后保持不变不需要迁移。第 10 题提到 preupgrd.sql 的输出是两个修复脚本preupgrade_fixups.sql 和 postupgrade_fixups.sql。前者在升级前跑后者在升级后跑。这个工具不是交互式的不会提示你生成什么报告它直接吐出脚本让你执行。# 在旧 Oracle Home 上以 OPEN 模式启动数据库 export ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 export ORACLE_SIDorcl sqlplus / as sysdba SQL STARTUP OPEN; SQL ?/rdbms/admin/preupgrd.sql执行完 preupgrd.sql 后它会生成两个 fixup 脚本。先跑 preupgrade_fixups.sql 把能修的问题修掉然后关库切换到新 Home启动 DBUA 或者手工执行升级脚本。升级完成后再跑 postupgrade_fixups.sql 收尾。这个流程我走过好几次最容易被忽略的是 fixup 脚本的执行时机——preupgrade_fixups.sql 必须在关库之前跑完否则有些修复动作做不了。2.3 升级期间的空间与重做日志考量第 2 题问升级期间空间使用要注意什么答案是 BSYSTEM 和 SYSAUX 表空间可以在升级期间扩展。A 说「不需要额外存储空间」是错的数据字典对象在升级过程中会膨胀Oracle 版本越高字典表越多C 说「数据所需空间至多加一倍」也不对用户数据不受升级影响变的只是元数据D 说「不生成归档日志」更是错得离谱升级要对数据字典做大量 DML 和 DDL重做日志生成量很大。实际操作中我一般会在升级前检查 SYSTEM 和 SYSAUX 的剩余空间确保至少有 20% 到 30% 的余量。如果用的是自动扩展数据文件确认 MAXSIZE 没设死如果是手动管理提前加数据文件。另外归档目录也要留够空间升级期间的重做量可能是平时的好几倍。第 13 题列了一堆「最小化停机时间」的操作其中 A、B、D、E、F 都是在库打开状态下能做的备份、跑预升级工具、升级后重编译无效 PL/SQL、收集字典统计信息、跑 Post-Upgrade Status 工具。只有 C用 catctl.pl 并行升级必须在 UPGRADE 模式下跑那时候普通用户连不进来。第 14 题考的是 UPGRADE 模式下用户连接会怎样答案是 D连接会失败除非用户有 SYSDBA 权限。这个模式下的数据库只接受 SYSDBA 登录普通用户连尝试都会被拒。所以升级窗口内不用担心有人误连进来搞破坏。3. Data Pump 迁移与多租户架构网络模式与 CDB/PDB 的边界3.1 网络模式导入的链路方向与表空间处理第 4 题问网络模式下 Data Pump 怎么操作答案是 C在目标数据库中创建一个指向源数据库的数据库链接并在目标数据库中运行 impdp。很多人会选 A以为要在两边都建链接、两边都跑命令实际上网络模式只在目标端管理源端不需要做任何额外配置。impdp 通过数据库链接从源库拉数据工作进程在源和目标两端都有但控制权在目标端。第 7 题问完整导入时如果目标表空间不存在会怎样答案是 B如果启用了 Oracle 托管文件OMF会自动创建表空间。A 说「必须预先创建否则失败」不准确因为 OMF 能自动建C 说「用 TABLESPACES 参数指定就能成功」是混淆了概念TABLESPACES 参数是用来筛选要导入哪些表空间的跟完整导入不搭D 说「导入到默认永久表空间」是错的如果既没有 OMF 又没有预先建表空间导入直接报错不会往默认表空间塞。-- 在目标库创建指向源库的数据库链接 CREATE DATABASE LINK source_link CONNECT TO source_user IDENTIFIED BY password USING source_tns_alias; -- 在目标库执行网络模式导入 -- 注意directory 参数指向目标库的目录对象 impdp target_user/passwordtarget_tns \ network_linksource_link \ remap_schemasource_user:target_user \ remap_tablespacesource_ts:target_ts \ directorydp_dir \ logfilenet_import.log这里的关键参数是network_link它告诉 impdp 数据从哪个链接拉。remap_schema和remap_tablespace做名称映射避免跟目标库现有对象冲突。directory指向目标库的目录对象用来放日志和可能的转储文件。网络模式的好处是不用在源库上生成转储文件省掉了文件传输的步骤但缺点是导入期间源库和目标库之间的网络必须稳定一旦断连整个操作就挂了。3.2 CDB 与 PDB 的共享对象和连接方式第 19 题问哪些对象在所有 PDB 中共享答案是 B、D、E撤消表空间、控制文件、联机重做日志文件。这三样东西在根容器里管理所有 PDB 共用。临时表空间不共享每个容器可以有自己的临时表空间数据库全局名称也不共享每个容器有自己的全局名。第 21 题问怎么针对 PDB 建立会话答案是 B 和 D通过监听器上的服务登录或者先连到根容器再通过数据库链接跳到另一个 PDB。A 说「设置 ORACLE_SID 为 PDB 名称走 IPC 连接」是错的IPC 只能连根容器C 说「登录根容器后改变会话连接到 PDB 中的应用程序模式」也不对可以切换容器但不能切换模式。第 22 题问创建 CDB 时哪个子句是必须的答案是 AENABLE PLUGGABLE DATABASE。没有这个子句创建出来的就是普通非 CDB。CHARACTER SET 跟是不是 CDB 无关SEED FILE_NAME_CONVERT 只在没用 OMF 的时候才需要ENABLE CONTAINER DATABASE 这个子句根本不存在是拼凑出来的干扰项。-- 创建 CDB 的最小化命令 CREATE DATABASE cdb01 USER SYS IDENTIFIED BY sys_password USER SYSTEM IDENTIFIED BY system_password LOGFILE GROUP 1 (/u01/app/oracle/oradata/cdb01/redo01.log) SIZE 100M, GROUP 2 (/u01/app/oracle/oradata/cdb01/redo02.log) SIZE 100M MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXDATAFILES 100 CHARACTER SET AL32UTF8 NATIONAL CHARACTER SET AL16UTF16 EXTENT MANAGEMENT LOCAL DATAFILE /u01/app/oracle/oradata/cdb01/system01.dbf SIZE 500M SYSAUX DATAFILE /u01/app/oracle/oradata/cdb01/sysaux01.dbf SIZE 500M DEFAULT TABLESPACE users DATAFILE /u01/app/oracle/oradata/cdb01/users01.dbf SIZE 100M DEFAULT TEMPORARY TABLESPACE temp TEMPFILE /u01/app/oracle/oradata/cdb01/temp01.dbf SIZE 100M UNDO TABLESPACE undotbs1 DATAFILE /u01/app/oracle/oradata/cdb01/undotbs01.dbf SIZE 200M ENABLE PLUGGABLE DATABASE SEED FILE_NAME_CONVERT (/u01/app/oracle/oradata/cdb01, /u01/app/oracle/oradata/cdb01/pdbseed);ENABLE PLUGGABLE DATABASE是分水岭加上它才是 CDB。SEED FILE_NAME_CONVERT指定种子库PDB$SEED的数据文件放哪如果用了 OMF 或者设了 DB_CREATE_FILE_DEST这个子句可以省。种子库是只读的模板创建新 PDB 时从它复制文件。3.3 公共用户、公共角色与权限的容器范围第 30 题给了一段代码在根容器里创建用户 c##jw 并授予 connect 角色。答案是 B用户存在于根容器和所有 PDB 中但只能连到根容器。因为grant connect to c##jw没有加containerall授权只在当前容器根容器生效。公共用户的定义是用户名以 c## 开头、在所有容器中都能看到但权限的生效范围取决于授权时指定的容器。第 31 题问哪个 GRANT 能给公共用户访问所有 PDB 和根容器中任何表的能力答案是 Bgrant select any table to c##rwr containerall。A 的containercurrent只在当前容器生效C 不加 container 关键字默认就是 currentD 的containercdb$root是无效语法container 的值只能是 current 或 all。第 32 题问关于本地角色和公共角色的说法哪个不正确答案是 C「公共角色只能授予公共用户」是错的。公共角色可以授予公共用户也可以授予本地用户本地角色可以授予本地用户也可以授予公共用户。角色和用户的「公共/本地」属性是独立的交叉授权完全合法。4. 升级后验证与 RMAN 恢复那些容易翻车的细节4.1 无效 PL/SQL 的重编译时机与审核迁移第 16 题问如果先用 utlrp.sql 重编译无效 PL/SQL 再打开数据库会怎样答案是 C数据库会打开但如果用户用到还没重编译的 PL/SQL它会自动编译只是性能会降低。A 说「SYS 拥有的包无效则数据库不打开」是错的数据库能打开B 说「用户收到错误消息」也不对Oracle 会自动重编译D 说「以解释模式运行」是混淆了本地编译和解释执行的概念。实际操作中我一般会在升级后先跑一遍 utlrp.sql把大部分无效对象修好再打开数据库给用户用。但即使跑了 utlrp.sql也可能有漏网的这些漏网的会在第一次被调用时自动编译。自动编译的代价是那次调用的响应时间变长对性能敏感的系统最好在升级窗口内多跑几遍 utlrp.sql直到无效对象数量降到零。第 15 题问标准审核和细粒度审核升级到 12c 后有什么选项答案是 C升级后旧审核继续运行直到启用统一审核为止此时它们停止发挥作用。A 说「必须升级前禁用」是错的可以不禁用B 说「新旧审核并行运行一段时间」不对不能同时跑D 说「先迁移标准审核再迁移细粒度审核」也不对统一审核一启用旧的自动停。4.2 RMAN 备份 PDB 与控制文件丢失后的恢复顺序第 33 题问多租户环境下 RMAN 的哪些说法正确答案是 B、D、E。B 说「表空间备份可以包括不同 PDB 中的多个表空间」对连到根容器时可以跨 PDB 备份表空间D 说「可以在各个 PDB 中把 SYSBACKUP 特权授予本地用户」对这样能分隔责任E 说「SYSBACKUP 特权一般可以授予公共用户」也对。A 说「只有连根容器才能备份控制文件」是错的任何容器都能备份控制文件C 说「只有连目标 PDB 才能单独备份 PDB」也不对从根容器也能备份指定 PDB。第 34 题给了一个控制文件全部丢失的场景问恢复步骤的正确顺序。答案是 D⑧非装载模式启动 CDB 实例→ ⑥从自动备份还原控制文件→ ⑦恢复数据库→ ④用 RESETLOGS 打开数据库→ ⑤打开所有 PDB。这个顺序的关键在于控制文件还原必须在非装载模式下做因为装载模式需要控制文件还原完控制文件后先做恢复再用 RESETLOGS 打开根容器最后打开各个 PDB。A、B、C 的顺序都有问题比如 A 在还原控制文件之前就去连 PDB 了那时候 PDB 根本不可用。# 控制文件丢失后的 RMAN 恢复流程 rman target / # 1. 非装载模式启动实例此时控制文件不可用 RMAN startup nomount; # 2. 从自动备份还原控制文件 RMAN restore controlfile from autobackup; # 3. 装载控制文件 RMAN alter database mount; # 4. 恢复数据库 RMAN recover database; # 5. 用 RESETLOGS 打开根容器 RMAN alter database open resetlogs; # 6. 打开所有 PDB RMAN alter pluggable database all open;这套流程我建议每个 DBA 都在测试环境走一遍因为控制文件丢失是那种「平时觉得不会发生、一旦发生就手忙脚乱」的场景。自动备份控制文件的功能一定要开CONFIGURE CONTROLFILE AUTOBACKUP ON这条命令花不了几秒钟但关键时刻能救命。4.3 资源计划与初始化参数的 PDB 级别覆盖第 35 题问多租户环境下初始化参数的正确说法答案是 A、C、D。A 说「容器级别设置的参数子集可以在 PDB 级别覆盖」对C 说「PDB 拔出再插回相同 CDB 会保留自定义参数」对D 说「插回另一个 CDB 也会保留」也对。B 说「PDB 可以有容器级别不能设置的参数」是错的PDB 级别的所有参数在 CDB 级别都存在。第 36 题问 CDB 中 PDB 之间资源分配的说法答案是 BCDB 上没有默认的资源分配一个 PDB 可以使用所有 CDB 资源。A 说「份额阻止其他 PDB 使用」是错的份额是相对值不忙的时候别人可以用C 说「可以超过最大值」不对最大值是硬上限D 说「份额是百分比」是概念混淆份额是相对权重E 说「分层配置计划让一个 PDB 的用户比另一个 PDB 的用户优先级高」也不对多租户环境下 PDB 之间没有分层资源计划。第 37 题问非 CDB 插入 CDB 时哪个条件会让导入的资源计划无效答案是 A原计划有 12 个使用者组。非 CDB 的资源计划导入到 PDB 后使用者组不能超过 8 个且只能有一级分配不能有子计划。B 说「只有第一级」是合法的不会导致无效C 说「同名冲突」不会发生因为资源计划用 PDB 名限定D 说「状态是 LEGACY」不对非 CDB 的资源计划状态不会是 LEGACYE 说「PARALLEL_SERVER_LIMIT 高于 PARALLEL_MAX_SERVERS」也不对非 CDB 的资源计划没有这个指令F 说「份额数超过总份额」也不对非 CDB 没有 share 指令。5. 从模拟题到真机把 38 道题变成一套可复用的升级检查清单刷完这 38 道题最大的收获不是记住了哪个选项对而是摸清了 Oracle 升级迁移这条链路上每个环节的边界条件。我后来养成一个习惯每次接到升级任务先拿这份文档里的题目当检查清单过一遍把每道题背后的操作在测试环境验证一次。比如第 17 题问 DBUA 升级后远程用户连不上是什么问题答案是 B 和 E旧监听器停了但新监听器没起以及升级后没重启数据库。这两个坑我都踩过第一次是监听器配置没更新第二次是 DBUA 跑完忘了检查数据库状态。第 18 题到第 29 题集中考多租户架构这部分是 12c 之后 OCA 考试的重点也是实际工作中最容易混淆的地方。我整理了一张对照表把 CDB 和 PDB 的行为差异列清楚操作根容器PDB查看所有数据文件V$DATAFILE 显示全部V$DATAFILE 只显示当前 PDB创建公共用户用户名以 c## 开头公共用户可见但需单独授权创建本地用户不适用只在当前 PDB 存在备份控制文件可以可以备份表空间可以跨 PDB只能备份当前 PDB设置初始化参数设置默认值覆盖可修改的子集打开/关闭根容器始终打开需单独打开或设触发器第 23 题问拔掉 PDB 的条件答案是 C 和 DPDB 必须关闭必须用 DBMS_PDB.DESCRIBE 创建 XML 元数据文件。A 说「必须先 Data Pump 导出」不对拔 PDB 不需要导出数据B 说「必须有完整 RMAN 备份」也不对拔 PDB 不强制备份。拔 PDB 的时候数据文件不删除除非你显式指定 INCLUDING DATAFILES。第 24 题问低于 12.1 版本的库怎么迁到现有 CDB 的 PDB 里答案是 A、C、D。A 是就地升级到 12.1.0.1 以上再插C 是 Data Pump 逻辑迁移D 是通过数据库链接做逻辑迁移。B 说「用 DBMS_PDB.DESCRIBE 创建 XML 文件」是错的这个包只在 12c 的 CDB 里才有低版本库跑不了。第 25 题问怎么给 PDB 创建新服务答案是 B 和 C用 srvctl 添加服务或者用 DBMS_SERVICE 包。A 说「每个 PDB 只能有一个服务」是错的可以有多个D 说「用 lsnrctl 添加新监听器」也不对服务可以共享默认监听器。最后说一个我自己的教训。有一次在测试环境做 11g 到 12c 的升级演练preupgrd.sql 跑完提示有几个无效对象我没仔细看就直接跑了 preupgrade_fixups.sql结果升级过程中卡在某个字典表上。后来回头翻日志才发现那个无效对象是一个自定义的 PL/SQL 包fixup 脚本没法自动修需要手工处理。从那以后我每次跑 preupgrd.sql 都会把输出从头到尾读一遍特别是那些标了「MANUAL」的条目一个都不跳过。升级这事儿自动化工具能帮你省 80% 的力气但剩下 20% 的手工判断才是决定成败的地方。希望帮到你。本文还有配套的精品资源点击获取