【Oracle篇】实例中和name相关参数的区别和作用

💫《博主介绍》:✨又是一天没白过,我是奈斯,从事IT领域✨

💫《擅长领域》:✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了解✌️

💖💖💖大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注💖💖💖

前言:   

    哈喽小伙伴们,今天跟大家介绍一下oracle中和name相关的参数和作用,并且在单机环境、Data Guard(DG)环境和Real Application Clusters(RAC)环境中,这些参数的应用和重要性也有所不同,只有明确这些差异,才能更好地管理和维护数据库,确保其稳定运行。因此,本文将探讨这些参数的配置和应用,帮助大家更好地理解它们在各种环境中的差异和作用。

    Oracle数据库的管理和运维中,名称(name)相关的参数起着至关重要的作用。这些参数包括db_name、db_unique_name、service_names、instance_name和global_names。如果不深入了解这些参数的用途和影响,可能会导致后续的运维工作变得复杂和困难。因此,掌握这些参数的配置时机和作用是至关重要的。

e74d9db293bd4f108c7c00258ef26ee0.jpeg

                                       

特别说明💥:本篇文章部分理论性知识点均来源于版权归 Oracle 所有的官方公开文档手册,并结合了我个人的解读和案例演示。若需要调整,请联系,会尽快处理😄

                  

官方文档对不同name的介绍(Oracle 12c):

Initialization Parameters

               

一、参数db_name(数据库名):

    数据库名是在创建实例时指定的,不能多于8个字符。官方文档对db_name的介绍:DB_NAME

参数环境

描述

单机环境

创建实例时指定的。

rac环境

每个rac上的实例必须有相同的值。

rac dg环境

每个rac dg上的实例与主库需要保持一致。

是否可以修改:不能修改

    如果修改参数文件中的db_name,将orcl修改为orcldg,那么在启动数据库时报:ORA-01103: database name 'ORCL' in control file is not 'ORCLDG'。报错含义是控制文件中的数据库名称为“ORCL”,而不是“ORCLDG”。

    如果修改了参数文件,并且也通过重建控制文件修改了db_name,将orcl修改为orcldg,那那么在启动数据库时报:ORA-01161: Database name ORCL in the file header does not match ORCLDG in the DATABASE clause。报错含义是文件头中的数据库名称ORCL与Database子句中的ORCLDG不匹配,也就是说db_name是记录在了数据文件的文件头中的,所以是不能修改的哦。想要变动db_name就只能通过expdp这种逻辑迁移等。


          

二、参数db_unique_name(数据库唯一名):

    DB_UNIQUE_NAME指定数据库的全局唯一名称,最多可包含30个字符。DG是以db_unique_name作为区分数据库标识的,因此主从库的该参数一定要不同以做区分。官方文档对db_unique_name的介绍:DB_UNIQUE_NAME

参数环境

描述

单机环境

默认值为db_name(官方文档)

rac环境

默认值为db_name(官方文档),并且每个rac上的实例必须有相同的值。

rac dg环境

每个rac dg上的实例与主库不同,用于dg区分数据库名,每个rac dg上的实例需要手动指定,但是每个实例都是一样的db_unique_name,不分db_unique_name+number。

是否可以修改:可以修改,一般不做修改,只有在搭建dg时才会修改,DG是以db_unique_name作为区分数据库标识的


         

三、参数service_names(服务名):

    指定客户端连接到服务名,通过服务名连接到SID(实例名),在rac环境中每个节点都有不同的SID(实例名),那么通过连接服务名就可以实现会话在节点的负载均衡,因为会话会分发到不同的SID上。官方文档对service_names的介绍:SERVICE_NAMES

参数环境

描述

单机环境

默认值是db_unique_name.db_domain(官方文档)

rac环境

默认值是db_unique_name.db_domain(官方文档),每个rac上的实例必须有相同的值。

rac dg环境

每个rac dg上的实例与主库不同,便于区分是主库还是dg环境,每个rac dg上的实例需要手动指定,但是每个实例都是一样的service_names,不分service_names+number。

是否可以修改:可以修改。如果修改了,那么就是修改了客户端连接的服务名。

              

ps:介绍一下db_domain参数,db_domain(数据库域名称)数据库所在域,没有默认值也就是参数默认值为空,不能更改。对应db_domain参数,是为了更好的管理分布式数据库而根据实际情况决定的。


           

四、参数instance_name(SID):

    实例的实例名SID,在rac环境中每个节点都有不同的SID(实例名),那么通过连接服务名就可以实现会话在节点的负载均衡,因为会话会分发到不同的SID上。官方文档对instance_name的介绍:INSTANCE_NAME

参数环境

描述

单机环境

默认值为db_name(官方文档)

rac环境

每个rac上的实例为db_name+number,用于区分每个实例实现通过通过连接service_names实现负载均衡。

rac dg环境

每个rac dg上的实例与主库不同,便于区分是主库还是dg环境,每个rac dg上的实例需要手动指定db_unique_name+number,用于区分每个实例实现通过连接service_names实现负载均衡。

是否可以修改:可以修改,一般不做修改,只有在搭建dg时才会修改,为了区分。


     

五、参数db_domain(数据库域名称):

    数据库所在域,没有默认值,不能更改。对应db_domain参数,是为了更好的管理分布式数据库而根据实际情况决定的。官方文档对db_domain的介绍:DB_DOMAIN


           

六、参数global_names(全局数据库名):

    GLOBAL_NAMES指定是否需要数据库链接具有与其连接的数据库相同的名称。如果GLOBAL_NAMES是false,则不执行检查。如果使用或计划使用分布式处理,则Oracle建议将此参数设置为true确保在网络环境中对数据库和链接使用一致的命名约定。

    数据库的完整标识符,在创建数据库的时候决定的,默认是db_name.db_domain参数的组合,在以后对参数文件中db_name和db_domain参数的任何修改不影响global_names的值,如果要修改global_names的值,只能用alter database rename global_names to <db_name.db_domain>进行修改,然后修改相应参数。

    官方文档对global_names的介绍:GLOBAL_NAMES


             

最后对oracle的name相关参数做个总结:

    db_unique_name、service_names、instance_name随便改,alter system改完之后可以启动实例,这些name都不会涉及在控制文件和数据文件头部中;但db_name不能通过alter system,如果通过参数文件改完之后导致库启动不了(ORA-01103: database name 'ORCL' in control file is not 'ORCLDG'),如果参数文件改了控制文件也重置,那么在效验数据文件时文件的头部也是不能通过的,也会报ORA-01161: Database name ORCL in the file header does not match ORCLDG in the DATABASE clause

    db_unique_name、service_names、instance_name不会涉及在控制文件里,但db_name会涉及到控制文件和数据文件头部中。所以db_name进行异机迁移,通过rman迁移到FS还是迁移到rac环境,db_name是不能变的。想要变动db_name就只能通过expdp这种逻辑迁移等。

<think>我们正在处理关于如何正确重启Oracle集群(RAC)的问题。根据提供的引用内容,我们可以总结出以下步骤注意事项: 1. **引用[1]中提到**:RAC集群的停止启动过程。启动集群中的数据库可以使用`srvctl start database`命令,该命令会在集群的每个节点上启动数据库实例。同样,停止集群也应该有相应的命令。 2. **引用[2]中提到**:Oracle RAC运行于集群之上,提供了高可用性。如果集群内的一个节点发生故障,Oracle可以继续在其余的节点上运行。因此,在重启集群时,我们需要确保集群的高可用性不受影响,即重启操作应该是滚动重启(逐个节点重启)还是整个集群同时重启,这取决于维护需求。 3. **引用[3]中提到**:在解决集群主机重启问题时,修改了系统配置(如大页内存配置)并解决了问题。这提醒我们在重启集群前需要检查系统配置,确保配置正确,避免重启后出现问题。 4. **引用[4]中提到**:集群时间同步(NTPCTSS)。在重启集群时,需要确保时间同步服务正常运行,以避免集群节点间的时间不一致导致问题。 根据以上信息,我们可以整理出重启Oracle集群的步骤: ### 重启Oracle集群的步骤 #### 1. 准备工作 - 确保所有节点间的网络通信正常(如私有网络、公共网络)[^2]。 - 检查系统配置(如大页内存配置)是否正确,避免重启后出现问题[^3]。 - 确保时间同步服务(NTP或CTSS)已配置并正常运行[^4]。 #### 2. 停止集群(按顺序停止) - **停止数据库**:使用`srvctl`命令停止整个数据库。 ```bash srvctl stop database -d <database_name> ``` - **停止实例(可选,如果不需要逐个停止,上一步已停止整个数据库)**:也可以逐个节点停止实例,但通常直接停止整个数据库更方便。 - **停止Oracle集群件(Clusterware)**:在每个节点上以root用户执行以下命令停止集群件。 ```bash # 在节点1执行: crsctl stop crs # 在节点2执行: crsctl stop crs # ... 以此类推 ``` 或者,可以使用以下命令一次性停止整个集群(在其中一个节点上执行即可): ```bash crsctl stop cluster -all ``` #### 3. 重启操作系统(如果需要) - 如果是因为操作系统维护需要重启,则按计划重启每个节点。注意:建议采用滚动重启(即逐个节点重启)以避免整个集群同时不可用。 - 重启节点1:`reboot` - 等待节点1重启完成,并验证集群服务是否在该节点上自动启动(如果没有,需要手动启动集群件)。 - 然后重启节点2:`reboot` - 以此类推。 #### 4. 启动集群(按顺序启动) - **启动Oracle集群件(Clusterware)**:在每个节点上以root用户执行以下命令启动集群件。 ```bash crsctl start crs ``` 或者,使用以下命令一次性启动整个集群: ```bash crsctl start cluster -all ``` - **检查集群状态**:确保集群件在所有节点上都正常运行。 ```bash crsctl check cluster -all ``` - **启动数据库**:使用`srvctl`命令启动整个数据库。 ```bash srvctl start database -d <database_name> ``` - **检查数据库状态**: ```bash srvctl status database -d <database_name> ``` #### 5. 验证 - 检查集群资源状态: ```bash crsctl stat res -t ``` - 检查数据库实例是否在所有节点上正常运行。 - 检查监听器状态: ```bash srvctl status listener ``` - 通过SQL*Plus连接到数据库,执行一些查询以确保数据库正常运行。 ### 注意事项 - **滚动重启**:对于高可用性要求高的环境,建议采用滚动重启(即一个节点一个节点地重启),这样在整个过程中数据库服务不会中断(除了该节点上的实例暂时不可用,其他节点仍可提供服务)[^2]。 - **时间同步**:重启后确保所有节点的时间同步,避免因时间偏差导致集群问题[^4]。 - **日志检查**:重启过程中和重启后,检查集群日志数据库日志,确保没有错误信息。 - 集群日志位置:`$GRID_HOME/log/<node_name>` - 数据库日志位置:`$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace` ### 示例命令总结 ```bash # 停止整个数据库 srvctl stop database -d orcl # 停止整个集群(所有节点上的集群件) crsctl stop cluster -all # 重启操作系统(按节点逐个进行) reboot # 启动整个集群(所有节点上的集群件) crsctl start cluster -all # 启动数据库 srvctl start database -d orcl ``` §§ 相关问题 §§ 1. 如何检查 Oracle RAC 集群的健康状态? 2. Oracle RAC 滚动升级的操作步骤是什么? 3. 如何配置 Oracle 集群的时间同步服务(NTP/CTSS)? 4. 在 Oracle RAC 中如何添加或删除节点? 5. Oracle 集群件(Clusterware)日志文件的位置查看方法? [^1]: 停止启动数据库的命令参考 [^2]: 滚动重启以确保高可用性 [^3]: 重启前检查系统配置(如大页内存) [^4]: 确保时间同步服务正常运行</think>### 正确重启 Oracle RAC 集群的步骤 #### 📋 重启前检查 1. **检查集群状态** ```bash crsctl check cluster -all # 验证集群健康状态[^2] crsctl stat res -t # 检查所有资源状态 ``` 2. **验证时间同步** 确保 NTP/CTSS 服务正常运行[^4]: ```bash crsctl check ctss # 检查集群时间服务 ntpq -p # 检查NTP同步状态 ``` 3. **确认归档空间** ```sql SELECT * FROM V$RECOVERY_AREA_USAGE; # 检查闪回区空间[^1] ``` #### ⚙️ 重启步骤(推荐滚动重启) ```mermaid graph LR A[停止数据库] --> B[停止节点1集群服务] B --> C[重启节点1操作系统] C --> D[启动节点1集群服务] D --> E[验证节点1状态] E --> F[按序重启其他节点] ``` 1. **停止数据库** ```bash srvctl stop database -d <db_name> # 停止整个数据库[^1] ``` 2. **按节点滚动重启**(保持服务可用) **节点1操作:** ```bash crsctl stop crs # 停止集群服务[^3] reboot # 重启操作系统 crsctl start crs # 启动集群服务 crsctl check cluster # 验证节点状态 ``` 重复以上步骤逐个重启其他节点 3. **启动数据库** ```bash srvctl start database -d <db_name> # 启动数据库[^1] ``` #### ✅ 重启后验证 ```bash crsctl stat res -t # 检查资源状态 srvctl status database -d <db_name> # 验证数据库状态[^1] SELECT INSTANCE_NAME, STATUS FROM GV$INSTANCE; # 检查所有实例 ``` #### ⚠️ 关键注意事项 1. **大页内存配置** 确认 `/etc/sysctl.conf` 中的 `vm.hugetlb_shm_group` 正确配置[^3]: ```bash grep hugetlb /etc/sysctl.conf ``` 2. **避免全集群同时停机** 滚动重启可确保至少有一个节点保持服务可用[^2] 3. **时间同步容差** 节点间时间差需 ≤ 1 秒,否则会导致集群驱逐[^4] 4. **存储验证** ```bash asmcmd lsdg # 检查ASM磁盘组状态 ``` > 📌 **紧急情况**:若节点重启后无法加入集群,检查: > ```bash > olsnodes -s -t # 查看节点状态 > crsctl query css votedisk # 检查投票盘状态 > ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈斯DB

打赏到账,我飘啦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值