Oracle安装(Windows)及客户端连接配置

本文 oracle 版本 12.2.0.1.0 。

安装指南: https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ntdbi/index.html

win10 安装Oracle19c (19.3版本)详细步骤

别瞎折腾

以下安装顺序遇到的问题:

步骤1、安装数据库软件

步骤2、创建PDB: orcl.zhaolq.com

步骤3、创建CDB: orcl2.zhaolq.com

安装完成后,将两个数据库都关闭,启动 PDB,用户无法登录:指定 pfile 文件启动成功。

Oracle Help for Java

帮助导航器 对数据库安装的每一步都进行了详细说明,点击安装界面左下角的 帮助 按钮进入:

image-20191124165504515

安装数据库软件、创建和配置数据库

image-20191124150710445

image-20191124150947901

image-20191124151442874

image-20191124152122560

image-20191124152236953

image-20191124152406367

image-20191124160215006

指定 Oracle 主目录用户

使用 Windows 内置帐户或指定标准 Windows 用户帐户 (非管理员帐户) 来安装和配置 Oracle 主目录。此帐户用于运行 Oracle 主目录的 Windows 服务。请勿使用此帐户登录执行管理任务。

  • 使用虚拟帐户

    帐户是指用于 Oracle 数据库单实例安装的 Oracle 主目录用户。使用此帐户可以安装 Oracle 数据库, 创建和管理数据库服务而无需口令。

  • 使用现有 Windows 用户

    帐户可以是 Windows 本地用户, Windows 域用户或 Windows 托管服务帐户 (MSA)。必须为 Windows 本地或域用户提供用户名和口令。对于托管域帐户 MSA 帐户, 只需提供用户名。

    对于 Oracle RAC 数据库或 Oracle Grid Infrastructure 的安装, 只能使用 Windows 域用户帐户。

  • 创建新 Windows 用户

    提供希望 Oracle Universal Installer 创建的 Windows 本地用户的用户名和口令。确认口令。创建的新用户未获得 Windows 计算机的交互式登录权限。不过, Windows 管理员可以像管理其他 Windows 帐户那样管理此帐户。

  • 使用 Windows 内置帐户

    不要求用户名或口令。Oracle 使用 Windows 内置帐户 (LocalSystem 或 LocalService) 创建 Windows 服务。

对于数据库服务器的安装, Oracle 建议将标准 Windows 用户帐户 (而不是 Windows 内置帐户) 作为 Oracle 主目录用户使用, 以增强安全性。

image-20191124160956245

image-20191124161048576

image-20191124163434587

指定数据库标识符

数据库由全局数据库名标识, 与该数据库关联的实例由 Oracle 系统标识符 (SID) 标识。

全局数据库名 - 这是为了对数据库进行唯一标识以将其与网络中其他数据库区分开而指定给数据库的名称。全局数据库名由数据库唯一名称 (db_unique_name), 分隔符 (句点) 和数据库域名 (db_domain) 组成。它表示为: db_unique_name.db_domain

其中:

  • db_unique_name 是数据库的名称。它最多可包含 30 个字符, 前 8 个字符必须是唯一的, 并且必须以字母字符开头。这些字符包括字母数字, 下划线 (_), 美元符号 ($) 和井号 (#)。

  • db_domain 是用于数据库的计算机环境。它最多可包含 128 个字符。字符可以包含字母数字, 下划线 (_), 井号 (#) 和句点 (.)。

: 请确保数据库名 (数据库唯一名称的前 8 个唯一字符), 分隔符和数据库域名的组合不超过 128 个字符。

例如:

sales.us.example.com

其中:

  • db_unique_name 为 sales

  • db_domain 为 us.example.com

Oracle 系统标识符 - 它是特定主机上 Oracle 数据库实例的唯一名称。Oracle 系统标识符 (SID) 帮助标识控制文件并定位打开数据库时所需的文件。当您输入全局数据库名时, Oracle Universal Installer 会使用该数据库名自动填充“Oracle 系统标识符”字段。您可以在高级安装中更改此名称。

Oracle Univeral Installer 将单实例数据库的 SID 限制为 12 个字母数字字符。对于 Oracle RAC 数据库, SID 前缀 (即 SID 的前 8 个字符) 必须是每个数据库的唯一名称。SID 不能包含下划线 (_), 美元符号 ($) 或井号 (#)。

选择创建为容器数据库选项以将数据库创建为支持一个或多个插接式数据库 (PDB) 的容器数据库 (CDB)。如果希望 Oracle Universal Installer 在创建 CDB 时创建 PDB, 请在插接式数据库名字段中指定 PDB 名称。

PDB 名称必须唯一并且遵守数据库命名惯例。

要创建其他 PDB 和管理 PDB, 请使用 Oracle Database Configuration Assistant。

单击下一步

服务名 (使用 Oracle RAC One Node) - 请确保为 Oracle RAC One Node 数据库提供服务名。使用服务名, 客户机可以连接到服务, 而不是连接到特定的 Oracle 数据库实例。使用服务名可在 Oracle RAC One Node 数据库已故障转移或重新定位到其他节点时仍然为客户机提供持续的连接。

image-20191124170121534

image-20191124170036861

image-20191124170321540

image-20191124170525213

image-20191124170835796

image-20191124171001362

image-20191124171250525

image-20191124171455141

image-20191124171542079

image-20191124171659582

image-20191124171944501

image-20191124172009364

image-20191124172151733

image-20191124172702837

image-20191124173205318

image-20191124174037461

创建和配置数据库

数据库配置助手(Database Configuration Assistant)简称DBCA,在12c中的功能有:创建数据库、配置现有数据库、删除数据库、管理数据库模板、管理可插入数据库、Oracle RAC 数据库实例管理。

PDB包含在CDB中,所以,要创建PDB,必须先创建CDB。详情见 CDB和PDB 章节。

以下创建 非 CDB

image-20191202203853877

image-20191202204003400

典型配置

image-20191203201157941

image-20191203201412941

image-20191203201449093

image-20191203202008433

image-20191203202518256

高级配置

image-20191203211335925

image-20191203212031231

image-20191203212303744

image-20191203212557486

image-20191203212850232

image-20191203220039186

image-20191203220217075

image-20191203221432589

image-20191208120637279

image-20191203221934226

image-20191203222213523

image-20191203225502798

image-20191203230047430

image-20191203230634929

Oracle的服务

成功安装并创建 Oracle 12c 数据库后的6个服务及默认设置:

image-20191124180356839

其中最重要的两个服务:

  • OracleServiceORCL :数据库服务(数据库实例),是Oracle核心服务,该服务是数据库启动的基础, 只有该服务启动,Oracle数据库才能正常启动。(必须启动)

  • OracleOraDB12Home1TNSListener :监听器服务,该服务只有在数据库需要远程访问的时候才需要。(非必须启动)

若只用 Oracle 自带的 sql*plus,只启动 OracleServiceORCL 服务即可;若要使用 PL/SQL Developer 等第三方工具,OracleOraDB12Home1TNSListener 也要开启。

禁止其他非必须开启的Oracle服务可以提升电脑的运行速度。

PDB默认状态

重新启动 Oracle 服务后,PDB 变为 MOUNTED 状态。

参考链接 CDB和PDB ,在 CDB 中创建触发器以实现 PDB 自启动。

PDB连接问题

ORACLE 12C 之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。

Oracle 12C 引入了CDB与PDB的新特性,在 ORACLE 12C 数据库引入的多租用户环境(Multitenant Environment)中,允许一个容器数据库(CDB)承载多个可插拔数据库(PDB),实例与数据库可以是一对多的关系。

默认 TNS 中没有 PDB 的监听,需要手动添加。添加前先确认【全局数据库名】和【服务名】。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# sqlplus登录见下文

# 查看数据库实例名
show parameter instance_name; -- CDB和PDB实例名相同,因为实例与数据库可以是一对多的关系

# 查看数据库服务名
show parameter service_name; -- 都是orcl.zhaolq.com,不理解

-- ######################## 配置监听的关键参数 ########################
-- ######################## 配置监听的关键参数 ########################
-- ######################## 配置监听的关键参数 ########################
# 查看全局数据库名
SELECT * FROM GLOBAL_NAME; -- 分别是 orcl.zhaolq.com、orclpdb.zhaolq.com

连接数据库

SQL Plus

SQL Plus 是最基本的Oracle数据库实用程序,具有基本的命令行界面,通常由用户、管理员和程序员使用。

1、开始 –> 运行 –> sqlplus

2、输入: username/password@database ,本地安装两个数据库时,使用 @ 选择登录,例如: system/123456789@orcl

登录成功示例:

image-20191124175349262

Sqlplus默认连接CDB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 登录sys用户
sqlplus sys/passwd as sysdba # 任意passwd,其实跟不不需要密码,因为你可能数据ora_dba组用户
sqlplus sys/ as sysdba
sqlplus sys as sysdba
sqlplus / as sysdba
sqlplus /as sysdba

# 连接pdb,需要为pdb添加监听
sqlplus sys/123456789@orclpdb as sysdba
sqlplus sys/123456789@//192.168.0.5:1521/orclpdb.zhaolq.com as sysdba -- 通过完整地址连接,无需客户端配置文件tnsnames.ora
sqlplus sys/123456789@192.168.0.5:1521/orclpdb.zhaolq.com as sysdba

#连接单实例数据库
sqlplus sys/123456789@192.168.0.5:1521:orcl.zhaolq.com as sysdba

计算机管理 > 组 > ora_dba组里的用户,无需输入用户和口令,直接以sysdba的身份登陆数据库。

image-20191130132834756

PL/SQL Developer

是否带域名要看监听程序如何配置

1
2
3
# 连接地址格式
192.168.0.5:1521/orcl.zhaolq.com
192.168.0.5:1521/orclpdb.zhaolq.com

JDBC (单实例和RAC)

对于Java程序配置数据源,无需知道数据库是单实例还是 RAC (集群),第一种不行就用第二种。

是否带域名要看监听程序如何配置

1
2
3
4
5
6
7
# 单实例
jdbc:oracle:thin:@192.168.0.5:1521:sid
jdbc:oracle:thin:@192.168.0.5:1521:orcl.zhaolq.com

# RAC集群/多实例。因为Oracle12c以后允许一个实例对应多个数据库服务,所以根据全局数据库名连接。兼容单实例数据库
jdbc:oracle:thin:@//192.168.0.5:1521/sname
jdbc:oracle:thin:@//192.168.0.5:1521/orclpdb.zhaolq.com

创建用户

推荐连接:

https://blog.51cto.com/itrunner/4645726

https://docs.oracle.com/en/database/oracle/oracle-database/19/index.html

关于多租户架构:

https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/introduction-to-the-multitenant-architecture.html#GUID-C5B0AF7D-ABE8-4F69-9552-F4DAF40281F1

CDB Common 用户和 CDB Local 用户概述:

https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/overview-of-the-multitenant-architecture.html#GUID-3BB161DA-9CC0-4D61-A2C1-5D3662E0DECF

CDB Common 用户:CDB Common 用户可以连接到 CDB 中它有足够权限的任何容器。

Application common 用户:Application common 用户只能连接到创建它的 Application Root,或插入到该 Application Root 的 PDB,具体取决于其权限。

Local 用户CDB 中 的本地用户是不常见的数据库用户,只能在单个 PDB 中操作。

Common 用户和 Local 用户:

关于普通用户和本地用户: https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/managing-security-for-oracle-database-users.html#GUID-BBBD9904-F2F3-442B-9AFC-8ACDD9A588D8

创建普通用户或本地用户: https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/managing-security-for-oracle-database-users.html#GUID-23F9786D-7E15-4A25-A5C3-BEDFE8098F8A

创建 PDB Local 用户:

当我们想在数据库中创建 用户的时候,一般是不往ROOT中创建。

要创建本地用户帐户,您必须连接到要在其中创建帐户的 PDB 并具有 CREATE USER 权限。脚本参考: Oracle表空间和用户的建立与删除

TNS

介绍

Oracle中TNS的完整定义:transparence Network Substrate 透明网络底层。

Oracle所有的TNS配置文件的默认路径:%ORACLE_HOME%\network\admin

配置文件

TNS的配置文件包括 服务器端客户端 两部分。

服务器端: listener.orasqlnet.oratnsnames.ora

客户端: sqlnet.oratnsnames.ora

Oracle 12c TNS配置文件的默认路径: D:\oracle12c\product\12.2.0\dbhome_1\network\admin

listener.ora

监听器是用来侦听客户端的连接请求以及建立客户端和服务器端连接通道的一个服务程序。默认情况下Oracle在1521端口上侦听客户端连接请求。

监听器包括两部分:

​ 1、Oracle要监听的地址端口通讯协议。HOST参数可以是Oracle服务器主机名称,也可以是相应的IP地址。

​ 2、Oracle要监听的数据库实例(SID_LIST_LISTENER部分)。非RAC环境下,LISTENER只能监听本服务器的地址和实例,RAC环境下,LISTENER还可以监听远程服务器。每个数据库最少要配置一个监听器。(注:RAC 环境,指的是Oracle服务器集群配置的环境:Oracle RAC

sqlnet.ora

sqlnet.ora 可以控制和管理Oracle连接的属性,根据参数作用的不同决定在客户端配置还是在server端配置。sqlnet.ora 的配置是全局性的,也就说sqlnet.ora的配置是对所有的连接起作用,如果想对某个特殊的连接或服务进行约束或限制,可以在TNS配置相应参数。

tnsnames.ora

配置客户端到服务器端的连接服务,包括客户端要连接到的服务器和数据库的配置信息

tnsnames.ora 包括两部分

​ ADDRESS_LIST:包含了Oracle数据库服务器的监听地址信息,也就是要告诉TNS,数据库可通过这个地址和CLIENT进行通讯。

​ CONNECT_DATA:定义了CLIENT要连接的数据库,以及数据库的连接方式,(专用或共享)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.zhaolq.com)
)
)

ORCL2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl2.zhaolq.com)
)
)

配置工具

Net Configuration Assistant(网络配置助手)和 Net Manager(网络管理器)都可以配置监听和TNS,但各有不同。

Net Configuration Assistant :新增监听添加并启动服务;修改参数更新并重启服务;

Net Manager :等同于手工修改(用文本编辑器修改)。新增监听不会添加服务;修改参数不会重启服务,需要手动重启。

:可通过“lsnrctl status”命令查看监听启动情况,“lsnrctl start”(lsnrctl stop)可开启或关闭监听,命令“netca”可启动Net Configuration Assistant

Net Configuration Assistant新增监听

listener.ora 默认配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# listener.ora Network Configuration File: D:\oracle12c\product\12.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\oracle12c\product\12.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\oracle12c\product\12.2.0\dbhome_1\bin\oraclr12.dll")
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = zhaolq)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

tnsnames.ora 默认配置

1
2
3
4
5
6
7
8
9
10
11
12
13
# tnsnames.ora Network Configuration File: D:\oracle12c\product\12.2.0\dbhome_1\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)
)
)

Net Manager新增监听

image-20191207181437185

listener.ora (必须)

安装完成后,默认只有 CDB 的监听,PDB 监听需手动添加

image-20191207182718030

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# listener.ora Network Configuration File: D:\oracle12c\product\12.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl.zhaolq.com)
(SID_NAME = ORCL)
)
)

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)

ADR_BASE_LISTENER = D:\oracle12c\product\12.2.0\dbhome_1\log

tnsnames.ora (非必须)

image-20191207182847727

1
2
3
4
5
6
7
8
9
10
11
12
# tnsnames.ora Network Configuration File: D:\oracle12c\product\12.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.zhaolq.com)
)
)

sqlnet.ora (默认即可)

image-20191207182812172

1
2
3
4
5
6
# sqlnet.ora Network Configuration File: D:\oracle12c\product\12.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = D:\oracle12c\product\12.2.0\dbhome_1\log

解决oracle服务占用内存过高(别瞎折腾)

关闭一些开机启动服务

​ 关闭除 OracleServiceORCL 的其他服务。

image-20191130164708461

修改SGA和PGA大小

参考: Oracle内存结构:SGA、PGA、UGA

SGA的大小:一般物理内存20%用作操作系统保留,其他80%用于数据库。

SGA普通数据库可以分配40%-60%之间,PGA可以分配20%-40%之间。

注意:sga_target 不得大于 sga_max_size(一般保持两者相等),否则会导致数据库无法启动。修改后重启数据库生效。

1
2
3
4
SQL> startup # 启动数据库
ORA-00823: Specified value of sga_target greater than sga_max_size
ORA-01078: 处理系统参数失败
SQL>

sga_targetsga_max_size 设置相等时,最好用记事本检查spfile文件内容,确定二者是否真的相等,亲测不一定。

以dba身份登录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#************************************ 设置sga开始 ************************************#
SQL> show parameter sga; # 显示sga(系统全局区)内存分配情况

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 4880M
sga_min_size big integer 0
sga_target big integer 4880M
unified_audit_sga_queue_size integer 1048576

SQL> alter system set sga_target=500m; # 修改sga_target
SQL> alter system set sga_max_size=500m scope=spfile; # 修改sga_max_size

SQL> shutdown immediate; # 关闭数据库
SQL> startup # 启动数据库
ORA-00821: Specified value of sga_target 500M is too small, needs to be at least 564M
ORA-01078: 处理系统参数失败
#-------------------------#
# 恢复spfile文件重新设置
SQL> alter system set sga_target=1024m; # 修改sga_target
SQL> alter system set sga_max_size=1024m scope=spfile; # 修改sga_max_size
#-------------------------#

SQL> show parameter sga; # 查看修改是否生效

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 1G
sga_min_size big integer 0
sga_target big integer 1G
unified_audit_sga_queue_size integer 1048576
#************************************ 设置sga结束 ************************************#

#************************************ 设置pga开始 ************************************#
SQL> show parameter pga; # 显示pga(进程全局区)内存分配情况

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit big integer 3250M
pga_aggregate_target big integer 1625M

SQL> alter system set pga_aggregate_limit=512m scope=spfile;
SQL> alter system set pga_aggregate_target=256m scope=spfile;

SQL> shutdown immediate; # 关闭数据库
SQL> startup # 启动数据库
ORA-00093: pga_aggregate_limit must be between 2048M and 100000G
ORA-01078: 处理系统参数失败
#************************************ 设置pga结束 ************************************#

修改SGA导致用户无法登录问题

1
2
3
4
5
6
7
8
请输入用户名:  system/123456789
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
进程 ID: 0
会话 ID: 0 序列号: 0

请输入用户名:

1、若没有配置网络服务名,可以通过命令 sqlplus /as sysdba 登录到服务器空闲例程;

1
2
3
4
请输入用户名:  / as sysdba
已连接到空闲例程。

SQL>

若配置了网络服务名,则在 D:\oracle12c\product\12.2.0\dbhome_1\network\admin 下找到 listener.ora 文件,查看配置的服务名,登录: sqlplus sys/sys@XXX(网络服务名) as sysdba

2、通过初始化参数文件(pfile)创建/恢复 spfile 文件到database 目录。

参考: Oracle的spfile与pfile

1
create spfile from pfile='D:\oracle12c\admin\orcl\pfile\init.ora.XXXXXXX';

创建 spfile 成功会提示: 文件已创建。

此时重启服务即可登录了。

删除数据库

打开 DBCA ,选择 删除数据库

删除全部数据库的数据库软件目录,只需要保留 product 文件夹,其他均可删除:

image-20191207160805927

删除全部数据库所剩服务:

image-20191207183707104

卸载数据库软件

双击文件: D:\oracle12c\product\12.2.0\dbhome_1\deinstall\deinstall.bat