我在公司笔记本电脑上的 Windows 10 上设置了 Oracle 18c (18.4)(localhost 应该与我公司的域名相同)。在安装时使用密码创建用户SYSTEM
后,我尝试使用以下设置连接到数据库:
hotsname:localhost
端口:1521
数据库:XEPDB1(与 ServiceName 连接)
访问这个,这里是我想要理解的以下查询(通过接收这些结果详细描述了向 Oracle 请求的内容):
许多输出与我的预期不同(例如v$database
使用 global_name)。
以下是lsnrctl 状态(我的公司域被隐藏):
PS C:\WINDOWS\system32> lsnrctl 状态 适用于 64 位 Windows 的 LSNRCTL:版本 18.0.0.0.0 - 2020 年 3 月 28 日 08:43:00 生产 版权所有 (c) 1991、2018,甲骨文。版权所有。 连接 a (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) STATO del LISTENER ---------------------- 别名监听器 用于 64 位 Windows 的版本 TNSLSNR:版本 18.0.0.0.0 - 生产 数据di inizio 23-MAR-2020 23:43:32 Tempo di attivitÓ 4 giorni 8 ore 59 分钟。31 秒。 Livello 追踪 Sicurezza ON:本地操作系统身份验证 SNMP 关闭 服务预定义 XE 文件 di 参数 listenerC:\app\sterragn\product\18.0.0\dbhomeXE\network\admin\listener.ora 文件 di 日志侦听器 C:\app\sterragn\product\18.0.0\diag\tnslsnr\MIL-GZSL2H2\listener\alert\log.xml 汇总表 degli 端点 di ascolto... (描述=(地址=(协议=tcp)(主机=127.0.0.1)(端口=1521))) (描述=(地址=(协议=ipc)(管道名称=\\.\pipe\EXTPROC1521ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=127.0.0.1)(PORT=5500))(Security=(my_wallet_directory=C:\APP\STERRAGN\PRODUCT\18.0.0\admin\XE\xdb_wallet)) (演示=HTTP)(会话=RAW)) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=PCX-LAPTOP.domain.topLevelDomain.subDomain)(PORT=5520))(Presentation=HTTP)(Session=RAW)) 汇总表 dei servizi... Il servizio "CLRExtProc" ha 1 istanze。 L'istanza "CLRExtProc", stato UNKNOWN, ha 1 handler per questo servizio... Il servizio "XE" ha 1 istanze。 L'istanza "xe", stato READY, ha 1 handler per questo servizio... Il servizio "XEXDB" ha 1 istanze。 L'istanza "xe", stato READY, ha 1 handler per questo servizio... Il servizio "bc0cc7179d094aa9b1c4b1ffb3e667da" ha 1 istanze。 L'istanza "xe", stato READY, ha 1 handler per questo servizio... Il servizio "xepdb1" ha 1 istanze。 L'istanza "xe", stato READY, ha 1 handler per questo servizio... Il comando Þ stato eseguito
输入:
SELECT NAME FROM v$database;
输出:
NAME ----- XE
输入:
SELECT * FROM v$instance;
输出:
INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION VERSION_LEGACY VERSION_FULL STARTUP_TIME STATUS PARALLEL THREAD# ARCHIVER LOG_SWITCH_WAIT LOGINS SHUTDOWN_PENDING DATABASE_STATUS INSTANCE_ROLE ACTIVE_STATE BLOCKED CON_ID INSTANCE_MODE EDITION FAMILY DATABASE_TYPE ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 xe PCX-LAPTOP 18.0.0.0.0 18.0.0.0.0 18.4.0.0.0 2020-03-23 16:15:57 OPEN NO 1 STOPPED [NULL] ALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL NO 0 REGULAR XE [NULL] SINGLE
输入:
select sys_context('userenv','instance_name') from dual;
输出:
SYS_CONTEXT('USERENV','INSTANCE_NAME') --------------------------------------- xe
输入:
select sys_context('userenv','db_name') from dual;
输出:
SYS_CONTEXT('USERENV','DB_NAME') --------------------------------- XEPDB1
输入:
select ora_database_name from dual;
输出:
ORA_DATABASE_NAME ------------------ XEPDB1
输入:
select * from global_name;
输出:
GLOBAL_NAME ------------ XEPDB1
在 Oracle 术语中:
如果数据库是非容器数据库或具有可插入数据库的容器数据库,则这是有效的顶级信息。然而,容器数据库是一个重大变化,它解释了为什么根据您连接的可插拔数据库
sys_context('userenv','db_name')
返回不同的东西,即当前可插拔数据库的名称。对于每个可插入数据库,默认情况下都有一个与可插入数据库名称同名的服务名称。有关更多信息,您应该真正阅读相关的 Oracle 数据库概念指南部分:
https://docs.oracle.com/en/database/oracle/oracle-database/18/cncpt/introduction-to-oracle-database.html#GUID-8F2EEEC8-0372-4419-88FF-7D77A9C0FCAD
https://docs.oracle.com/en/database/oracle/oracle-database/18/cncpt/introduction-to-oracle-database.html#GUID-AB84D6C9-4BBE-4D36-992F-2BB85739329F
另请注意, global_name 仅用于分布式数据库。
您使用的是使用多租户功能的 Express Edition (XE)。