最新消息:首页公告!

2025 年,一定要学好 MOP 数据库

浏览 共有条评论 关键词:数据库,MOP
新搜索营销

2025 年学什么数据库

在数据库技术的浩瀚海洋中,无论是新手还是资深专家,不论学何种数据库,都需要学习 Linux,毕竟绝大部分数据库都运行在 Linux 上,即便是工业常青树 SQL Server 也推出了 Linux 版本。在 OS 之上才是 Database,国产数据库这两年发展迅猛,预计在未来两年将会如充了 “氮气” 竞争更加激烈。12 月更新的 DB-Engines 全球流行度排行榜显示,Oracle 和 MySQL 数据库继续超过 1000 分,大幅领先于其他产品,PostgreSQL 分数较上月提升 12 分,站上 666 分,成为整个榜单 423 款产品中仅有的两款(PostgreSQL、Snowflake)同比分数上涨超 10 分的产品。

在中国数据库流行度排行榜的 227 个数据库中,80% 以上的产品都在努力实现 Oracle、MySQL、PostgreSQL(简称 MOP)兼容性,有多款产品是基于 MySQL 或 PostgreSQL 进行二次开发或硬分叉。

在通过前两批安全可靠评测的 17 款集中式数据库和 11 款分布式数据库产品中,无一例外都实现了 MOP 兼容性。

因此,如果你准备入行或想转行成为数据工程师,正在考虑学什么数据库,或者如果你是数据库从业者,想提升、扩展技术栈,那么,来学习 MOP 吧,掌握 MOP 约等于学好了国产数据库。

 

学好 Oracle 从安装升级开始

Oracle 19c 自 19 年正式发布以来,便广受客户好评,从 2024 甲骨文中国创新峰会了解到的讯息,Oracle 中国客户超过 26 万家。11 月 19 日,Oracle 的相关支持文档更新了 19c 的长期支持策略日期和路线图,主要支持结束时间延长到 2029 年 12 月 31 日,扩展支持延期到 2032 年 12 月 31 日,升级支持(有限可用性)截至 2034 年 12 月 31 日。这意味着 Oracle 19c 的支持周期比 23ai 更久,如果你已经在使用 19c,或者明、后年准备上线 19c,就不需要为选择 19c 或者升级到 23ai 而纠结,核心系统的数据库还是选择 19c 更稳。

在过往的实践案例中,为了安装 Oracle 数据库,都会准备一套相当复杂的安装脚本,或者每一步都写在文档里,一步步复制粘贴执行,如果是 RAC 架构可以理解,但是如果只是单机,都快到 5202 年了,则显得太过繁杂、低效。从 Oracle 18c 开始,官方提供了基于 RPM 的安装包,无论是 DBA 还是开发者,都可以在很短时间内安装、启用 Oracle 数据库。

值得一提的是,Oracle 还提供了针对开发者的免费版 Docker 镜像,此举大幅提升了开发效率。

docker pull container-registry.oracle.com/database/free:latest

下面将介绍 Oracle 19c 数据库三步安装法,从此告别繁杂脚本。主要内容分为三部分,如何在 Oracle Linux 9.5 操作系统使用 RPM 快速安装 Oracle 19c 数据库,配置 Oracle 数据库服务开机自启动,以及升级到 19.25 Oct2024 RU。

Oracle Linux 迎来九五至尊版

现在,你可以放心地将 Oracle 19c 数据库安装在 Oracle Linux 9.x 上。Oracle 19.22 及之后的版本已在 Oracle Linux 9.x 和 RHEL9.x 上认证。计划将于 2025 年上半年发布 Oracle 23ai 本地服务器版本,支持 Oracle Linux 9.2+/8.6+ 和 Red Hat Enterprise Linux 9.2+/8.6+ 操作系统。

11 月 20 日,Oracle Linux 9.5 (以下简称 OL 9.5)发布,该版本升级 UEK R7U3 内核到5.15.0-302.167.6,与红帽兼容的 RHCK 内核升级到5.14.0-503.11.1。UEK 是由 Oracle 构建的 Linux 内核,为 OL 操作系统默认内核,其性能、稳定性、硬件适配、与 Oracle 云基础设施等方面做了特定优化。需要注意的是,在 OL 9.5 系统上安装默认版本的 Java 时,OpenJDK 的版本由 11 升级到 17,这点与红帽不同。

更新系统,并查看版本信息如下。

[shawnyan@ol9 ~]$ hostnamectl
 Static hostname: ol9.shawnyan.cn
Operating System: Oracle Linux Server 9.5
          Kernel: Linux 5.15.0-302.167.6.1.el9uek.x86_64
    Architecture: x86-64
[shawnyan@ol9 ~]$
[shawnyan@ol9 ~]$ uname -v
#2 SMP Thu Nov 21 21:48:29 PST 2024
[shawnyan@ol9 ~]$
[shawnyan@ol9 ~]$ java -version
openjdk version "17.0.13" 2024-10-15 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.13.0.11-1.0.1) (build 17.0.13+11-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.13.0.11-1.0.1) (build 17.0.13+11-LTS, mixed mode, sharing)

当然,UEK 内核是开源的,Oracle Linux 是免费使用的,可按需购买企业级服务。

Oracle Database 19c 三步安装法

数据库从来都不是孤品,需要与操作系统和硬件适配,更懂 OS 的数据库才是好 DB。与之相辅相成的是,Oracle 将很多优化做到了 OS 层,甚至硬件层,这也是 Oracle 经久不衰的秘诀之一。或许有人会说现在都上云了,不需要学习 OS 了,甚至已经是 DBaaS 了,连 DB 都不需要学了,可真如此么,简化 IT 服务流程的主要原因在于辅助业务快速发展、迭代,确实需要 “店小二” 帮助中小企业基于云服务 “快” 速完成 IT 服务搭建和更新,但对于重量级大型企业,数据是核心资产,业务连续性是企业稳健发展的基石,懂操作系统和数据库的技术专家才能更好的保障服务。

Oracle 官方提供了适用于 OL 的 RPM 包,第一步就是从 Oracle 官方网站下载 RPM 安装包 (oracle-database-ee-19c-1.0-1.x86_64.rpm),并安装 Oracle Database Preinstallation RPM。

[root@ol9 ~]# dnf install -y oracle-database-preinstall-19c
...
Installing:
 oracle-database-preinstall-19c   x86_64   1.0-1.el9               ol9_appstream        33 k
Installing dependencies:
 gssproxy                         x86_64   0.8.4-7.el9             ol9_baseos_latest   120 k
 initscripts                      x86_64   10.11.7-1.0.1.el9       ol9_baseos_latest   285 k
 ksh                              x86_64   3:1.0.6-3.0.1.el9       ol9_appstream       886 k
 libev                            x86_64   4.33-5.el9              ol9_baseos_latest    53 k
 libnfsidmap                      x86_64   1:2.5.4-27.0.1.el9      ol9_baseos_latest    70 k
 libnsl                           x86_64   2.34-125.0.1.el9_5.1    ol9_baseos_latest    63 k
 libverto-libev                   x86_64   0.3.2-3.el9             ol9_baseos_latest    14 k
 lm_sensors-libs                  x86_64   3.6.0-10.el9            ol9_appstream        42 k
 nfs-utils                        x86_64   1:2.5.4-27.0.1.el9      ol9_baseos_latest   518 k
 pcp-conf                         x86_64   6.2.2-7.el9_5           ol9_appstream        38 k
 pcp-libs                         x86_64   6.2.2-7.el9_5           ol9_appstream       647 k
 rpcbind                          x86_64   1.2.6-7.el9             ol9_baseos_latest    69 k
 sssd-nfs-idmap                   x86_64   2.9.5-4.0.1.el9_5.1     ol9_baseos_latest    46 k
 sysstat                          x86_64   12.5.4-9.0.1.el9        ol9_appstream       540 k
...
Installed:
  gssproxy-0.8.4-7.el9.x86_64              initscripts-10.11.7-1.0.1.el9.x86_64
  ksh-3:1.0.6-3.0.1.el9.x86_64             libev-4.33-5.el9.x86_64
  libnfsidmap-1:2.5.4-27.0.1.el9.x86_64    libnsl-2.34-125.0.1.el9_5.1.x86_64
  libverto-libev-0.3.2-3.el9.x86_64        lm_sensors-libs-3.6.0-10.el9.x86_64
  nfs-utils-1:2.5.4-27.0.1.el9.x86_64      oracle-database-preinstall-19c-1.0-1.el9.x86_64
  pcp-conf-6.2.2-7.el9_5.x86_64            pcp-libs-6.2.2-7.el9_5.x86_64
  rpcbind-1.2.6-7.el9.x86_64               sssd-nfs-idmap-2.9.5-4.0.1.el9_5.1.x86_64
  sysstat-12.5.4-9.0.1.el9.x86_64

Complete!
[root@ol9 ~]#

预安装 RPM 包会创建 oracle 用户,并配置自定义系统参数。

[root@ol9 ~]# id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)
[root@ol9 ~]# grep '^kern' /etc/sysctl.d/99-oracle-database-preinstall-19c-sysctl.conf
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
[root@ol9 ~]#

第二步,安装 Oracle 数据库企业版 19c。

[root@ol9 data]# dnf install oracle-database-ee-19c-1.0-1.x86_64.rpm
...
Installing:
 oracle-database-ee-19c          x86_64          1.0-1           @commandline          2.5 G
...
Total size: 2.5 G
Installed size: 6.9 G
...
[INFO] Executing post installation scripts...
[INFO] Oracle home installed successfully and ready to be configured.
To configure a sample Oracle Database you can execute the following service configuration script as root: /etc/init.d/oracledb_ORCLCDB-19c configure
...
Installed:
  oracle-database-ee-19c-1.0-1.x86_64

Complete!

第三步,依据需求自定义配置文件,这里创建 3 个 PDB,名称前缀为ORCLPDB,并配置安装。

[root@ol9 data]# egrep -v '^#|^$' /etc/sysconfig/oracledb_ORCLCDB-19c.conf
LISTENER_PORT=1521
ORACLE_DATA_LOCATION=/opt/oracle/oradata
EM_EXPRESS_PORT=5500
NUMBER_OF_PDBS=3
PDB_NAME=ORCLPDB
[root@ol9 data]#
[root@ol9 data]# /etc/init.d/oracledb_ORCLCDB-19c configure
Configuring Oracle Database ORCLCDB.
Prepare for db operation
Copying database files
Creating and starting Oracle instance
Completing Database Creation
Creating Pluggable Databases
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
 /opt/oracle/cfgtoollogs/dbca/ORCLCDB.
Database Information:
Global Database Name:ORCLCDB
System Identifier(SID):ORCLCDB
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log"for further details.

Database configuration completed successfully. The passwords were auto generated, you must change them by connecting to the database using 'sqlplus / as sysdba' as the oracle user.

Oracle 数据库已经安装完成,我们检查一下数据库实例信息和监听状态。

[root@ol9 data]# su - oracle
[oracle@ol9 ~]$ export ORACLE_SID=ORCLCDB
[oracle@ol9 ~]$ export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
[oracle@ol9 ~]$ export PATH=$ORACLE_HOME/bin:$PATH
[oracle@ol9 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 11 01:04:41 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> SELECT INSTANCE_NAME FROM V$INSTANCE;

INSTANCE_NAME
----------------
ORCLCDB

SQL> SELECT BANNER_FULL FROM V$VERSION;

BANNER_FULL
--------------------------------------------------------------------------------
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 ORCLPDB1                       READ WRITE NO
         4 ORCLPDB2                       READ WRITE NO
         5 ORCLPDB3                       READ WRITE NO
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@ol9 ~]$
[oracle@ol9 ~]$
[oracle@ol9 ~]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 11-DEC-2024 01:06:43

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ol9.shawnyan.cn)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                11-DEC-2024 00:48:10
Uptime                    0 days 0 hr. 18 min. 33 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/ol9/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol9.shawnyan.cn)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=ol9.shawnyan.cn)(PORT=5500))(Security=(my_wallet_directory=/opt/oracle/admin/ORCLCDB/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "28ee62c50f1f5270e0635e2ba8c07586" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "28ee630dcc6552c1e0635e2ba8c08717" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "28ee63baf40152e8e0635e2ba8c036e5" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLCDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "ORCLCDBXDB" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "orclpdb1" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "orclpdb2" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
Service "orclpdb3" has 1 instance(s).
  Instance "ORCLCDB", status READY, has 1 handler(s) for this service...
The command completed successfully

到此,我们已经安装配置了一个可用的 Oracle 19c 数据库,但为了确保服务可用性、减少人工逐个手动启动服务的繁琐操作,我们通常会将服务设置为开机自启动。

Oracle 19c 自启动设定

对于 Oracle 19c 可以通过以下三步对数据库 CDB/PDB 和监听配置自启动。

  1. 修改文件 /etc/oratab  中的自动启动字段,以允许通过 dbstart 脚本自动启动数据库。

[root@ol9 ~]# egrep -v '^$|^#' /etc/oratab
ORCLCDB:/opt/oracle/product/19c/dbhome_1:Y

该文件包含三个字段$ORACLE_SID:$ORACLE_HOME:<N|Y>

  • ORACLE_SID  是服务器上 Oracle 实例的系统 ID (SID)。

  • ORACLE_HOME  是与此实例关联的家目录。

  • <Y|N> 标志表示实例是否应在启动时自动启动(Y = 是,N = 否)。

2. 为 Oracle 数据库和监听服务添加 service 启动脚本。分别创建 Oracle 数据库和网络监听的服务文件。

[root@ol9 ~]# cat /usr/lib/systemd/system/lsnrctl.service
[Unit]
Description=Oracle Net Listener
After=syslog.target network.target

[Service]
Environment=ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
Type=forking
User=oracle
Group=dba
ExecStart=/opt/oracle/product/19c/dbhome_1/bin/lsnrctl start
ExecStop=/opt/oracle/product/19c/dbhome_1/bin/lsnrctl stop

[Install]
WantedBy=multi-user.target
[root@ol9 ~]#
[root@ol9 ~]# cat /usr/lib/systemd/system/oracledb.service
[Unit]
Description=Oracle Database Service
After=syslog.target network.target lsnrctl.service

[Service]
Type=forking
User=oracle
Group=dba
ExecStart=/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1
ExecStop=/opt/oracle/product/19c/dbhome_1/bin/dbshut /opt/oracle/product/19c/dbhome_1

[Install]
WantedBy=multi-user.target

重载服务并将服务设为随系统自启动。

systemctl daemon-reload
systemctl enable lsnrctl oracledb

3. 设定 PDB 随 CDB 自动启动。

从 Oracle 10g/11g 迁移到 19c 需要关注的事情之一便是多租户架构与容器数据库 CDB,具体技术细节这里不做展开。设定 PDB 随 CDB 自动启动,需在 CDB 中打开所有非种子 PDB,并保存状态。

SQL> ALTER PLUGGABLE DATABASE ALL SAVE STATE;

Pluggable database altered.

SQL> SELECT INSTANCE_NAME, CON_NAME, STATE FROM DBA_PDB_SAVED_STATES;

INSTANCE_NAME        CON_NAME             STATE
-------------------- -------------------- --------------
ORCLCDB              ORCLPDB1             OPEN
ORCLCDB              ORCLPDB2             OPEN
ORCLCDB              ORCLPDB3             OPEN

Oracle 19c 自启动配置完成,重启 Oracle Linux 操作系统进行验证。

[shawnyan@ol9 ~]$ systemctl status lsnrctl
● lsnrctl.service - Oracle Net Listener
     Loaded: loaded (/usr/lib/systemd/system/lsnrctl.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-12-11 02:04:28 CST; 4min 10s ago
    Process: 888 ExecStart=/opt/oracle/product/19c/dbhome_1/bin/lsnrctl start (code=exited, status=0/SUCCESS)
   Main PID: 948 (tnslsnr)
      Tasks: 2 (limit: 47503)
     Memory: 37.0M
        CPU: 54ms
     CGroup: /system.slice/lsnrctl.service
             └─948 /opt/oracle/product/19c/dbhome_1/bin/tnslsnr LISTENER -inherit
[shawnyan@ol9 ~]$ systemctl status oracledb
● oracledb.service - Oracle Database Service
     Loaded: loaded (/usr/lib/systemd/system/oracledb.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-12-11 02:04:38 CST; 4min 2s ago
    Process: 1234 ExecStart=/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1 (code=exited, status=0/SUCCESS)
      Tasks: 75 (limit: 47503)
     Memory: 3.1G
        CPU: 17.164s
     CGroup: /system.slice/oracledb.service
             ├─2017 ora_pmon_ORCLCDB
...

升级到 Oracle 19.25

前阶段做过一个小范围投票,周围使用 Oracle 的朋友在新上或者升级到 Oracle 19c 后更倾向于使用新版 RU,大多选择 24 年发布的小版本(19.22~19.25)。

对于有安全策略规定,或者需要规避已知 Bug 的使用场景,推荐升级到次新、最新小版本,这里以 10 月 15 日发布更新的 Oracle 19.25 DBRU 为例,介绍如何升级 Oracle 19c。升级过程主要分为三步,升级 OPatch,安装补丁包,应用 SQL 修订。

  1. 升级 OPatch 到最新版本 12.2.0.1.44。

[oracle@ol9 ~]$ cd $ORACLE_HOME
[oracle@ol9 dbhome_1]$ mv OPatch/ OPatch_19.3
[oracle@ol9 dbhome_1]$ unzip /data/p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME
[oracle@ol9 dbhome_1]$ /opt/oracle/product/19c/dbhome_1/OPatch/opatch version
OPatch Version: 12.2.0.1.44

OPatch succeeded.
[oracle@ol9 dbhome_1]$

2. 安装补丁包。

解压补丁包,确认当前安装的任何临时修补程序是否与正在安装的修补程序 36912597 冲突:

[oracle@ol9 data]$ unzip p36912597_190000_Linux-x86-64.zip
[oracle@ol9 data]$ cd 36912597
[oracle@ol9 36912597]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
...
Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

停止你所需要更新的数据库服务和监听程序。

systemctl stop oracledb
systemctl stop lsnrctl

通过输入以下命令来运行 OPatch 实用程序。

[oracle@ol9 36912597]$ $ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 12.2.0.1.44
...
Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   36912597
...
All checks passed.
...
Backing up files...
Applying interim patch '36912597' to OH '/opt/oracle/product/19c/dbhome_1'
...
Patch 36912597 successfully applied.
Sub-set patch [29517242] has become inactive due to the application of a super-set patch [36912597].
Please refer to Doc ID 2161861.1 for any possible further required actions.
Log file location: /opt/oracle/product/19c/dbhome_1/cfgtoollogs/opatch/opatch2024-11-14_00-11-19AM_1.log

OPatch succeeded.

3. 应用 SQL 修订。

启动数据库,运行 Datapatch 以完成 SQL 文件的修订,并按需重新编译数据库中的无效对象。

[oracle@ol9 ~]$ systemctl status oracledb
[oracle@ol9 ~]$ 
[oracle@ol9 ~]$ $ORACLE_HOME/OPatch/datapatch -verbose
SQL Patching tool version 19.25.0.0.0 Production on Wed Dec 11 02:58:28 2024
...
Connecting to database...OK
Gathering database info...done
Bootstrapping registry and package to current versions...done
Determining current state...done
Adding patches to installation queue and performing prereq checks...done
Installing patches...
Patch installation complete.  Total patches installed: 5
Automatic recompilation incomplete; run utlrp.sql to revalidate.
  PDBs: ORCLPDB1 ORCLPDB2 ORCLPDB3 PDB$SEED

SQL Patching tool complete on Wed Dec 11 03:12:19 2024
[oracle@ol9 ~]$ cd$ORACLE_HOME/rdbms/admin
[oracle@ol9 admin]$ $ORACLE_HOME/perl/bin/perl catcon.pl --n 1 --e --b utlrp --d '''.''' utlrp.sql
...
catcon.pl: completed successfully

最后,再次验证升级后的数据库实例版本。

SQL> SELECT BANNER_FULL FROM V$VERSION;

BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.25.0.0.0

Have a nice day ~

转载请注明:可思数据 » 2025 年,一定要学好 MOP 数据库

人工智能数据标注服务
留言与评论(共有 条评论)
昵称:
匿名发表 登录账号
                 
   
验证码:
后台-系统设置-扩展变量-手机广告位-手机广告位-内容广告位三