Oracle架构之数据库备份和RAC介绍
Oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中,与相比,它提供更好的性能、安全性和灵活性。并行处理: Oracle 数据泵支持并行处理(通过指定PARALLEL参数启用),这使得导入和导出任务更加快速和高效。可定制: 数据泵允许用户选择要包含或排除的对象类型(如表、视图、
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) |
RECORDLENGTH | IO 记录的长度 |
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_TIMEOUT | RESUMABLE 的等待时间 |
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) |
RECORDLENGTH | IO 记录的长度 |
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_TIMEOUT | RESUMABLE 的等待时间 |
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
更多推荐
所有评论(0)