ITPub博客

首页 > 数据库 > Oracle > 03 Oracle 19c初始化配置——让数据库“好用又安全”

03 Oracle 19c初始化配置——让数据库“好用又安全”

原创 Oracle 作者:shuchaoyang 时间:2026-01-20 18:13:54 0 删除 编辑

03 Oracle 19c初始化配置——让数据库“好用又安全” 一、核心参数优化:给数据库“调对马力” 1.1 先搞懂:spfile与pfile的区别与修改逻辑 关键操作:参数文件的相互转换与修改方法 1.2 19c关键参数优化:4个核心参数+调整依据 1.2.1 内存参数:sga_target与pga_aggregate_target(决定性能的核心) 1.2.2 连接数参数:processes与sessions(避免“连不上”) 1.2.3 游标参数:open_cursors(解决“游标不足”) 1.3 实操工具:初始化参数优化参考表 二、用户与权限管理:筑牢数据库“安全防线” 2.1 第一步:修改默认用户密码(必须做!) 2.1.1 sys与system用户密码修改 2.1.2 解锁并修改其他默认用户(可选) 2.2 核心操作:创建业务用户并分配权限 2.2.1 角色权限说明(不用记,直接用) 2.2.2 业务用户创建与权限分配实操 2.3 安全加固:配置密码策略(防弱密码) 2.3.1 创建自定义概要文件(密码策略) 2.3.2 将概要文件应用到用户 2.4 实操工具:用户权限分配脚本模板 三、监听与网络配置:打通数据库“连接通道” 3.1 listener.ora优化:增加静态监听(更稳定) 3.1.1 找到监听配置文件 3.1.2 优化配置(动态+静态监听) 3.1.3 重启监听使配置生效 3.2 tnsnames.ora配置:实现“一键连接” 3.2.1 单实例连接配置 3.2.2 多实例连接配置(适合多实例服务器) 3.3 远程连接故障排查:3步定位问题 3.3.1 步骤1:检查服务器防火墙(最常见原因) 3.3.2 步骤2:检查监听状态(服务名是否匹配) 3.3.3 步骤3:检查数据库服务状态(实例是否启动) 3.4 常见故障案例 四、初始化配置的“黄金原则”

03 Oracle 19c初始化配置——让数据库“好用又安全”

“数据库装好了,但连不上”,“刚上线的业务突然报‘游标不足’”,“默认密码被黑客扫了”……不少人在Oracle 19c安装完成后,就急着上线业务,却忽略了关键的初始化配置。这些看似细小的操作,恰恰是决定数据库“好不好用”,“安不安全”的基石。

今天这篇指南,就带你搞定Oracle 19c的初始化配置——从核心参数优化让数据库跑的更快,到用户权限管理筑牢安全防线,再到网络配置打通连接通道,每一步都配具体命令和避坑提示,让你的数据库从“能用”升级到“好用又安全”。

一、核心参数优化:给数据库“调对马力”

Oracle的初始化参数就像数据库的“运行手册”,决定了内存分配、连接数限制等核心能力。默认参数往往是“通用模板”,无法适配具体业务场景,必须针对性优化。首先得搞懂参数文件的两种形式,再动手调整关键参数。

1.1 先搞懂:spfile与pfile的区别与修改逻辑

Oracle的初始化参数存储在两种文件中,修改方式完全不同,千万别搞混:

  • spfile(服务器参数文件) :二进制文件,Oracle 19c默认使用,支持动态修改(不用重启数据库),修改后即时生效或下次启动生效,是生产环境的首选。

  • pfile(文本参数文件) :文本文件,可直接用vi编辑,修改后必须重启数据库才能生效,适合特殊场景(如spfile损坏时恢复)。

关键操作:参数文件的相互转换与修改方法


-- 1. 查看当前使用的参数文件(sqlplus登录后执行)

show parameter spfile ;
-- 若VALUE列显示路径,说明用spfile;为空则用pfile

-- 2. spfile转pfile(备份或修改时用)
create pfile = '/u01/app/oracle/pfile.ora' from spfile ;

-- 3. pfile转spfile(修改pfile后生效)
create spfile from pfile = '/u01/app/oracle/pfile.ora' ;

-- 4. 动态修改spfile参数(生产常用,分两种生效方式)
-- 方式1:即时生效,且下次启动保持(推荐)
alter system set 参数名 =值 scope = both ;
-- 方式2:仅下次启动生效(适合无法即时重启的场景)
alter system set 参数名 =值 scope =spfile ;
-- 方式3:仅当前实例生效,重启丢失(测试用)
alter system set 参数名 =值 scope =memory ;

避坑提示:修改spfile时必须指定scope(作用范围),否则会报错;如果参数不支持动态修改(如db_block_size),只能用scope=spfile,修改后重启数据库。

1.2 19c关键参数优化:4个核心参数+调整依据

不是所有参数都需要改,重点优化以下4个高频参数,就能解决80%的初期性能问题。调整依据完全结合业务场景,不用死记硬背。

1.2.1 内存参数:sga_target与pga_aggregate_target(决定性能的核心)

SGA(系统全局区)和PGA(程序全局区)是Oracle的内存核心,分配不合理会直接导致卡顿。19c支持自动内存管理,但手动指定范围更稳妥。

  • sga_target :SGA最大内存,用于存储数据缓存、共享SQL等,一般设为物理内存的40%-50%。

  • pga_aggregate_target :所有进程的PGA总和,用于排序、哈希连接等,一般设为物理内存的20%-30%。

示例:32GB内存的服务器(生产环境),优化配置如下:


-- 查看当前内存配置

show parameter sga_target ;
show parameter pga_aggregate_target ;

-- 动态修改(即时生效,重启保持)
alter system set sga_target = 16G scope = both ;   -- 32G*50%=16G
alter system set pga_aggregate_target = 8G scope = both ;   -- 32G*25%=8G

-- 关键:开启自动内存管理(让Oracle在指定范围内动态调整)
alter system set memory_target = 24G scope =spfile ;   -- SGA+PGA=24G,留8G给OS
alter system set memory_max_target = 24G scope =spfile ;

-- 修改后重启数据库(memory_target需重启生效)
shutdown immediate ;
startup ;

调整依据:OLTP场景(如电商交易)PGA可稍小(20%),OLAP场景(如报表统计)排序任务多,PGA需增大(30%-40%)。

1.2.2 连接数参数:processes与sessions(避免“连不上”)

processes控制Oracle的最大进程数,sessions控制最大会话数(默认是processes的1.1倍+5),默认值(300)远不够生产环境用,很容易报“超出最大会话数”错误。


-- 查看当前连接数配置

show parameter processes ;
show parameter sessions ;

-- 查看当前连接数使用情况(避免盲目调大)
select count ( * ) from v$session ;
select count ( * ) from v$process ;

-- 修改(需重启生效)
alter system set processes = 1000 scope =spfile ;   -- 生产环境建议1000-2000
alter system set sessions = 1105 scope =spfile ;   -- 1000*1.1+5=1105

-- 重启数据库
shutdown immediate ;
startup ;

案例:某电商系统促销时,突然大量用户连不上数据库,查v$session发现连接数达到300(默认上限),修改processes为1000后恢复正常。

1.2.3 游标参数:open_cursors(解决“游标不足”)

open_cursors控制每个会话的最大打开游标数,游标是SQL执行的“临时容器”,默认值(300)太小,复杂业务或批量操作时会报“ORA-01000: 超出打开游标的最大数”。


-- 查看当前游标配置

show parameter open_cursors ;

-- 查看游标使用情况(判断是否需要调大)
select o .sid , osuser , machine , count ( * ) as open_cursors
from v$open_cursor o
join v$session s on o .sid = s .sid
group by o .sid , osuser , machine
having count ( * ) > 100 ;   -- 找出游标使用过多的会话

-- 修改(即时生效)
alter system set open_cursors = 1000 scope = both ;   -- 生产环境建议800-1500

1.3 实操工具:初始化参数优化参考表

不同内存配置的服务器,参数优化参考如下,直接对应修改即可:

服务器内存 sga_target pga_aggregate_target processes open_cursors 适用场景
8GB(测试) 3GB 1.5GB 300 500 开发测试、小型应用
16GB(中小生产) 8GB 4GB 800 800 日活1万以下业务
32GB(中大型生产) 16GB 8GB 1000 1000 日活10万以下业务
64GB及以上(大型生产) 32GB 16GB 2000 1500 高并发、大数据量业务

二、用户与权限管理:筑牢数据库“安全防线”

“用sys用户直接跑业务”“默认密码123456不修改”——这些操作都是数据库的“安全漏洞”。Oracle的权限体系非常完善,做好用户管理,才能避免数据泄露或误操作。

2.1 第一步:修改默认用户密码(必须做!)

Oracle安装后有两个核心默认用户,初始密码要么是安装时设置的(图形化安装),要么是随机生成的(静默安装),必须第一时间修改,尤其是sys和system。

2.1.1 sys与system用户密码修改

sys用户是数据库最高权限用户,必须用sysdba身份登录修改:


-- 登录sys用户

sqlplus / as sysdba

-- 修改sys用户密码(新密码设为Sys_123#,符合复杂度)
alter user sys identified by Sys_123 #;

-- 修改system用户密码(新密码设为System_123#)
alter user system identified by System_123 #;

-- 验证:用新密码登录
conn sys/Sys_123 # as sysdba;
conn system/System_123 #;

2.1.2 解锁并修改其他默认用户(可选)

Oracle还有scott、hr等示例用户,默认是锁定的,若需要使用,先解锁再改密码:


-- 解锁hr用户

alter user hr account unlock ;

-- 修改hr用户密码
alter user hr identified by Hr_123 #;

2.2 核心操作:创建业务用户并分配权限

绝对不能用sys/system跑业务,必须创建独立的业务用户,并基于“最小权限原则”分配权限。Oracle的角色(如CONNECT、RESOURCE)能快速实现权限管理。

2.2.1 角色权限说明(不用记,直接用)

  • CONNECT角色 :基础连接权限,包含登录数据库、创建会话等,是业务用户的必备权限。

  • RESOURCE角色 :资源使用权限,包含创建表、索引、存储过程等,适合开发或业务用户。

  • DBA角色 :超级权限,仅给DBA使用,绝对不能分配给业务用户。

2.2.2 业务用户创建与权限分配实操

示例:创建电商业务用户ec_user,分配连接和资源权限,并指定默认表空间为EC_DATA(需提前创建表空间):


-- 1. 登录sys用户

sqlplus / as sysdba

-- 2. 创建业务用户(指定默认表空间和临时表空间)
create user ec_user identified by Ec_123 #
default tablespace EC_DATA
temporary tablespace TEMP ;

-- 3. 分配角色权限(核心:CONNECT+RESOURCE)
grant connect , resource to ec_user ;

-- 4. 额外权限:允许查看执行计划(按需分配)
grant select on v_$sql_plan to ec_user ;

-- 5. 限制权限:禁止删除其他用户表(最小权限原则)
revoke drop any table from ec_user ;

-- 6. 验证:用业务用户登录并创建表
conn ec_user/Ec_123 #;
create table goods (id number , name varchar2 ( 50 )) ;   -- 能成功创建,说明权限正常

2.3 安全加固:配置密码策略(防弱密码)

仅靠人工设置强密码不够,还需要通过“概要文件”配置密码策略,强制用户使用复杂密码、定期修改密码。

2.3.1 创建自定义概要文件(密码策略)


-- 登录sys用户

sqlplus / as sysdba

-- 创建概要文件PWD_POLICY,设置密码策略
create profile PWD_POLICY limit
password_life_time 90   -- 密码90天过期,需修改
password_grace_time 7   -- 过期后有7天宽限期
password_reuse_time 365   -- 365天内不能重复使用旧密码
password_complexity_check true   -- 启用密码复杂度检查
failed_login_attempts 5   -- 连续5次登录失败锁定用户
password_lock_time 1   -- 锁定1天后自动解锁;

-- 查看概要文件配置
select profile , resource_name , limit from dba_profiles where profile = 'PWD_POLICY' ;

2.3.2 将概要文件应用到用户


-- 应用到现有业务用户

alter user ec_user profile PWD_POLICY ;

-- 应用到新创建的用户(创建时指定)
create user order_user identified by Order_123 # profile PWD_POLICY;

-- 测试:设置弱密码会报错
alter user ec_user identified by 123456 ;
-- 报错:ORA-28003: 密码验证失败,密码不符合策略要求

2.4 实操工具:用户权限分配脚本模板

以下脚本可直接复用,只需修改用户、密码、表空间等参数:


------------------------------------------------------

-- Oracle 19c 业务用户创建与权限分配脚本模板
-- 适用场景:新业务上线,创建独立业务用户
-- 作者:Oracle运维笔记
------------------------------------------------------
-- 1. 登录sys用户(执行前替换密码)
-- sqlplus sys/你的sys密码 as sysdba;

-- 2. 变量定义(根据实际情况修改)
define USER_NAME = 'crm_user' ;   -- 业务用户名
define USER_PWD = 'Crm_123#' ;   -- 业务用户密码
define DEFAULT_TS = 'CRM_DATA' ; -- 默认表空间
define TEMP_TS = 'TEMP' ;         -- 临时表空间
define PROFILE = 'PWD_POLICY' ;   -- 密码策略概要文件

-- 3. 创建用户
create user &USER_NAME identified by &USER_PWD
default tablespace &DEFAULT_TS
temporary tablespace &TEMP_TS
profile & PROFILE ;

-- 4. 分配基础权限
grant connect , resource to &USER_NAME ;

-- 5. 分配额外权限(按需添加)
-- 允许查询系统视图
grant select on v_$session to &USER_NAME ;
grant select on v_$process to &USER_NAME ;
-- 允许执行存储过程
grant create procedure to &USER_NAME ;

-- 6. 回收危险权限
revoke drop any table from &USER_NAME ;
revoke drop any index from &USER_NAME ;

-- 7. 验证用户
select username , account_status , default_tablespace
from dba_users where username = upper ( '&USER_NAME' ) ;

echo '用户&USER_NAME创建完成,权限分配完毕!'
------------------------------------------------------

三、监听与网络配置:打通数据库“连接通道”

“数据库本地能连,远程连不上”——这是初始化配置中最常见的网络问题。核心原因无非是监听没配置好、防火墙没关、服务名不匹配,逐一排查就能解决。

3.1 listener.ora优化:增加静态监听(更稳定)

Oracle默认使用动态监听,但动态监听依赖数据库实例注册,实例未启动时监听中看不到服务;静态监听不依赖实例,更适合远程连接和故障排查,建议两者结合配置。

3.1.1 找到监听配置文件

listener.ora文件默认路径:$ORACLE_HOME/network/admin/listener.ora,用oracle用户编辑。

3.1.2 优化配置(动态+静态监听)


vi 
$ORACLE_HOME/network/admin/listener.ora


# 优化后的完整配置
LISTENER =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = db-server)(PORT = 1521))   -- 服务器主机名或IP
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
   )
 )

# 静态监听配置(关键)
SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (GLOBAL_DBNAME = ORCL)   -- 数据库服务名
     (SID_NAME = ORCL)       -- 实例名
     (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)   -- Oracle安装目录
   )
 )

# 监听日志配置(可选,避免日志过大)
LOG_DIRECTORY_LISTENER = /u01/app/oracle/diag/tnslsnr/db-server/listener
LOG_FILE_LISTENER = listener.log
TRACE_LEVEL_LISTENER = OFF

3.1.3 重启监听使配置生效


-- 停止监听

lsnrctl stop

-- 启动监听
lsnrctl start

-- 查看监听状态(确认静态服务已加载)
lsnrctl status

# 正常输出会包含:
# Service "ORCL" has 2 instance(s).
#   Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service...  -- 静态监听
#   Instance "ORCL", status READY, has 1 handler(s) for this service...   -- 动态监听

3.2 tnsnames.ora配置:实现“一键连接”

tnsnames.ora是本地的“服务名映射文件”,配置后不用记复杂的连接串,直接用“服务名”就能连接数据库,还支持多实例连接。

3.2.1 单实例连接配置


vi 
$ORACLE_HOME/network/admin/tnsnames.ora


# 单实例配置(ORCL服务名)
ORCL =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))   -- 服务器IP
   )
   (CONNECT_DATA =
     (SERVICE_NAME = ORCL)   -- 数据库服务名,必须和监听中一致
   )
 )

连接测试:sqlplus ec_user/Ec_123#@ORCL,成功登录说明配置正常。

3.2.2 多实例连接配置(适合多实例服务器)

若服务器上有ORCL和ORCLTEST两个实例,配置如下:


-- tnsnames.ora配置

ORCL =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
   (CONNECT_DATA = (SERVICE_NAME = ORCL))
 )

ORCLTEST =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
   (CONNECT_DATA = (SERVICE_NAME = ORCLTEST))
 )

-- 连接不同实例
sqlplus sys/Sys_123 #@ORCL as sysdba;  -- 连接ORCL实例
sqlplus sys/Sys_123 #@ORCLTEST as sysdba;  -- 连接ORCLTEST实例

3.3 远程连接故障排查:3步定位问题

远程连接失败不用慌,按以下步骤排查,99%的问题都能解决:

3.3.1 步骤1:检查服务器防火墙(最常见原因)

远程连接需要开放1521端口,生产环境若不能关闭防火墙,就开放端口:


# 1. 检查防火墙状态(root用户)

systemctl status firewalld

# 2. 若开启,开放1521端口
firewall-cmd --zone =public --add-port = 1521/tcp --permanent
firewall-cmd --reload

# 3. 测试端口是否能通(本地电脑执行,Windows用telnet,Linux用nc)
telnet 192.168.1.100 1521   # 通的话会显示“Connected to 192.168.1.100”

3.3.2 步骤2:检查监听状态(服务名是否匹配)


# 1. 服务器上执行,查看监听中的服务名

lsnrctl status | grep "Service"

# 2. 对比客户端tnsnames.ora中的SERVICE_NAME,必须完全一致
# 错误示例:监听中是ORCL,客户端写ORCL123,会报“ORA-12154: 无法解析指定的连接标识符”

3.3.3 步骤3:检查数据库服务状态(实例是否启动)


# 服务器上登录数据库,检查实例状态

sqlplus / as sysdba
select status from v$instance ;   -- 正常应为OPEN

# 若实例未启动,启动实例
startup ;

3.4 常见故障案例

  • 案例1:远程连接报“ORA-12154” ——原因:tnsnames.ora中服务名写错,或监听中无该服务;解决:核对服务名,重启监听。

  • 案例2:远程连接报“ORA-12541: TNS:无监听程序” ——原因:监听未启动或端口错误;解决:启动监听,核对端口。

  • 案例3:远程连接报“ORA-12519” ——原因:数据库连接数满了;解决:增大processes参数。

四、初始化配置的“黄金原则”

Oracle 19c的初始化配置,核心围绕“性能”和“安全”两个关键词,记住三个黄金原则:

  1. 参数优化“按需来” :不盲目调大参数,根据内存大小和业务场景(OLTP/OLAP)调整,参考优化表快速落地。

  2. 权限管理“最小化” :业务用户只给CONNECT+RESOURCE,禁用默认弱密码,用概要文件强制密码策略。

  3. 网络配置“双保险” :监听用动态+静态结合,远程连接先查防火墙再查监听,步骤清晰不慌乱。

做好这些初始化配置,你的Oracle 19c就能以一个“健康、安全”的状态迎接业务上线。接下来,我们将进入日常运维阶段,讲解数据库的启停、表空间管理等核心操作,关注我,带你一步步成为Oracle运维高手!

原文链接: https://mp.weixin.qq.com/s/oH7MQZ7WQeg8jxUiX-27JQ

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧!


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/291614/viewspace-3108441/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303468