Oracle 数据库如何仅从ORACLE_HOME和ORACLE_SID中知道全局数据库名称?
我的ORACLE_SID
是foosid
,我的数据库名称是foogdn
。实际上,全局数据库名称是 foogdn.example.com
。这在下面的 shell 和 sqlplus 会话中演示。
$ export ORACLE_SID=foosid
$ export ORACLE_HOME=/home/ora/app/ora/product/12.1.0/dbhome_1
$ "$ORACLE_HOME/bin/sqlplus" / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Tue Aug 2 12:20:19 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 419430400 bytes
Fixed Size 2925120 bytes
Variable Size 285216192 bytes
Database Buffers 125829120 bytes
Redo Buffers 5459968 bytes
Database mounted.
Database opened.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
FOOGDN.EXAMPLE.COM
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/home/ora/app/ora/oradata/foogdn/control01.ctl
/home/ora/app/ora/fast_recovery_area/foogdn/control02.ctl
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/home/ora/app/ora/oradata/foogdn/system01.dbf
/home/ora/app/ora/oradata/foogdn/sysaux01.dbf
/home/ora/app/ora/oradata/foogdn/undotbs01.dbf
/home/ora/app/ora/oradata/foogdn/pdbseed/system01.dbf
/home/ora/app/ora/oradata/foogdn/users01.dbf
/home/ora/app/ora/oradata/foogdn/pdbseed/sysaux01.dbf
/home/ora/app/ora/oradata/foogdn/pdborcl/system01.dbf
/home/ora/app/ora/oradata/foogdn/pdborcl/sysaux01.dbf
/home/ora/app/ora/oradata/foogdn/pdborcl/pdborcl_users01.dbf
9 rows selected.
SQL>
两个问题:
- 数据库是如何确定
ORACLE_SID=foosid
GLOBAL_NAME
是foogdn.example.com
的?我提供的唯一线索是ORACLE_SID
和ORACLE_HOME
,然后启动数据库。然后数据库似乎已经自己发现全局数据库名称是 foogdn.example.com。它是怎么做到的?它在哪里存储ORACLE_SID
到GLOBAL_NAME
的映射? - databae 是如何确定数据库文件的位置的?这些信息存储在哪里?
Example.com
(数据库的逻辑位置(是db_domain
参数的值。 foogdn
是数据库的名称 - db_name
参数的值。db_name
和 db_doman
的值构成全局数据库名称。 db_domain
和db_name
都存储在spfile<SID>.ora
和/或init[<SID>].ora
文件中。此外,数据库名称与DBID
一起存储在控制文件和每个数据文件的标头中。
基本结构为:
指定用于查找初始化参数文件的 oracle SID(系统标识符(,无论它是服务器参数文件 ( spfile<sid>.ora
( 还是文本初始化参数文件 init<sid>.ora
。 IPF(初始化参数文件(中的CONTROL_FILES
参数指向控制文件的位置,其中包含有关数据、重做日志和其他文件位置的信息。
了解更多