1 数据库备份

1.1 数据库备份分类

1.1.1 逻辑备份与物理备份

数据库备份按照备份状态分为逻辑备份与物理备份

  • 逻辑备份
    利用SQL从数据库中抽取数据,并存为二进制文件的形式进行备份。业务数据库采用此种方式,不需要在归档模式下。如Oracle中,对数据库对象(用户、表、存储过程)利用EXPORT导出,利用IMPORT把逻辑备份文件导入数据库(Oracle exp/imp)。
    • 优点:可以只备份某些表或某些特定的数据;可以在不同版本之间进行跨平台恢复;可以压缩后存储节省空间。
    • 缺点:对于大规模的数据库,执行语句耗时较长;无法保证完全一致性(如同时有新数据插入)。
  • 物理备份
    物理备份是指直接拷贝数据库存储介质上的所有内容,包括操作系统层面和数据库引擎层面,这样就能够完整地还原整个数据库。一般需要外部存储设备。
    优点:速度快且可靠;能够提供一致性快照。
    缺点:只能提供到“某一时间点”上的恢复,无法选择性地(按表或用户)进行备份和恢复,只能全库备份和恢复;不能用于跨平台迁移。
    • 冷备份:发生在数据库已经正常关闭的情况下(脱机状态),所有的数据文件都处于离线状态。在实施备份过程中,数据库不能做其他工作,可以保证数据的完整性和一致性。
    • 热备份:在数据库运行情况下(联机状态)进行,不会影响正常的业务操作,可在表空间或数据库文件级备份,并且对用户透明,能够保持业务连续性,备份时间短,可达到秒级恢复(恢复到某一时间点)。热备份要将日志置为归档模式,需要考虑到正在写入或修改的数据可能导致数据不一致性问题,采取特殊措施来确保数据完整性。
  • 归档模式与非归档模式
    • 归档模式:归档模式下,数据库将历史记录保存到一组称为归档日志的特殊文件中。这些日志包含先前已提交的事务的详细信息,使得可以恢复或还原丢失或损坏的数据。由于需要频繁地写入日志文件,性能会有所降低。
    • 非归档模式:非归档模式下,当一个事务被提交时,其结果直接写入主要数据文件中。而不像归档模式那样额外生成日志文件。这种方式虽然可以 提高性能,并降低空间开销,但也存在数据丢失或损坏时无法完全恢复的风险

1.1.2 完全备份/差异备份/增量备份

完全备份/差异备份/增量备份:

  • 完全备份(Full) :备份全部选中文件,并不依赖文件的存档属性来确定备份哪些文件(每个文件都被标记为已备份,消除存档属性)。
  • 差异备份(Differential) :备份上次完全备份后发生变化的所有文件(备份后不标记为已备份文件,不消除存档属性)。(备份时间长,占空间多,恢复快)。
  • 增量备份(Incremental) :针对上次备份后(无论哪种备份)备份上次备份后所有发生变化的文件(备份后标记文件,消除存档属性)。(备份时间短,占空间少,恢复慢)。

组合示例:

  • 完备+差备:周一进行完全备份,周二到周五进行差异备份。若周五数据被破坏,需还原周一的完全备份及周五的差异备份。
  • 完备+增备:周一进行完全备份,周二到周五机型增量备份。若周五数据被破坏,需还原周一的完全备份及周二至周五的增量备份。

1.2 Oracle 逻辑备份

Oracle支持两种类型的逻辑备份:导出/导入实用程序与数据泵。

1.2.1 EXP/IMP

1.2.1.1 EXP导出

语法格式:

完全模式
exp SYSTEM/MANAGER BUFFER=64000 file= C:\full.dmp full=Y

用户模式
exp detail12/detail12 owner=(detail12,detail11) file=/home/oracle/detail.dmp
exp detail12/detail12@RACDB_192.168.1.13 file=d:/detail.dmp
其中,RACDB_192.168.1.13为Oracle Net Configuration Assistant的网络服务名。

表模式
exp detail12/detail12 owner=detail12 tables=(T_JBXX) file=/home/oracle/t_jbxx.dmp
如果T_JBXX为分区表,使用tables=(T_JBXX1:P1,T_JBXX2:P2)的形式。

query字段格式:

query="""where dept_date<to_date('2014-02-01 00:00:10','yyyy-mm-dd hh24:mi:ss')"""

注意:不导出权限和索引可加入 GRANTS=N INDEXES=N

1.2.1.2 EXP关键字说明
关键字说明 (默认值)
USERID用户名/口令
FULL导出整个文件 (N)
BUFFER数据缓冲区大小
OWNER所有者用户名列表
FILE输出文件 (EXPDAT.DMP)
TABLES表名列表
COMPRESS导入到一个区 (Y)
RECORDLENGTHIO 记录的长度
GRANTS导出权限 (Y)
INCTYPE增量导出类型
INDEXES导出索引 (Y)
RECORD跟踪增量导出 (Y)
DIRECT直接路径 (N)
TRIGGERS导出触发器 (Y)
LOG屏幕输出的日志文件
STATISTICS分析对象 (ESTIMATE)
ROWS导出数据行 (Y)
PARFILE参数文件名
CONSISTENT交叉表的一致性 (N)
CONSTRAINTS导出的约束条件 (Y)
OBJECT_CONSISTENT只在对象导出期间设置为只读的事务处理 (N)
FEEDBACK每 x 行显示进度 (0)
FILESIZE每个转储文件的最大大小
FLASHBACK_SCN用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME用于获取最接近指定时间的 SCN 的时间
QUERY用于导出表的子集的 select 子句
RESUMABLE遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUTRESUMABLE 的等待时间
TTS_FULL_CHECK对 TTS 执行完整或部分相关性检查
TABLESPACES要导出的表空间列表
TRANSPORT_TABLESPACE导出可传输的表空间元数据 (N)
TEMPLATE调用 iAS 模式导出的模板名
1.2.1.3 导入
完全模式
imp SYSTEM/MANAGER BUFFER=64000 file=C:\full.dmp full=Y

用户模式
imp detail12/detail12 fromuser=(detail12,detail11) touser=(detail12,detail11) file=/home/oracle/detail.dmp

表模式
imp detail12/detail12 owner=detail12 tables=(T_JBXX) file=/home/oracle/t_jbxx.dmp

注意:

  • IMP导入必须指定Full=Y,或提供fromuser/touser参数,或提供tables参数。
  • 导入前需按要求设置字符集export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
  • 忽略创建表错误可加入IGNORE=Y,不导入权限和索引可加入 GRANTS=N INDEXES=N
  • 导入时发生IMP-00032错误,表示SQL语句超过缓冲区长度,可以加入选项:buffer=100000000
1.2.1.4 IMP关键字说明
关键字说明 (默认值)
USERID用户名/口令
FULL导入整个文件 (N)
BUFFER数据缓冲区大小
FROMUSER所有者用户名列表
FILE输入文件 (EXPDAT.DMP)
TOUSER用户名列表
SHOW只列出文件内容 (N)
TABLES表名列表
IGNORE忽略创建错误 (N)
RECORDLENGTHIO 记录的长度
GRANTS导入权限 (Y)
INCTYPE增量导入类型
INDEXES导入索引 (Y)
COMMIT提交数组插入 (N)
ROWS导入数据行 (Y)
PARFILE参数文件名
LOG屏幕输出的日志文件
CONSTRAINTS导入限制 (Y)
DESTROY覆盖表空间数据文件 (N)
INDEXFILE将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES跳过不可用索引的维护 (N)
FEEDBACK每 x 行显示进度 (0)
TOID_NOVALIDATE跳过指定类型 ID 的验证
FILESIZE每个转储文件的最大大小
STATISTICS始终导入预计算的统计信息
RESUMABLE在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUTRESUMABLE 的等待时间
COMPILE编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION导入流的一般元数据 (Y)
STREAMS_INSTANTIATION导入流实例化元数据 (N)

1.2.2 EXPDP/IMPDP

1.2.2.1 数据泵介绍

Oracle Database 10g引入了最新的数据泵(Data Dump)技术,使 DBA 或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中,与Export / Import相比,它提供更好的性能、安全性和灵活性。

  • 并行处理: Oracle 数据泵支持并行处理(通过指定 PARALLEL 参数启用),这使得导入和导出任务更加快速和高效。
  • 可定制: 数据泵允许用户选择要包含或排除的对象类型(如表、视图、约束等),以及要包含或排除的特定对象。
  • 压缩: Oracle 数据泵支持压缩功能,可减少导出文件的大小,并提高传输速度。
  • 安全性: 数据泵支持 SSL 加密协议来保护敏感信息,在安全方面非常有优势。
  • 多平台兼容性: Oracle 数据泵支持多个平台上运行,例如 Windows 和 Linux 等操作系统。
1.2.2.2 数据泵的使用

EXP和IMP是客户端工具程序,它们既可以在可以客户端使用,也可以在服务端使用。 EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录。因此,使用EXPDP工具时,必须首先建立DIRECTORY对象,并且需要为数据库用户授予使用DIRECTORY对象权限。
使用Data Pump,可将整个数据库或特定模式及其对象(如表格、索引、约束和其数据)导出/导入,还可指定选项,例如表空间、压缩级别、加密和远程导出/导入的网络链接。

Data Pump包括两个客户端实用程序:expdp(Export Data Pump)和impdp(Import Data Pump)

create directory imp_dir as 'D:\imp_dir';
创建一个名为 imp_dir 的 Oracle 目录对象,它指向文件系统中的路径 D:\imp_dir

GRANT READ, WIRTE ON DIRECTORY imp_dir TO detail;

expdp scott/tiger DUMPFILE=tmp_dump.dmp  DIRECTORY= imp_dir

impdp scott/tiger DUMPFILE=tmp_dump.dmp  DIRECTORY= imp_dir

1.2.3 Sqluldr2与Sqlldr导入导出

1.2.3.1 Sqluldr2导出文本

Sqluldr2是灵活与强大的Oracle文本导出程序,主要参数如下:

  • user = username/password@tnsname
  • sql = SQL file name
  • query = select statement
  • field = separator string between fields
  • record = separator string between records
  • rows = print progress for every given rows (default, 1000000)
  • file = output file name(default: uldrdata.txt)
  • log = log file name, prefix with + to append mode
  • fast = auto tuning the session level parameters(YES)
  • text = output type (MYSQL, CSV, MYSQLINS, ORACLEINS, FORM, SEARCH).
  • charset = character set name of the target database.
  • ncharset= national character set name of the target database.
  • parfile = read command option from parameter file

使用sqluldr2 help=yes可以查看更多参数说明。

sqluldr2 data/data@orcl 
        query="select * from sx_table" 
        parfile=d:\exp.par 
        file=d:\sx_table.txt

exp.par 内容如下:

head=yes
batch=yes
safe=yes
rows=3000000
record=0x0d0x0a

在当前目录下会生成一个名为sx_table_sqlldr.ctl的控制文件,通过该控制文件可以用SQL*Loader将数据加载到sx_table表中。

1.2.3.2 Sqlldr导入文本

Sqlldr(SQL*Loader)Oralce用来将文本文件装载到数据库中的。

sqlldr userid=test/test@orcl 
       readsize=33554432 
       streamsize=33554432
       date_cache=10000000 
       direct=true 
       skip_index_maintenance=true
       skip_unusable_indexes=true 
       multithreading=true 
       errors=10000000 
       skip=1 
       log="d:\load.log" 
       control="d:\sx_table_sqlldr.ctl"
       data="d:\sx_table.txt"

1.3 导出报错

1.3.1 EXP-00003: 未找到段 (0,0) 的存储定义

Oracle 11G在用EXPORT导出时,空表不能导出,11GR2中有个新特性,当表无数据时,不分配segment,以节省空间。

alter system setdeferred_segment_creation=false scope=both;

1.3.2 EXP-00028 failed to open for write

oracle用户对当前文件夹没有写权限
chmod改成可写

1.3.3 EXP-00091: Exporting questionable statistics

一般是由于字符集问题

2 RAC

2.1 简介

2.1.1 基本概念

Oracle RAC(Oracle Real Application Server Cluster) 是一种分布式数据库解决方案,它允许多个Oracle数据库实例在多台服务器上共享同一个数据库存储空间,并通过集群来保证高可用性容错性。简单来说,RAC就是将多个数据库实例连接起来,形成一个集群,可以在任何节点上访问到完整的数据库内容。
在这里插入图片描述
Oracle RAC 由多个数据库实例组成,其中每个实例都运行在不同的服务器节点上。节点之间通过网络通信,每个实例都可以访问数据文件控制文件归档日志参数文件等共享资源。在RAC架构中,数据库和应用程序是分离的,应用程序只需要连接到任何一个数据库实例即可,当有节点故障时,连接会自动定向到其他节点上。

2.1.2 Oracle RAC应用场景

Oracle RAC 被广泛用于大型、高性能的企业级应用系统中,如在线交易处理、数据仓库和业务智能分析等。

  • 交易处理
    在交易处理系统中,Oracle RAC可以提供高可用性、负载均衡和性能优化的支持。采用Oracle RAC可以避免因单点故障而导致的系统不可用或性能下降,保障了在线交易系统的连续性和稳定性。
  • 数据仓库
    在数据仓库系统中,Oracle RAC 可以提供强大的查询优化功能,以满足业务对数据挖掘和商业智能分析的需求。同时,Oracle RAC还支持在线报表生成和实时数据分析,可以大大提升业务决策的速度和准确性。
  • 业务智能分析
    Oracle RAC还广泛应用于业务智能分析系统中,以满足大规模数据量、复杂查询和多维分析等业务需求。通过引入Oracle RAC,可以有效提高系统的响应速度和并行处理能力,以满足业务对实时性和可靠性的需求。

2.1.3 Oracle RAC的优缺点

优点:

  • 高可用性:Oracle RAC 具有高可用性,因为它可以在多个节点上运行数据库实例。如果一个节点出现故障,其他节点可以自动接管其职责,从而避免了单点故障。
  • 高容错性:Oracle RAC提供故障检测和自动恢复技术,在节点故障、网络故障以及存储设备故障等情况下,自动地协调数据库实例之间的交互。Oracle RAC 具有故障转移功能,因为它可以自动将客户端请求路由到可用的节点上。这可以确保系统的连续性和可用性,从而避免了业务中断的风险。
  • 可扩展性:Oracle RAC 具有可扩展性,因为它可以通过增加节点来扩展性能,以满足不断增长的业务需求。Oracle RAC提供在线扩展的功能,可在不中断服务的情况下添加或删除节点。
  • 负载均衡:Oracle RAC 具有负载均衡功能,因为它可以将客户端请求路由到可用的节点上。这可以确保每个节点都能充分利用其资源,从而提高性能和可靠性。
  • 数据共享:Oracle RAC 具有数据共享功能,因为它可以让多个节点共享同一个物理存储。这可以确保数据的一致性和完整性,从而避免了数据冲突和数据丢失的问题。

局限性:

  • 成本高昂:Oracle RAC需要购买专门的硬件和软件支持,以及专业人员的维护和管理。这使得采用Oracle RAC的成本较高,对于中小型企业而言可能不划算。
  • 复杂性:Oracle RAC的构建和配置比单机数据库复杂得多,需要考虑多个节点之间的数据同步、连接管理、资源管理以及故障恢复等问题。这可能需要更为复杂的系统架构、详细的设计和测试过程。
  • 可扩展性有限:尽管Oracle RAC可以通过添加和删除节点来实现线性扩展,但这种可扩展性也有一定的局限性。如果要进一步提高性能,可能需要采用更为复杂的方案,如分布式数据库或云计算架构。
  • 资源占用:由于Oracle RAC需要在每个节点上运行多个实例,因此它需要更多的计算资源和内存容量。这可能会影响整个系统的性能和稳定性。

2.2 架构中组件

Oracle RAC的架构包括两个主要组件:共享存储实例集群

  • 共享存储:指多个节点可以访问的单个存储池,其中包括共享的磁盘或SAN设备等。所有节点都可以访问共享的存储空间,包括数据文件、控制文件、归档日志和参数文件等。这些存储资源通常由一个专门的存储阵列设备提供支持,以确保容错性和高可用性。
  • 实例集群:指运行在集群中各个节点上的多个Oracle实例,每个实例都运行在不同的服务器节点上,它们可以协同工作,共享相同的数据库存储空间。

Oracle RAC 的体系结构包括多个关键组件,它们共同协作来实现多节点并行处理、故障检测和自动恢复等功能:

  • Oracle Database 软件
    Oracle Database 软件是 Oracle RAC 的核心组成部分,它必须在每个节点上进行安装和配置,并且需要连接到共享存储设备,以确保节点之间可以相互访问数据库存储。
  • 共享存储
    共享存储对于 Oracle RAC 来说是至关重要的。它由一个或多个存储设备提供支持,以确保各个节点之间可以相互访问数据库存储资源。共享存储通常采用 SAN 存储设备或 NAS 设备来实现。
  • Oracle Clusterware
    Oracle Clusterware 是 Oracle RAC 中的关键组件之一,它可以跨节点协调各个实例之间的交互,并且提供自动故障转移和恢复功能,以确保数据库始终可用。此外,Clusterware 还提供了动态资源管理功能,确保每个节点上的进程可以均衡利用系统资源。
  • 共享缓存
    Oracle RAC 采用了共享内存架构的方式来实现多个实例之间的数据共享。即各个节点的实例都可以在内存中共享部分数据块(Synchronized Global Cache)。这些数据块可以被多个实例同时访问和修改,不同实例之间进行数据同步和数据冲突检测,保证数据的一致性。通过共享内存架构,Oracle RAC 可以避免访问磁盘的等待时间,从而提高系统的性能。
  • 连接管理器
    连接管理器负责将客户端请求 路由到可用的节点,以实现负载均衡。此外,连接管理器还提供了一些额外的功能,例如自动重试和会话故障检测等,以提高应用程序的可用性和可靠性。
  • 集群文件系统
    集群文件系统用于支持 Oracle RAC 的共享存储。它可以允许多个节点同时访问同一个文件系统,同时确保文件系统的安全性和一致性。Oracle RAC 支持多种集群文件系统,包括 ASM(Automatic Storage Management)和 OCFS2(Oracle Cluster File System)等。
  • 全局资源管理器
    全局资源管理器(Globally Enqueue Service)是 Oracle RAC 中实现并发控制的重要组件之一。它负责在多个节点之间协调并发事务的操作,包括锁定、解锁和排队等。同时,全局资源管理器还提供故障检测和自动恢复技术,可以动态地重新分配资源,以适应系统的变化。

2.3 RAC 的安装

Oracle RAC 的安装过程通常可以分为以下几个步骤:准备环境、安装 Oracle 软件、创建数据库、配置 RAC 组件、进行测试等。

2.3.1 安装 Oracle 软件

安装步骤如下:

  • 解压下载的 Oracle Database 软件包,并将其复制到所有节点上。
  • 运行runInstaller 脚本,启动 Oracle Database 安装程序。
  • “选择安装选项”页面上,选择“Install Database software only”选项,然后单击“Next”按钮。
  • “选择系统类别”页面上,选择“Cluster database”选项,然后单击“Next”按钮。
  • “选择集群配置”页面上,选择“Advanced installation”选项,然后单击“Next”按钮。
  • “选择集群节点”页面上,选择要安装 Oracle RAC 的所有节点,并设置每个节点的 Oracle 安装目录和共享存储位置。然后单击“Next”按钮。
  • “选择 Grid Infrastructure 基本目录”页面上,设置 Grid Infrastructure 软件的基本目录和组别。然后单击“Next”按钮。
  • “选择兼容性模式”页面上,选择需要的兼容性模式(Oracle Database 18c 或 Oracle Database 19c)。
  • “指定管理密码”页面上,设置 Grid Infrastructure 和数据库的管理员密码。然后单击“Next”按钮。
  • “审查所选配置”页面上,确认所选配置。然后单击“Install”按钮,开始安装 Oracle RAC。

2.3.2 创建数据库

创建步骤如下:

  • 在每个节点上运行 dbca 命令,启动 Oracle Database Configuration Assistant 工具。
  • “选择操作”页面上,选择“Create Database”选项,然后单击“Next”按钮。
  • “选择模板”页面上,选择“General Purpose or Transaction Processing”选项,然后单击“Next”按钮。
  • “定义数据库标识符”页面上,设置数据库名称、实例名称和 SID 等参数。然后单击“Next”按钮。
  • “配置数据库选项”页面上,设置数据库字符集、语言等选项。然后单击“Next”按钮。
  • “指定数据库文件位置”页面上,设置数据库的数据文件、控制文件和归档日志文件等位置。通常情况下,这些文件应该存储在共享存储中。然后单击“Next”按钮。
  • “指定数据库管理选项”页面上,设置管理员密码、监听器端口等选项。然后单击“Next”按钮。
  • “选择配置选项”页面上,选择需要的配置选项,例如是否启用 ASM 等。然后单击“Next”按钮。
  • “审查所选配置”页面上,确认所选配置。然后单击“Finish”按钮,开始创建数据库。

2.3.3 配置 RAC 组件

在创建数据库后,需要配置 Oracle RAC 的各个组件,包括监听器、OCR(Oracle Cluster Registry)和 ASM(Automatic Storage Management)等。配置步骤如下:

  • 配置监听器:在每个节点上运行 netca 命令,启动网络配置助手,然后创建一个新的监听器。
  • 配置 OCR:使用 crsctl 命令管理 OCR,可以将 OCR 备份到共享存储中,以实现故障恢复和高可用性。
  • 配置 ASM:在每个节点上运行 asmca 命令,启动 ASM 配置助手,然后创建 ASM 实例,并将数据库文件存储在 ASM 中。

2.3.4 RAC 环境下参数值的设置与查看

-- 使用 SHOW PARAMETER 查询,看到的是当前会话的初始化参数
-- 查看当前连接的实例名
SQL> show parameter instance_name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
instance_name			     string	 orcl2

-- 修改实例 orcl1 的 open_cursors 参数值
SQL> alter system set open_cursors = 220 scope = both sid = 'orcl1';
System altered.

SQL> alter system set open_cursors = 320 scope = both sid = 'orcl2';
System altered.

-- 查看当前实例的 open_cursors 参数值
SQL> select name,value from v$parameter where name like 'open_cursors';
NAME						   VALUE
-------------------------------------------------- ----------------------------------------
open_cursors					   320

-- 查看所有实例的 open_cursors 参数值
SQL> select inst_id,name,value from gv$parameter where name like 'open_cursors';
   INST_ID NAME 					      VALUE
---------- -------------------------------------------------- --------------------------
	 2 open_cursors 				      320
	 1 open_cursors 				      220

-- 节点1
SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 220

-- 节点2
SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 320

-- 参数文件中的取值
SQL> select sid,name,value from v$spparameter where name like 'open_cursors';
SID	   NAME 			  VALUE
---------- ------------------------------ ----------------------------------------
*	       open_cursors 		  550
orcl1	   open_cursors 		  220
orcl2	   open_cursors 		  320

-- 使用 sid = '*' 修改
SQL> alter system set open_cursors = 500 scope = both sid = '*';
System altered.

-- 查看结果
-- 节点1
SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 500

-- 节点2
SQL> show parameter open_cursors
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
open_cursors			     integer	 500

-- 参数文件
SQL> show spparameter open_cursors
SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
orcl1	 open_cursors		       integer	   220
orcl2	 open_cursors		       integer	   320
*	     open_cursors		       integer	   500

2.4 进行测试

在完成 Oracle RAC 的配置后,需要进行一些测试来验证系统是否正常运行。可以通过以下方式进行测试:

  • 使用 SRVCTL 命令管理集群组件,例如启动、停止数据库实例和 ASM 实例等。
  • 使用 SQLPLUS 工具连接到数据库,并执行一些 SQL 查询语句,以验证数据库是否正常工作

2.5 问题

2.5.1 ORA-00600: internal error code, arguments: [kccsbck_first], [2], [1607268949]

2.5.1.1 问题引入

两个节点的Oracle11gRac集群,集群节点能够正常启动,使用sqlplus连接之后发现节点2的数据库没有启动,使用startup命令后出现如下错误:

SQL> startup
ORACLE instance started.

Total System Global Area  835104768 bytes
Fixed Size		    2257840 bytes
Variable Size		  570428496 bytes
Database Buffers	  260046848 bytes
Redo Buffers		    2371584 bytes
ORA-00600: internal error code, arguments: [kccsbck_first], [2], [1607268949],
[], [], [], [], [], [], [], [], []

使用srvctl命令也关闭集群数据库,然后启动时出现如下问题,显示只有一个节点数据库启动,另一个节点数据库启动失败;

[oracle@rac1 dbs]$ srvctl start database -d orcl
PRCC-1014 : orcl was already running
PRCR-1004 : Resource ora.orcl.db is already running
PRCR-1079 : Failed to start resource ora.orcl.db
CRS-5017: The resource action "ora.orcl.db start" encountered the following error: 
ORA-00600: internal error code, arguments: [kccsbck_first], [1], [1607288325], [], [], []
, [], [], [], [], [], []. For details refer to "(:CLSN00107:)" in "/u01/app/11.2.0/grid/log/rac2/agent/crsd/oraag
ent_oracle/oraagent_oracle.log".
CRS-2674: Start of 'ora.orcl.db' on 'rac2' failed
CRS-2528: Unable to place an instance of 'ora.orcl.db' as all possible servers are occupi
ed by the resource

经过测试发现:当节点2无法启动时,如果把节点1的数据库关闭,则节点2的数据库能够启动,反之亦然;

2.5.1.2 问题解决

最后查看 Oracle 官方文档,发现该问题可能与 db_unique_name 参数在集群中的不同节点取值不一致有关。那么可能是修改 db_unique_name 参数时只修改了一个节点。先启动节点2,查询该参数的取值:

-- 节点2
SQL> show parameter db_unique_name 

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			 string	 mydb

把节点2 的数据库关闭,启动节点1 的数据库,查询 db_unique_name 参数的值。

-- 节点1
SQL> show parameter db_unique_name 

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			     string	 orcl

发现两个节点的 db_unique_name 参数确实不一致。使用如下命令把 db_unique_name 参数的值设置为 mydb。

SQL> alter system set db_unique_name = 'orcl' scope = spfile sid = '*';
System altered.

-- 说明:sid = '*' 表示集群中的所有节点都修改

修改 db_unique_name 参数之后,重新启动数据库就正常了

select inst_id,name,value from gv$parameter where name like '%instance_name%';
   INST_ID NAME 					      VALUE
---------- -------------------------------------------------- --------------------------
      2 instance_name				      orcl2
      1 instance_name				      orcl1
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐