unix 从命令行执行的sqlplus查询中消除不需要的消息

pu3pd22g  于 2023-02-22  发布在  Unix
关注(0)|答案(4)|浏览(211)

基本上,我试图通过命令行获得“DESC HR.EMPLOYEES”的输出。
我创建了一个名为“file.sql”的文件

DESC hr.employees;
exit;

然后在unix命令行中执行以下命令:
sqlplus用户名/密码@file.sql
我的输出看起来像这样,但是我想删除所有额外的消息,只想看到相关的查询结果。有什么办法可以做到这一点吗?基本上是某种方式来做一个沉默的登录/注销。

SQL*Plus: Release 12.1.0.1.0 Production on Mon Sep 15 19:04:53 2014

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

ERROR:
ORA-28002: the password will expire within 7 days

Last Successful login time: Mon Sep 15 2014 19:04:06 -04:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

 Name                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPLOYEE_ID                   NOT NULL NUMBER(6)
 FIRST_NAME                     VARCHAR2(20)
 LAST_NAME                 NOT NULL VARCHAR2(25)
 EMAIL                     NOT NULL VARCHAR2(25)
 PHONE_NUMBER                       VARCHAR2(20)
 HIRE_DATE                 NOT NULL DATE
 JOB_ID                    NOT NULL VARCHAR2(10)
 SALARY                         NUMBER(8,2)
 COMMISSION_PCT                     NUMBER(2,2)
 MANAGER_ID                     NUMBER(6)
 DEPARTMENT_ID                      NUMBER(4)

Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

我在sqlplus中使用了-s选项,这消除了大多数不需要的消息,但仍然得到ERROR: ORA-28002: the password will expire within 7 days

xzabzqsa

xzabzqsa1#

您确实需要更改密码,但是如果您需要能够同时运行特定脚本,则可以隐藏该消息;但是你必须把凭证移到文件中(在命令行提供凭证是不安全的),所以file.sql会变成:

set termout off
connect username/password
set termout on

desc hr.employees;
exit;

你可以这样运行:

sqlplus -s /nolog @file

/nolog意味着它不会自动尝试连接,并且当它从脚本中尝试连接时,connection命令的输出是隐藏的。
当然,这将隐藏与帐户或数据库可用性相关的任何其他消息,这将使理解故障变得困难;而且你可能真的希望被告知即将到期,这样你就可以更改密码-否则你会在一周后运行这个程序,发现帐户实际上已经到期,这不是你自己可以修复的。(因为你的例子是从15日开始的,你的帐户可能已经到期,或者密码已经重置,当然)。
另一个小问题是,login.sqlglogin.sql中的任何SQL命令都将显示SP2-0640错误,因为它们将尝试在您连接之前运行。
仅仅因为某件事是可能的并不意味着它是一个好主意,而且潜在的问题几乎肯定会超过任何好处。所以,当你看到警告时,真的要修改密码。

mmvthczy

mmvthczy2#

此错误消息...

ORA-28002: the password will expire within 7 days

......就是它所说的那样。该帐户的密码已设置为过期,该用户将无法在下周内登录。
你想摆脱这条信息?很简单:更改密码。
如果出于某种原因(我不知道您是如何使用该帐户的)不希望使用该解决方案,您将需要说服DBA使其恢复有效期,但这可能不那么简单。

e1xvtsh3

e1xvtsh33#

如果你想摆脱PASSWORD EXPIRY消息,那么你可以设置PASSWORD_LIFE_TIME限制为unlimited。

SQL> SELECT PROFILE FROM DBA_USERS WHERE USERNAME='SCOTT'
  2  /

PROFILE
------------------------------
DEFAULT

SQL>
SQL> SELECT RESOURCE_NAME,
  2    LIMIT
  3  FROM DBA_PROFILES
  4  WHERE PROFILE    ='DEFAULT'
  5  AND RESOURCE_NAME='PASSWORD_LIFE_TIME'
  6  /

RESOURCE_NAME                  LIMIT
------------------------------ ------------------------------
PASSWORD_LIFE_TIME             180

对于您的配置文件,请执行:

alter profile <profile_name> limit password_life_time UNLIMITED;

你不应该再收到那条信息了。

pkbketx9

pkbketx94#

添加-S标志对我很有效。

sqlplus -S username/pass@server @sample.sql

相关问题