关于oracle的安装,数据库的创建略,从网络配置开始
数据库实例(instance)是一组用于管理数据库文件的内存结构。
数据库是一组位于磁盘上的物理文件,通过 CREATE DATABASE 语句创建。实例管理相关的数据,并且为数据库用户提供服务。
每个正在运行的 Oracle 数据库至少与一个实例相关联。因为实例存在于内存中,而数据库存在磁盘上,所以实例可以独立于数据库存在,数据库也可以独立于实例存在。
一台服务器上可以同时运行多个实例,每个实例管理各自的数据库。例如,某台服务器上拥有两个不同的数据库:prod1 和 prod2。一个实例管理 prod1另一个实例管理 prod2。
一句话来说就是:SID是对内的,是实例级别的一个名字,用来内部之间称呼用。SERVICE_name是对外的,是数据库级别的一个名字,用来告诉外面的人,我数据库叫"SERVICE_NAME"。
oracle的两个进程
要使用oracle数据库,这2个服务是必须启动的
Listener和Service对应的参数文件(位置在 Oracle主目录(Oracle 数据库软件的安装位置)\network\admin\):
用户要想访问数据库,首先要和数据库建立连接,连接到数据库实例上,通过实例访问数据库。
用户如何连接到实例上,需要借助oracle的监听
用户连接到oracle借助的是sqlplus(sqlplus 用户名/密码@ip地址:端口/数据库名)命令,
参考博客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)和服务端(自己连自己的试了一下)
出现超时的话把防火墙关了应该就没问题了,先ping一下看看
上面两种连接都是根据ip地址+端口号,后面接的orcl是service_name(数据库全局域名)
也可以通过服务名连接【sqlplus [username]/[password]@[网络服务名,那个ORCL]】,但这个要在tnsnames.ora进行配置,得和对方统一,所以我的建议是用上面那种。
最后附上我自己的配置文件
这个文件下: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)
)
)
我理解的oracle database就是一组文件(控制文件,数据文件,联机重做日志文件等),而oracle实例(oracle instance)就是oracle的管理系统,用于操作文件。数据库和实例是一对一的关系。
查看数据库状态:select status from v$instance;
sqlplus / as sysdba
后查询状态为open(不知道为啥我初始就是open)
关闭数据库:shutdown normal
后再查询数据库状态报错ORACLE not available
,因为数据库实例都被关闭了
然后再打开控制文件:startup mount
再打开数据文件:startup open
shutdown nomal
:正常方式关闭数据shutdown immediate
:立即关闭方式shutdown transactional
:事务关闭方式shutdown abort
:强制关闭