1.前言
由于控制文件中记录了数据库中数据文件、日志文件的位置信息,检查点信息等重要的信息,在数据库的open阶段,Oracle将根据控制文件中记录的这些信息找到这些文件,然后进行检查点及完整性检查,如果不存在问题就可以启动数据库,如果存在不一致或文件丢失则需要进行修复。
2.open阶段的一致性校验
在数据库OPEN的过程中,Oracle进行的检查中包括两项:
第一次检查数据文件头部中的检查点计数(Checkpoint CNT)是否和控制文件中的检查点计数(Checkpoint CNT)一致,此步骤检查用以确认数据文件是来自同一版本,而不是从备份中恢复而来(因为Checkpoint CNT不会被冻结,会一直被修改)。
省略。。。。后续补充。。。
3.数据库的访问
在前面的测试环节中,我们一直使用的数据库连接方式是本地连接,即通过SQL*PLUS工具在数据库服务器本地,通过SYSDBA身份进行登录,这种登录方式在进行数据库管理时需要经常用到。
而在数据库启动之后,要想提供网络服务,通过远程连接访问,我们还需要启动数据库的监听器(配置文件通常为listener.ora),监听器用于在特定的端口上(缺省的端口是1521)提供监听,接受来自客户端的访问请求(客户端请求通过tnsnames.ora文件定义发送)。在专用服务器模式下(Dedicated),监控器会为每个请求衍生一个服务器进行相对应,通过这个服务器进程将客户端与数据库联系起来。
客户端与服务端
接下来介绍一下客户端以及服务端为提供网络应用必须执行相关配置,这些配置可以通过oracle的工具Net Configureation Assistant来进行
3.客户端的Tnsname.ora文件配置
客户端为了连接Oracle数据库服务器,需要安装客户端软件,并在客户端配置网络服务名文件(当然 Oracle支持多中连接方式,这里将介绍网络服务名文件方式连接,也就是tnsname.ora文件),这个文件位于$ORACLE/network/admin目录下,在windows和unix/linux下的位置是相同的,文件名为tnsname.ora。一段经典的配置如下:
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.40.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
这里的ADDRESS部分包含了服务器的地址以及监听端口的信息,connect_data部分包含了连接的信息,用于定义目标服务器的名称,server_name在这里用于识别访问的数据库服务,而server_name在这里也经常可以用SID来替代,从Oracle 9i开始,Oracle推荐用SERVER_NAME而不是SID.
配置完成之后,可以通过tnsping工具进行连通性测试:以下表示连接成功
[oracle@node04 admin]$ tnsping orcl TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 25-SEP-2021 18:07:29 Copyright (c) 1997, 2009, Oracle. All rights reserved. Used parameter files: /data/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.40.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl))) OK (0 msec)
远程连接有以下两种方式,从oracle 10g开始,还可以使用如下方式进行连接
SQL> conn system/system#123@172.16.40.2/orcl Connected.
或者直接用sqlplus进行连接
[oracle@node04 admin]$ sqlplus system/system#123@172.16.40.2:1521/orcl SQL*Plus: Release 11.2.0.1.0 Production on Sat Sep 25 19:39:34 2021 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>
4.服务器端的监听文件listener.ora配置
说完了客户端再来看一下,如果数据库端设置了service_name后,监听器应该怎样配置,例如以下一个数据库系统,只有一个实例
SQL> show parameter service_name NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ service_names string orcl SQL>
同样在$ORACLE_HOME/network/admin目录下可以找到listener.ora文件,以下是一个监听文件的典型配置
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.40.2)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /data/oracle/product/11.2.0/db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl) ---->注意这里的GLOBAL_NAME采用的是service_name (ORACLE_HOME = /data/oracle/product/11.2.0/db_1) (SID_NAME = orcl) ) )
监听文件主要包含两个部分:
- 第一部分Listenner信息:这部分包含了监听协议、地址以及端口等信息。
- 第二部分SID_LISTENER信息:这部分信息用于提供对外的数据库服务列表,第一个SID_DESC部分(SID_NAME=PLSExtProc)是数据库缺省就包含的对外部存储过程提供的本地监听,此外SID_DESC部分就是对数据库的SERVICE_NAMES所设置的监听服务,对于同一个SID对应的数据库,可以对外提供多个服务名供客户端访问。
设置服务名的参数为 GLOBAL_DBNAME,当处理客户端连接请求时,监听器首先尝试GLOBAL_DBNAME和客户端请求中的SERVICE_NAME相匹配;如果客户端连接请求的是SID信息,则Oracle不检查GLOBAL_DBNAME设置,而是对监听器中设置的SID_NAME进行匹配。
启动这个监听器后,就可以看到不同服务器名oracle所启动的监听信息,首先输出的信息显示了监听器文件地址以及监听日志文件位置(监听器日志在诊断数据库异常或攻击信息时非常有用)。
[oracle@node04 admin]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 25-SEP-2021 20:08:34 Copyright (c) 1991, 2009, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production Start Date 25-SEP-2021 19:29:58 Uptime 0 days 0 hr. 38 min. 36 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /data/oracle/product/11.2.0/db_1/network/admin/listener.ora Listener Log File /data/oracle/diag/tnslsnr/node04/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.40.2)(PORT=1521))) Services Summary... Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... Service "orcl" has 1 instance(s). Instance "orcl", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
5.通过不同服务器名对数据库的访问
服务器完成上述配置后,现在客户端可以通过不同的网络服务名配置来访问这个数据库,下面是一个配置示范:
[oracle@node04 admin]$ cat tnsnames.ora ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.40.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
通过这个服务名,我们就可以顺利访问到数据库了
[oracle@node04 admin]$ sqlplus /nolog SQL*Plus: Release 11.2.0.1.0 Production on Sat Sep 25 20:55:33 2021 Copyright (c) 1982, 2009, Oracle. All rights reserved. SQL> SQL> SQL> show user; USER is "" SQL> conn system/system#123@orcl Connected. SQL> show user; USER is "SYSTEM" SQL>
SQL> show parameter service_name; NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ service_names string orcl SQL>
通过服务名,Oracle可以将客户端和服务端彻底隔离开来,对于客户端来说,它不用关心数据库的名字、实例名字到底是什么,它只需要知道数据库对外提供的服务名就好了,这个名字可以和实例相同,也可以不同。