JMU Oracle 实验一

关于oracle的安装,数据库的创建略,从网络配置开始

先了解一下实例的概念

数据库实例(instance)是一组用于管理数据库文件的内存结构。

数据库是一组位于磁盘上的物理文件,通过 CREATE DATABASE 语句创建。实例管理相关的数据,并且为数据库用户提供服务。

每个正在运行的 Oracle 数据库至少与一个实例相关联。因为实例存在于内存中,而数据库存在磁盘上,所以实例可以独立于数据库存在,数据库也可以独立于实例存在。

一台服务器上可以同时运行多个实例,每个实例管理各自的数据库。例如,某台服务器上拥有两个不同的数据库:prod1 和 prod2。一个实例管理 prod1另一个实例管理 prod2。

  • SID:一个数据库可以有多个实例(如RAC),SID是用来标识这个数据库内部每个实例的名字,就好像一
    个部门里,每个人都有一个自己的名字。
  • SERVICE_NAME:是这个数据库对外宣称的名字,外面的人要想连接我这个数据库,你就在客户端的连接串里写上service_name。它就像一个部门的名字,这个部门的名称在看门大爷(listener)那里有登记,看门大爷一看你是要找SERVICE_NAME这个部门,就告诉你我们公司确实有这个部门,于是你就找到了,连接就建立了。

一句话来说就是:SID是对内的,是实例级别的一个名字,用来内部之间称呼用。SERVICE_name是对外的,是数据库级别的一个名字,用来告诉外面的人,我数据库叫"SERVICE_NAME"。

远程连接的原理

oracle的两个进程

  • OracleOraDB19Home1TNSListener (oracle的监听器服务)
  • OracleServiceORCL (oracle的数据库服务)

要使用oracle数据库,这2个服务是必须启动的
Listener和Service对应的参数文件(位置在 Oracle主目录(Oracle 数据库软件的安装位置)\network\admin\):

  • listener.ora
  • tnsnames.ora

JMU Oracle 实验一_第1张图片

用户要想访问数据库,首先要和数据库建立连接,连接到数据库实例上,通过实例访问数据库。

用户如何连接到实例上,需要借助oracle的监听

用户连接到oracle借助的是sqlplus(sqlplus 用户名/密码@ip地址:端口/数据库名)命令,

  • 首先,用户根据ip地址和端口号找到监听
  • 然后,监听询问用户访问的服务名
    (如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。)
    • oracle会把服务名和实例名注册到监听,并有一个映射关系
  • 根据访问的服务名找到实例名
  • 与实例建立连接
  • 验证sqlplus提供的用户名和密码

开始实验

参考博客1:https://blog.csdn.net/shark_chili3007/article/details/104074203
参考博客2:https://blog.csdn.net/forever_river/article/details/55823875

我是直接改文件,建议用Net Configuration Assistance或者Net Manager

我是先参考的博客1,然后新的监听进程出现了,listener.ora和tnsnames.ora这两个文件也自动更新了,but在测试连接的时候失败了(没保存截图)

然后我又参考了博客2,手动修改listener.ora和tnsnames.ora这两个文件,再次此时连接,完成。测试了客户端(我作为服务端,同学尝试连接了我的oracle)和服务端(自己连自己的试了一下)
JMU Oracle 实验一_第2张图片
JMU Oracle 实验一_第3张图片
出现超时的话把防火墙关了应该就没问题了,先ping一下看看

  • 同学连我的
    JMU Oracle 实验一_第4张图片

  • 自测
    JMU Oracle 实验一_第5张图片

  • 我连同学的
    JMU Oracle 实验一_第6张图片

上面两种连接都是根据ip地址+端口号,后面接的orcl是service_name(数据库全局域名)
JMU Oracle 实验一_第7张图片

也可以通过服务名连接【sqlplus [username]/[password]@[网络服务名,那个ORCL]】,但这个要在tnsnames.ora进行配置,得和对方统一,所以我的建议是用上面那种。

  • 1521端口:sqlplus system/1234@ORCL
  • 1530端口:sqlplus system/1234@ORCL1(大小写都OK)

最后附上我自己的配置文件
这个文件下:D:\Oracle\Oracle_software\network\admin,Oracle_software是我oracle软件安装的目录

listener.ora

# listener.ora Network Configuration File: D:\Oracle\Oracle_software\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      # IPC的只能有一个
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\Oracle\Oracle_software)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\Oracle_software\bin\oraclr19.dll")
     )
    (SID_DESC =
       (SID_NAME = ORCL )
       (ORACLE_HOME = D:\Oracle\Oracle_software) 
       (GLOBAL_DBNAME = ORCL)
     )
  )

# 新的监听程序
LISTENER1 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = [ip地址,改成自己的])(PORT = 1530))
    )
  )

SID_LIST_LISTENER1 =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\Oracle\Oracle_software)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\Oracle_software\bin\oraclr19.dll")
     )
    (SID_DESC =
       (SID_NAME = ORCL )
       (ORACLE_HOME = D:\Oracle\Oracle_software) 
       (GLOBAL_DBNAME = ORCL)
     )
  )

tnsnames.ora

# tnsnames.ora Network Configuration File: D:\Oracle\Oracle_software\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

LISTENER_ORCL1 =
  (ADDRESS = (PROTOCOL = TCP)(HOST = [ip地址,改成自己的])(PORT = 1530))

# orcl是网络服务名
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      # service_name是数据库全局域名/服务名
      (SERVICE_NAME = orcl)
    )
  )

ORCL1 =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = [ip地址,改成自己的])(PORT = 1530))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

不用文件,用可视化的

改这边的ip地址就行
JMU Oracle 实验一_第8张图片

把数据库开启到不同的状态

我理解的oracle database就是一组文件(控制文件,数据文件,联机重做日志文件等),而oracle实例(oracle instance)就是oracle的管理系统,用于操作文件。数据库和实例是一对一的关系。
JMU Oracle 实验一_第9张图片

  • 查看数据库状态:select status from v$instance;

  • sqlplus / as sysdba后查询状态为open(不知道为啥我初始就是open)

  • 关闭数据库:shutdown normal后再查询数据库状态报错ORACLE not available,因为数据库实例都被关闭了
    JMU Oracle 实验一_第10张图片

  • 然后要启动实例就是:startup nomount,当前状态STARTEDJMU Oracle 实验一_第11张图片

    • alter database mountMOUNTED
    • alter database openOPEN
      JMU Oracle 实验一_第12张图片
  • 然后再打开控制文件:startup mount

  • 再打开数据文件:startup open

不同关闭

  • shutdown nomal:正常方式关闭数据
    阻止任何用户建立新的连接。
    等待当前所有正在连接的用户主动断开连接
    一旦所有的用户都断开连接,则立即关闭、卸载数据库,并终止实例。
  • shutdown immediate:立即关闭方式
    阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
    不等待在线用户主动断开连接,强制终止用户的当前事务,将任何未提交的事务回退
    直接关闭、卸载数据库,并终止实例。
  • shutdown transactional:事务关闭方式
    阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
    等待所有未提交的活动事务提交完毕,然后立即断开用户的连接。
    直接关闭、卸载数据库,并终止实例。
  • shutdown abort:强制关闭
    shutdown abort阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
    不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。
    启动时自动进行实例恢复

你可能感兴趣的:(oracle)