Oracle 中的 SID、数据库名称、数据库域、全局数据库名称、服务名称、服务别名和实例名称有什么区别?
答案1
SID = 标识数据库实例(数据库名称 + 实例编号)。因此,如果您的数据库名称是 somedb,实例编号是 3,那么您的 SID 就是 somedb3。
DB 名称 = 数据库的名称(数据库可以由多个实例共享)
DB 域 = 通常与您的公司域相同 (somecompany.com)
全局数据库名称 = 数据库名称 + 数据库域(somedb.somecompany.com)
服务名称 = 一个或多个实例的“连接器”。在 RAC 环境中创建额外的服务名称通常很有用,因为可以修改服务以使用特定 SID 作为主要或次要连接,或者根本不使用某些 SID。
服务别名 = 服务名称的别名(就像 CNAME 等)。假设您为服务名称取一个对 dba 有意义的名字,但可能有点深奥。创建一个服务别名并将其命名为对用户有意义的名字。
实例名称 = 与 SID 相同
答案2
您描述 SID 的方式只是 RAC 配置中的默认行为。SID (== instance_name) 就是:您的实例的名称。
我总是这样看待它:一个实例是 RDBMS 软件的一个实例。一个实例装载一个控制文件,(alter database mount)在这个控制文件中写入了数据文件的位置。数据文件集合(好的,还有控制文件)== 数据库。
数据库有一个名称,即 db_name,以及(可选)域 (db_domain) --> 合起来就是 global_db_name。现在假设您正在复制 (DataGuard) 您的数据库。您想保持 DB_name 不变,对吗?(我的意思是:从数据上讲,它是同一个数据库)但是,如何识别数据库的两个“版本”?输入“DB_UNIQUE_NAME”... 是的,这让人感到困惑...
我个人的做法是将 INSTANCE 命名为 DataGuard 设置中的 db_unique_name,并在 RAC 设置中坚持使用 RAC 名称(db_name+Instance_Number)。然后,我编写的 db_unique_name 通常类似于 db_name + 1 个字母的后缀(MYDBa MYDBb 等)。
欢呼吧,保罗
答案3
SID 是实例。最好避免使用术语“数据库实例”,只使用实例。
“SID = 标识数据库实例(数据库名称 + 实例编号)”是错误的。“实例,是 RDBMS 软件的一个实例”是错误的。卸载或安装的 DBMS 都是 DBMS。
应避免使用“DB 域 = 通常与您的公司域相同”。我在使用域时遇到了问题,而当不使用域时,问题就会消失。
“全局数据库名称 = 数据库名称 + 数据库域”也是错误的。全局数据库名称就是服务名称。就这么简单。
“SID = 标识数据库实例(数据库名称 + 实例编号)。因此,如果您的数据库名称是 somedb,实例编号是 3,那么您的 SID 就是 somedb3。”是错误的。不存在这样的标识或名称连接。
答案4
我建议你参考
Knowledge Xpert for Oracle Administration > Oracle Architecture > Oracle instance, files and processes
如果您安装了 Toad,即使是试用版。
它完整地描述了整个画面。