ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Oracle云基础架构平台解决方案:从本地到云端的部署与避坑指南

Oracle云基础架构平台解决方案:从本地到云端的部署与避坑指南 简介这份《Oracle云基础架构平台解决方案》PDF文档面向售前技术人员、合作伙伴、企业IT管理员及云计算初学者系统梳理了Oracle云平台的整体架构与建设思路可用于方案选型、技术培训与项目实施参考。文档围绕计算、存储、网络、云安全、运营子系统、应用云子系统、软硬件配置清单、API集成、合作伙伴关系及售后服务支持等模块展开并附有版本修订记录与阅读对象说明便于读者按目录快速定位所需内容。资源包内仅含1个PDF文件大小约3.72MB属于轻量级技术手册适合随时查阅与归档。目前已有99人学习下载可作为了解Oracle云基础架构、规划私有云或混合云环境时的入门与对照材料。1. Oracle 云基础架构平台解决方案从本地机房到云端落地的第一道坎很多团队第一次接触 Oracle 云基础架构平台解决方案都是被一个很具体的场景逼出来的本地 Oracle 数据库跑得好好的突然业务要上云或者要搭一套混合架构结果发现云上的 Oracle 和本地那套完全不是一回事。网络怎么通、存储怎么挂、ASM 磁盘组怎么规划、监听服务为什么起不来每一个问题都能卡住半天。这份方案要解决的核心就是把 Oracle 数据库和云基础设施之间的那层“黑匣子”打开让 DBA 和运维能像管本地库一样管云上的 Oracle。它适合三类人一是手里有 Oracle 11g、19c 甚至 12c 环境需要迁移或新建云上实例的 DBA二是负责云平台选型和落地的架构师需要评估 Oracle 在云上的部署模式三是刚入门 Oracle、想搞清楚云基础架构和传统安装差异的新手。不管你是从 oracle 安装教程 11g 一路摸过来的还是已经在折腾 oracle 19c 单实例搭建 dg这篇内容都会把云上那套东西拆成能照着做的步骤。先别急着点“下一步”云上的坑往往藏在参数和网络配置里。2. Oracle 云基础架构的部署模式与选型别把本地经验直接搬上去2.1 三种主流部署形态的适用边界Oracle 云基础架构平台解决方案落到实际通常有三种形态裸金属云、虚拟机云和 Exadata 云服务。裸金属适合对 I/O 延迟极度敏感的核心交易库比如跑 oracle rac 的场景因为物理机没有虚拟化层开销ASM 磁盘组可以直接绑到物理盘上。虚拟机云适合测试、开发或者中小规模生产库弹性好但要注意 oracle 监听服务无法启动 这类问题在虚拟化环境下往往和网卡多队列、时钟源有关。Exadata 云服务是 Oracle 自家的软硬一体方案存储节点和计算节点分离适合数据仓库和混合负载但成本高选型时要算清楚 TCO。我一般会先问三个问题数据量多大、并发多高、能不能接受停机迁移。如果数据量在 TB 级别、并发几千、停机窗口只有几小时裸金属加 Data Guard 是稳妥选择。如果只是开发测试虚拟机云足够但记得把 oracle 11g 下载资源 这类本地安装包换成云上的镜像模板别自己上传 ISO 再挂载云平台通常有预装好的 Oracle 镜像。选型时还有一个容易被忽略的点云上的存储类型。块存储、文件存储和对象存储对 Oracle 的意义完全不同。数据文件、控制文件、redo log 必须放块存储而且要做多副本归档日志可以放文件存储备份文件可以丢对象存储。如果你把数据文件放到文件存储上oracle dbf 文件坏了 的概率会直线上升因为文件存储的语义和块设备不一样Oracle 的异步 I/O 会出问题。2.2 从本地到云的网络与存储规划网络规划是云上 Oracle 最容易翻车的地方。本地机房你只需要配好监听和 tnsnames云上还要考虑 VPC、子网、安全组、路由表。常见做法是数据库子网单独划分只允许应用子网访问 1521 端口管理子网走 SSH 或 SQL*Net 加密。安全组规则要精确到源 IP别图省事开 0.0.0.0/0等保测评的时候 oracle 等保命令 一跑全是高危项。存储规划上ASM 是绕不开的。云上挂载块存储后先别急着建 ASM 磁盘组用lsblk和multipath -ll确认多路径聚合是否正常。如果云厂商提供的是 NVMe 盘注意 Oracle 的 ASM 需要设置asm_diskstring匹配设备名常见的是/dev/oracleasm/disks/*或者/dev/mapper/*。下面这段命令是我在云上初始化 ASM 磁盘组时常用的检查流程# 查看块设备及多路径聚合情况 lsblk -o NAME,SIZE,TYPE,MOUNTPOINT multipath -ll # 确认 ASM 磁盘发现路径 export ORACLE_HOME/u01/app/oracle/product/19.0.0/dbhome_1 export PATH$ORACLE_HOME/bin:$PATH asmcmd lsdsk --discovery # 创建 ASM 磁盘组冗余模式根据云盘可靠性选择 asmcmd mkdg DATA -d /dev/mapper/asm_data* -r normal asmcmd mkdg FRA -d /dev/mapper/asm_fra* -r normal逻辑说明lsblk和multipath -ll用来确认云盘是否已经正确聚合如果多路径没配好ASM 会把同一块盘识别成多个设备导致磁盘组创建失败。asmcmd lsdsk --discovery检查 ASM 能否发现候选盘。mkdg创建磁盘组时-r normal表示双副本云盘本身如果已经有三副本ASM 可以用external减少空间浪费但生产库我一般还是用normal多一层保护。参数说明asm_diskstring在云上建议显式设置不要依赖默认值。如果云盘设备名会变用/dev/disk/by-id/下的持久化路径更稳。asm_power_limit在迁移或重建时调到 8 以上加快速度日常跑 1 就行调太高会影响业务 I/O。2.3 云上 Oracle 实例的初始化脚本要点云平台通常提供自定义初始化脚本用来在实例首次启动时执行一些配置。Oracle 云初始化脚本 常见的内容包括创建 oracle 用户和组、设置内核参数、配置 HugePages、挂载 ASM 磁盘、启动监听。这里有个血泪经验脚本里千万别写reboot云主机重启后如果 ASM 磁盘没自动挂载数据库起不来你就只能从控制台进救援模式。内核参数方面shmmax、shmall、hugepages要根据内存大小算。比如 128GB 内存的机器HugePages 一般配 64GB 给 SGA剩下的给 OS 和 PGA。vm.swappiness设成 1 或 0避免 Oracle 内存被换出。net.core.rmem_max和wmem_max调大云网络延迟比本地高缓冲区小了容易丢包。下面是一个初始化脚本的片段用来配置 HugePages 和内核参数#!/bin/bash # 计算 HugePages 数量假设 SGA 64GBHugePage 默认 2MB SGA_GB64 HP_COUNT$((SGA_GB * 1024 / 2)) echo vm.nr_hugepages $HP_COUNT /etc/sysctl.conf echo vm.swappiness 1 /etc/sysctl.conf echo net.core.rmem_max 4194304 /etc/sysctl.conf echo net.core.wmem_max 4194304 /etc/sysctl.conf sysctl -p # 配置 oracle 用户资源限制 cat /etc/security/limits.conf EOF oracle soft nofile 65536 oracle hard nofile 65536 oracle soft nproc 16384 oracle hard nproc 16384 oracle soft memlock unlimited oracle hard memlock unlimited EOF逻辑说明HugePages 数量按 SGA 大小除以 2MB 计算留一点余量。memlock设成 unlimited 让 oracle 用户能锁住内存。sysctl -p生效后用grep HugePages /proc/meminfo确认分配成功。如果 HugePages_Total 是 0说明内存碎片太多需要重启或者调整vm.nr_hugepages后重试。参数说明nofile和nproc在云上容易被安全组或 cgroup 限制设完要su - oracle后ulimit -a验证。rmem_max和wmem_max对 Data Guard 传输影响大如果 dg 同步慢先查这两个值。3. 在云上跑通 Oracle 19c 单实例从建库到监听配置的完整路径3.1 建库前的环境检查与依赖安装云上装 Oracle 19c第一步不是跑 runInstaller而是检查依赖包。不同 Linux 发行版依赖不一样openeuler 安装 oracle 19c 和 CentOS 的包名就有差异。常见做法是用yum或dnf装bc、binutils、compat-libcap1、compat-libstdc、gcc、glibc、libaio、libXext、libXtst、make、sysstat这些。如果云平台是最小化安装缺包会导致 runInstaller 静默失败日志里只写“缺少依赖”不告诉你缺哪个。检查内存和 swapOracle 19c 要求 swap 至少等于内存如果内存超过 16GBswap 可以等于内存大小。云主机默认 swap 可能很小用dd或fallocate扩一下。/tmp至少 1GB/u01至少 50GB 给 Oracle Home 和数据库文件。网络方面确认主机名解析正确。/etc/hosts里要有127.0.0.1 localhost和本机 IP 对应的主机名。云上如果用了内部 DNSnslookup能解析但/etc/hosts没配Oracle 监听可能绑定到错误网卡。我一般会显式在/etc/hosts里写死# 查看当前主机名和 IP hostname ip addr show # 编辑 /etc/hosts确保主机名解析到内网 IP cat /etc/hosts EOF 10.0.1.100 oracle-cloud-db EOF # 验证解析 ping -c 2 oracle-cloud-db逻辑说明Oracle 监听和实例注册依赖主机名解析如果解析到 127.0.0.1远程客户端连不上。云上多网卡时要确认监听绑定的是内网 IP不是公网 IP。ping验证解析和连通性如果 ping 不通检查安全组是否放行 ICMP。参数说明/etc/hosts里的 IP 必须是云主机的内网 IP不要写公网 IP。如果云平台支持修改主机名改完要重启网络服务或重启实例。3.2 静默安装与建库命令云上通常没有图形界面静默安装是标配。先准备 response 文件db_install.rsp和dbca.rsp。db_install.rsp里关键参数oracle.install.optionINSTALL_DB_SWONLY、UNIX_GROUP_NAMEoinstall、INVENTORY_LOCATION/u01/app/oraInventory、ORACLE_HOME/u01/app/oracle/product/19.0.0/dbhome_1、ORACLE_BASE/u01/app/oracle、oracle.install.db.InstallEditionEE、oracle.install.db.OSDBA_GROUPdba、oracle.install.db.OSOPER_GROUPoper、oracle.install.db.OSBACKUPDBA_GROUPbackupdba、oracle.install.db.OSDGDBA_GROUPdgdba、oracle.install.db.OSKMDBA_GROUPkmdba、oracle.install.db.OSRACDBA_GROUPracdba。安装命令# 解压安装包到 /tmp cd /tmp unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.0.0/dbhome_1 # 静默安装 cd /u01/app/oracle/product/19.0.0/dbhome_1 ./runInstaller -silent -responseFile /tmp/db_install.rsp -ignorePrereq -waitforcompletion # 安装完成后执行 root 脚本 /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19.0.0/dbhome_1/root.sh逻辑说明-ignorePrereq跳过 prereq 检查云上有些检查项会误报比如内存、swap 的阈值。但跳过前最好手动确认关键项没问题。-waitforcompletion让安装进程前台等待方便看日志。安装日志在/u01/app/oraInventory/logs/下如果失败先看installActions*.log。参数说明ORACLE_HOME路径不要有空格和特殊字符。oracle.install.db.InstallEditionEE是企业版如果只有标准版改成SE。OSDBA_GROUP等组要提前用groupadd创建好。建库用dbca静默模式dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl \ -sid orcl \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -memoryPercentage 60 \ -emConfiguration NONE \ -datafileDestination /u01/app/oracle/oradata \ -recoveryAreaDestination /u01/app/oracle/fast_recovery_area \ -redoLogFileSize 200 \ -sampleSchema false \ -databaseType OLTP \ -totalMemory 16384 \ -sysPassword Oracle123 \ -systemPassword Oracle123逻辑说明-memoryPercentage 60表示用 60% 物理内存给 Oracle。-emConfiguration NONE不配 Enterprise Manager云上一般用云监控代替。-sampleSchema false不装示例 schema减少建库时间。-redoLogFileSize 200单位 MBOLTP 系统 redo 可以设 200-500MB。参数说明-characterSet AL32UTF8是 Unicode 字符集如果从 oracle 11g 迁移过来注意源库字符集不一致会导致乱码。-sysPassword和-systemPassword要符合密码复杂度否则 dbca 会报错。3.3 监听配置与客户端连接验证建库完成后监听可能没起来。云上常见问题是监听配置了但服务没注册。先检查listener.ora和tnsnames.ora。listener.ora里LISTENER的ADDRESS要绑定内网 IP 或 0.0.0.0端口 1521。tnsnames.ora里ORCL的HOST写内网 IP 或主机名。启动监听lsnrctl start lsnrctl status # 如果服务没注册手动注册 sqlplus / as sysdba SQL alter system register; SQL exit # 再次查看监听状态 lsnrctl status逻辑说明lsnrctl status会显示监听端口、服务名、实例状态。如果Instance orcl, status READY没出现说明实例没注册。alter system register强制注册通常几秒后生效。如果还是不行检查local_listener参数SQL show parameter local_listener; SQL alter system set local_listener(ADDRESS(PROTOCOLTCP)(HOST10.0.1.100)(PORT1521)) scopeboth; SQL alter system register;参数说明local_listener在云上多网卡时特别重要不设的话实例可能注册到 127.0.0.1。HOST写内网 IP不要写主机名避免 DNS 解析问题。客户端连接测试用sqlplus从应用服务器连sqlplus system/Oracle123//10.0.1.100:1521/orcl如果报ORA-12541: TNS:no listener检查安全组是否放行 1521。如果报ORA-12514: TNS:listener does not currently know of service检查服务名是否写对orcl是 SID 还是 SERVICE_NAME。云上建议用 SERVICE_NAME不要用 SID。4. 云上 Oracle 的避坑与排查那些让你想砸键盘的瞬间4.1 监听服务无法启动现象、原因、解决现象lsnrctl start卡住或报TNS-12537: TNS:connection closed日志里写no space left on device或permission denied。原因云主机/dev/shm太小或者/var/tmp满了。Oracle 监听启动时需要写临时文件/dev/shm默认是内存的一半如果内存小/dev/shm可能只有几百 MB。另一个原因是 SELinux 或防火墙拦截了监听进程。解决检查df -h /dev/shm /var/tmp如果/dev/shm小于 1GB在/etc/fstab里加tmpfs /dev/shm tmpfs defaults,size2G 0 0然后mount -o remount /dev/shm。SELinux 用getenforce查看如果是 Enforcing临时setenforce 0测试确认是 SELinux 问题后用semanage加规则别直接关 SELinux。4.2 ASM 磁盘组挂载失败现象、原因、解决现象云主机重启后ASM 磁盘组没自动挂载数据库起不来asmcmd lsdg显示MOUNTED状态是N。原因ASM 的asmtab或init.ora里没配磁盘组自动挂载或者多路径设备名变了。云盘挂载顺序可能和上次不一样/dev/sd*会漂移。解决用/dev/disk/by-id/或/dev/mapper/的持久化路径配置asm_diskstring。在ASM实例的init.ora里加asm_diskgroupsDATA,FRA让 ASM 启动时自动挂载。如果是 12c 以上用asmcmd的mount命令手动挂载后检查crsctl stat res -t确认 ASM 资源状态。4.3 数据库连接慢或超时现象、原因、解决现象应用连数据库偶尔超时tnsping正常但sqlplus登录慢lsnrctl status显示监听正常。原因云网络延迟抖动或者 Oracle 的SQLNET.INBOUND_CONNECT_TIMEOUT和SQLNET.SEND_TIMEOUT设置不合理。另一个常见原因是 DNS 反向解析慢监听收到连接后要反查客户端 IP如果 DNS 不可达会等超时。解决在sqlnet.ora里加SQLNET.INBOUND_CONNECT_TIMEOUT30、SQLNET.SEND_TIMEOUT30、SQLNET.RECV_TIMEOUT30。如果 DNS 反查慢加NAMES.DIRECTORY_PATH(TNSNAMES,EZCONNECT)跳过 DNS 解析。云上建议用 IP 连接不要用主机名。4.4 归档日志撑爆 FRA现象、原因、解决现象数据库突然挂起alert log写ORA-00257: archiver error. Connect internal only, until freed。原因FRA 空间满了归档日志没删。云上 FRA 通常挂的是块存储空间有限如果备份策略没配好归档会一直堆积。解决先sqlplus / as sysdbaarchive log list查看归档路径df -h确认 FRA 使用率。临时解决RMAN crosscheck archivelog all; delete expired archivelog all;或者delete archivelog until time sysdate-1;。长期解决配 RMAN 备份策略每天全备加归档备份备份完自动删归档。RMAN configure retention policy to recovery window of 7 days;。4.5 云主机时钟漂移导致 Data Guard 异常现象、原因、解决现象Data Guard 同步延迟越来越大v$dataguard_stats里transport lag和apply lag持续增长但网络和 I/O 都正常。原因云主机时钟漂移主库和备库时间不一致导致归档日志的 SCN 和时间戳对不上。虚拟化环境下时钟漂移很常见尤其是 CPU 负载高的时候。解决配 NTP 或 chrony 同步时钟。chronyc sources -v查看同步状态chronyc tracking看偏移量。如果偏移超过 1 秒Data Guard 可能出问题。在sqlnet.ora里加SQLNET.EXPIRE_TIME10让死连接及时断开。主备库都要配 NTP别只配一边。5. 云上 Oracle 的进阶技巧用 DBMS_CLOUD 和 JSON_TABLE 打通数据链路5.1 用 DBMS_CLOUD 从对象存储直接加载数据Oracle 云基础架构平台解决方案里对象存储是绕不开的。传统做法是把文件下载到本地再用 SQL*Loader 加载云上可以直接用DBMS_CLOUD包从对象存储读文件。这个包在 Oracle 19c 的云上版本里默认有本地版需要额外装。先配好凭证BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name OBJ_STORE_CRED, username myuser, password mypassword ); END; / -- 从对象存储加载 CSV 到表 BEGIN DBMS_CLOUD.COPY_DATA( table_name SALES_DATA, credential_name OBJ_STORE_CRED, file_uri_list https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/sales.csv, format JSON_OBJECT(type value csv, skipheaders value 1) ); END; /逻辑说明CREATE_CREDENTIAL把对象存储的用户名密码存到数据库里加密保存。COPY_DATA直接从 URL 读文件支持 CSV、JSON、Parquet 等格式。format参数用 JSON 对象描述文件格式skipheaders跳过第一行。参数说明file_uri_list可以写多个文件用逗号分隔。format里type支持csv、json、parquet、avro。如果文件是 gzip 压缩的加compression value gzip。加载过程中如果报错查user_load_operations视图看详细日志。5.2 用 JSON_TABLE 把半结构化数据拆成行云上应用经常往数据库里塞 JSON比如日志、事件、配置。Oracle 11g 没有原生 JSON 支持19c 可以用JSON_TABLE把 JSON 数组拆成关系行。假设有一列event_json存的是[{id:1,type:login},{id:2,type:logout}]要拆成两行SELECT t.id, t.type FROM events e, JSON_TABLE(e.event_json, $[*] COLUMNS ( id NUMBER PATH $.id, type VARCHAR2(50) PATH $.type ) ) t WHERE e.event_date TRUNC(SYSDATE);逻辑说明JSON_TABLE的第一个参数是 JSON 列第二个参数是 JSON 路径$[*]表示数组所有元素。COLUMNS子句定义输出的列和对应的 JSON 路径。PATH $.id取每个元素的id字段。参数说明如果 JSON 里字段可能不存在加NULL ON EMPTY或DEFAULT N/A ON EMPTY。如果 JSON 是嵌套的路径可以写$.items[*].product.name。JSON_TABLE在 12c 以上才有11g 需要用JSON_VALUE配合正则性能差很多。5.3 验证 Data Guard 同步延迟的实用查询云上跑 Data Guard不能只看v$dataguard_stats那个视图有时候不准。我一般用下面这个查询综合判断SELECT name, value, time_computed, datum_time FROM v$dataguard_stats WHERE name IN (transport lag, apply lag, apply finish time); -- 查备库应用进度 SELECT thread#, sequence#, applied, first_time, next_time FROM v$archived_log WHERE applied NO ORDER BY sequence#; -- 查主备库 SCN 差距 SELECT current_scn FROM v$database; -- 在备库执行 SELECT current_scn FROM v$database;逻辑说明transport lag是归档从主库传到备库的延迟apply lag是备库应用归档的延迟。如果transport lag大查网络带宽和归档传输进程。如果apply lag大查备库 I/O 和 CPU。v$archived_log里appliedNO的记录如果持续增加说明备库应用跟不上。参数说明datum_time是统计时间如果这个时间很旧说明 Data Guard 可能已经断了。主备库 SCN 差距在 1000 以内算正常差距持续扩大要查v$managed_standby里的进程状态。5.4 一个我踩过的坑云上不要随便改 SID刚上云的时候我觉得 SID 太长不好记想把orcl改成prod。本地改 SID 的教程很多但云上改 SID 会触发一堆问题监听注册失败、Data Guard 配置失效、云监控采集不到指标。后来我才明白云平台的自动化运维工具都是按初始 SID 绑定的改了 SID 等于把云平台的“眼睛”蒙上了。现在我的习惯是建库时就把 SID 定好后面再也不动。如果非要改先问云厂商有没有支持流程别自己硬来。希望帮到你。本文还有配套的精品资源点击获取
返回列表