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

时间:2014-09-23 06:33:15

标签: database oracle unix sqlplus oracle12c

基本上我试图通过命令行获取'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

3 个答案:

答案 0 :(得分:1)

此错误消息......

 ORA-28002: the password will expire within 7 days

...意味着它所说的。帐户的密码设置为过期,该用户将无法在下周登录。

你想摆脱这条消息?简单:更改密码。

如果该解决方案因任何原因而不受欢迎(我不知道您如何使用该帐户),则需要说服DBA将其取消。这可能不那么简单。

答案 1 :(得分:1)

您显然需要更改密码,但如果您有一个场景,您需要在此期间运行特定脚本,则可以隐藏该消息;但您必须将凭据移动到文件中。 (无论如何,在命令行上提供它们是不安全的)。所以file.sql会变成:

set termout off
connect username/password
set termout on

desc hr.employees;
exit;

然后你将其视为:

sqlplus -s /nolog @file

/nolog表示它不会自动尝试连接,当它从脚本中执行此操作时,连接命令的输出将被隐藏。

当然,这会隐藏与帐户或数据库可用性相关的任何其他消息,这将使得难以理解失败;并且你可能真的想被告知即将到期,所以你可以更改密码 - 否则你将在一周之后运行它并发现该帐户实际上已过期,这不是你可以解决的问题你自己。 (由于您的示例是从15日开始,您的帐户可能已经过期,或者当然重置了密码)。

另一个小问题是,login.sqlglogin.sql中的任何SQL命令都会显示SP2-0640错误,因为它们会在您连接之前尝试运行。

仅仅因为某些事情是可能的并不意味着它是一个好主意,潜在的问题几乎肯定超过任何优势。所以,当你看到警告时,请更改密码。

答案 2 :(得分:0)

如果您要删除PASSWORD EXPIRY消息,则可以将PASSWORD_LIFE_TIME限制设置为无限制。请按照以下步骤操作:

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;

你不应该再收到消息。