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的初始化配置,核心围绕“性能”和“安全”两个关键词,记住三个黄金原则:
-
参数优化“按需来” :不盲目调大参数,根据内存大小和业务场景(OLTP/OLAP)调整,参考优化表快速落地。
-
权限管理“最小化” :业务用户只给CONNECT+RESOURCE,禁用默认弱密码,用概要文件强制密码策略。
-
网络配置“双保险” :监听用动态+静态结合,远程连接先查防火墙再查监听,步骤清晰不慌乱。
做好这些初始化配置,你的Oracle 19c就能以一个“健康、安全”的状态迎接业务上线。接下来,我们将进入日常运维阶段,讲解数据库的启停、表空间管理等核心操作,关注我,带你一步步成为Oracle运维高手!
原文链接: https://mp.weixin.qq.com/s/oH7MQZ7WQeg8jxUiX-27JQ
???? 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!
