Oracle database 清理日志文件 (listener.log/ alert log)

本文详细指导如何在Oracle环境下清理listener.log日志,包括停止与启动监听服务、复制日志、清空日志并执行alterlog命令删除过期警告。涉及的步骤包括切换用户、设置日志状态、文件操作和定期维护任务。

监听日志清理(listener.log)

以oracle用户登录,切换到以下目录

[oracle@oracledb /]$ cd $ORACLE_BASE/diag/tnslsnr/服务器用户名/listener/trace/

停止监听服务进程(tnslsnr)记录日志

[oracle@oracledb trace]$ lsnrctl set log_status off;

将监听日志文件listener.log复制一份,以listener.log.yyyymmdd格式命名

[oracle@oracledb trace]$ cp listener.log listener.log.20221110

将监听日志文件listener.log清空

[oracle@oracledb trace]$ cat /dev/null > listener.log

echo /dev/null listener.log

开启监听服务进程(tnslsnr)记录日志

[oracle@oracledb trace]$ lsnrctl set log_status on;

alter 日志清理(alter log )

找到 alter 目录

cd /u01/app/grid/diag/tnslsnr/dm01dbadm02/listener/alert

删除7天之前的xml文件

find . -name "*xml" -mtime +7 |xargs rm
<think>嗯,用户遇到了ORA-01017错误,也就是用户名或密码无效的问题。首先,我需要根据他们提供的引用资料和之前的回答来整理解决方案。引用[1]提到的是登录被拒绝,引用[2]则涉及到密码修改的问题,特别是大小写和特殊字符的限制,还有引用[3]关于Oracle客户端的版本兼容性。用户之前的问题是关于NineData连接内网Oracle的配置,可能是在配置过程中出现了认证问题。 首先,我应该检查用户名和密码的正确性。引用[2]指出,FND不支持Oracle账户的区分大小写密码,数据库密码会被转换为大写,所以用户可能在输入密码时用了小写,而实际密码是大写的。比如,如果密码是“Secret123”,但用户输入了“secret123”,就会出错。需要确认密码是否正确,特别是大小写是否一致。 接下来是特殊字符的问题。引用[2]提到密码只能包含字母数字、_、$、#,但使用$和#不推荐。如果用户密码中有其他特殊字符,比如@或!,可能会导致ORA-01017错误。需要检查密码是否符合这些规则。 然后是权限问题。用户可能创建了一个新用户,但没有授予足够的权限,比如CREATE SESSION。根据之前的回答,用户应该授予最小权限,比如CREATE SESSION和SELECT ANY DICTIONARY。如果权限不足,登录也会失败,所以需要检查用户的权限设置。 另外,引用[3]提到客户端版本兼容性问题。如果用户使用的是旧版本的客户端(比如10g之前或JDBC thin客户端),可能无法通过密码认证。需要确认客户端版本是否兼容,特别是如果启用了11g的安全特性,可能需要更新客户端或调整安全配置。 还要考虑密码文件的问题。如果数据库使用密码文件认证,比如远程管理员登录,需要检查密码文件是否存在,用户是否被正确添加进去。可以使用orapwd工具重新生成密码文件,并确保用户有SYSDBA或SYSOPER权限。 网络和监听器配置也可能导致问题。比如监听器是否配置正确,是否绑定了正确的IP和端口。引用[1]中的示例修改了listener.ora的密码和绑定地址,如果监听器配置错误,可能导致连接被拒绝,进而引发认证问题。 还有密码过期的问题。如果用户密码过期,可能需要DBA重置密码。检查dba_users视图中的account_status字段,确认账户是否被锁定或过期。 此外,引用[2]中提到“Hard to Guess”功能激活时,密码不能有连续重复字符。如果用户设置的密码有类似问题,可能需要调整密码策略或修改密码。 最后,可能需要检查日志文件,比如监听器日志和数据库alert.log,查看具体的错误信息,帮助定位问题。例如,监听器日志可能显示连接尝试的来源IP和错误详情,而alert.log可能有更详细的内部错误信息。 综合以上几点,应该分步骤逐一排查,从最简单的用户名密码错误开始,到权限、客户端兼容性、密码策略等,逐步排除可能的原因,最终解决ORA-01017错误。</think>### ORA-01017: 用户名/密码无效问题排查与解决指南 以下是根据 **Oracle 认证机制** 和 **引用内容[1][2][3]** 的完整排查流程: --- #### 一、基础验证(90%问题根源) 1. **区分大小写问题** - **Oracle 11g+ 特性**:若数据库版本 ≥ 11g,且 `SEC_CASE_SENSITIVE_LOGON=TRUE`(默认值),则密码区分大小写[^3]。 ```sql -- 检查参数 SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON; -- 临时关闭(需重启) ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE SCOPE=SPFILE; ``` - **FNDCPASS 限制**:引用[2]明确指出,FND模块(如EBS)强制要求密码全大写,输入时需保持一致。例如: ```bash # 错误:密码包含小写 FNDCPASS apps/<密码> 0 Y SYSTEM/XXINT NewPass1 # 正确:全大写 FNDCPASS apps/<密码> 0 Y SYSTEM/XXINT NEWPASS1 ``` 2. **特殊字符转义** - 根据引用[2],Oracle仅允许 `_`, `$`, `#`(不推荐),若密码包含其他符号(如 `@`, `!`)需用双引号包裹: ```sql ALTER USER ninedata_proxy IDENTIFIED BY "N1n3@SecurePass"; -- 错误 ALTER USER ninedata_proxy IDENTIFIED BY "N1n3#SecurePass"; -- 正确(但仍需符合其他规则) ``` 3. **密码复杂度规则** - **Hard to Guess**:若启用(常见于EBS),密码中不能有连续重复字符(如 `aa`)[^2]。 ```bash # 检查是否启用 SELECT * FROM dba_profiles WHERE resource_name='PASSWORD_VERIFY_FUNCTION'; ``` --- #### 二、权限与账户状态 1. **验证用户权限** - 确保用户拥有 `CREATE SESSION` 权限: ```sql SELECT * FROM dba_sys_privs WHERE grantee = 'NINEDATA_PROXY'; -- 授权语句 GRANT CREATE SESSION TO ninedata_proxy; ``` 2. **检查账户锁定/过期** ```sql SELECT username, account_status, lock_date, expiry_date FROM dba_users WHERE username = 'NINEDATA_PROXY'; -- 解锁用户 ALTER USER ninedata_proxy ACCOUNT UNLOCK; -- 重置过期密码 ALTER USER ninedata_proxy IDENTIFIED BY <新密码>; ``` --- #### 三、数据库配置与兼容性 1. **密码文件验证** - **远程管理员登录**:若使用 `SYSDBA`/`SYSOPER` 连接,需验证密码文件: ```bash # 检查密码文件存在性 ls $ORACLE_HOME/dbs/orapw$ORACLE_SID # 重建密码文件 orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=<sys密码> entries=10 ``` 2. **客户端兼容性问题** - 根据引用[3],若数据库版本 ≥ 11g 且启用新安全协议,需确保客户端版本兼容: ```bash # JDBC驱动版本 ≥ 11.2.0.4 # OCI客户端 ≥ 10g ``` - **临时解决方案**(仅限测试环境): ```sql ALTER SYSTEM SET SQLNET.ALLOWED_LOGON_VERSION=8; -- 兼容旧客户端 ``` --- #### 四、网络与监听器配置 1. **监听器日志分析** ```bash tail -f $ORACLE_HOME/network/log/listener.log -- 典型错误示例: TNS-01169: The listener has not recognized the password ``` - **修复方法**: ```bash # 修改 listener.ora 添加密码 PASSWORDS_LISTENER = (PASSWORD = <强密码>) lsnrctl reload ``` 2. **服务名/SID 匹配** - 确认连接字符串中的服务名与数据库实际配置一致: ```sql SELECT value FROM v$parameter WHERE name='service_names'; ``` --- #### 五、高级排查工具 1. **10046跟踪(定位认证失败点)** ```sql ALTER SYSTEM SET EVENTS '01017 trace name context forever, level 4'; -- 复现错误后检查跟踪文件 SELECT value FROM v$diag_info WHERE name='Default Trace File'; ``` 2. **密码哈希比对** ```sql SELECT name, password FROM sys.user$ WHERE name = 'NINEDATA_PROXY'; -- 生成新密码哈希 ALTER USER ninedata_proxy IDENTIFIED BY <新密码>; SELECT name, password FROM sys.user$ WHERE name = 'NINEDATA_PROXY'; ``` --- ### 关键修复步骤总结 | 步骤 | 操作 | 预期结果 | |------|------|----------| | 1 | 使用全大写密码(针对FND模块) | 绕过引用[2]的大小写限制 | | 2 | 检查 `dba_users.account_status` | 确认账户未锁定/过期 | | 3 | 验证 `CREATE SESSION` 权限 | 确保基础连接权限 | | 4 | 检查 `listener.ora` 密码配置 | 避免监听器认证失败 | | 5 | 更新JDBC驱动或OCI客户端 | 解决引用[3]的兼容性问题 | --- ### 相关问题 1. 如何通过日志快速定位ORA-01017的具体原因? 2.Oracle RAC环境中,ORA-01017错误排查有何特殊注意事项? 3. 使用Oracle Wallet替代密码认证时如何避免ORA-01017? --- ### 引用说明 [^1]: ORA-01017 通常表示用户名或密码不匹配,需结合大小写规则和权限综合排查。 [^2]: FND模块对密码格式有特殊限制,需严格遵守大写和字符规则。 [^3]: 客户端版本与数据库安全协议不兼容会导致认证失败,建议升级或调整参数。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为什么不问问神奇的海螺呢丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值