Oracle数据库如何仅通过ORACLE_HOME和ORACLE_SID知道全局数据库名称和数据库文件的位置?

时间:2016-08-02 07:09:50

标签: database oracle file

Oracle数据库如何仅从ORACLE_HOME和ORACLE_SID知道全局数据库名称?

我的ORACLE_SIDfoosid,我的数据库名称是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> 

两个问题:

  1. 数据库是如何确定GLOBAL_NAME的{​​{1}}是ORACLE_SID=foosid的?我提供的唯一线索是foogdn.example.comORACLE_SID,然后启动数据库。然后数据库似乎已经自己想出全局数据库名称是foogdn.example.com。它是怎么做到的?它在哪里存储ORACLE_HOMEORACLE_SID
  2. 的映射
  3. 数据库是如何计算出数据库文件的位置的?这些信息存储在哪里?

1 个答案:

答案 0 :(得分:1)

Example.com(数据库的逻辑位置)是db_domain参数的值。 foogdn是数据库的名称 - db_name参数的值。 db_namedb_doman的值构成全局数据库名称。 db_domaindb_name都存储在spfile<SID>.ora和/或init[<SID>].ora文件中的任何一个或两个中。此外,数据库名称与DBID一起存储在控制文件和每个数据文件的标题中。

基本结构是:

指定oracle SID(系统标识符),用于定位初始化参数文件,无论它是服务器参数文件(spfile<sid>.ora)还是文本初始化参数文件init<sid>.ora。 IPF(初始化参数文件)中的CONTROL_FILES参数指向控制文件的位置,该文​​件包含有关数据,重做日志和其他文件位置的信息。

Find out more