ORACLE技术专家问答(上)

发表于:2007-05-25来源:作者:点击数: 标签:oracle一问有关问答专家
一问:有关口令 我在Solaris系统上运行 Oracle 8i 8.1.7企业版。我创建了两个 数据库 :SUGAR和TestDb。将两者的remote_login_passwordfile都设置为 “独占(exclusive)”。我试图以SYSDBA身份连接到TestDb,但未能成功。下面是我的做法: 我为什么不能以SY

  一问:有关口令
  我在Solaris系统上运行 Oracle8i 8.1.7企业版。我创建了两个数据库:SUGAR和TestDb。将两者的remote_login_passwordfile都设置为 “独占(exclusive)”。我试图以SYSDBA身份连接到TestDb,但未能成功。下面是我的做法:
   
  我为什么不能以SYSDBA身份连接到TestDb?
  
  答:通常Oracle中的SYS口令与INTERNAL口令是同步的,SYS口令存储于口令文件中。在上述情况下你建立了包含有一个口令的口令文件,而不是使用缺省的 “change_on_install,”这就是问题之所在。
  
  希望下面的方法对你有所帮助。首先,建立一个口令文件,其中包含一个口令,这个口令不要与系统口令匹配:
   
  然后,进入服务器,启动数据库
    现在使用SYS用户的口令,以SYS身份连接:
   
  成功了。现在试着以SYSDBA身份连接:
   
  这里出现了你所说的错误。你的SYS口令为:change_on_install,但口令文件中的口令却是foobar。SYS用户是专用的,以SYSDBA身份连接就像是以INTERNAL连接,你必须使用口令文件中的口令。试试这样做:
   
  并不是每个人都需要使用口令文件中的口令;用户需要使用他们自己的口令。通过授权SYSDBA给SCOTT,你就可以明白这一点:
   
  这个命令将SCOTT以SCOTT的凭证加入到口令文件中。如果你改变了SCOTT的口令,口令文件也会自动同步改变。现在,你可以试试以SYSDBA身份连接SCOTT了:
   
  一切正常。现在可以使用ALTER USER 命令来改变SYS用户的口令。
   
  你还可以用change_on_install,因为改变SYS用户口令将同时改变口令文件中的口令。当你建立了口令文件后,Oracle数据库在其中放入两个账号:SYS和INTERNAL,并将你在命令行中提供的口令作为这两个账户的口令。当你改变数据库中的SYS用户口令时,数据库将冲掉口令文件中的SYS和INTERNAL口令。下面操作将显示口令foobar已经是无效的了:
   
  二问:利用QUERY选项输出数据
  我知道在Oracle8i中,可以使用QUERY有选择地输出表数据。我想用EXP命令来实现,但没有成功。下面是我所写的命令,以及得到的错误信息:
   
  答:操作系统不同,用来指定QUERY=参数的方法也不同。WHERE 语句里面往往有很多特殊的字符,如=.>.<和空格等等。而UNIXWindows操作系统中的外壳命令提示是不欢迎这些字符的,这些字符将被忽略。你应该根据不同的操作系统采用不用的方法。我一般使用带有QUERY选项的参数文件(PARFILE),利用PARFILE,可以不考虑操作系统平台而使用完全相同的方法。
  
  下面给出一个例子。我用select * from all_objects建立了一个表T,我希望输出所有object_id 小于5000的行。在Windows中,必须这样做:
   
  注意:在windows中,需要在WHERE语句的两端使用三个双引号。在UNIX中,必须这样做:
  
  如果使用包含query="where object_id < 5000"的PARFILE文件,我可以在两个系统中使用相同的一个命令:
  
  exp userid=/ tables=t parfile=exp.par
  
  在两种操作系统中,完全相同。这相对于在不同的平台中使用不同的QUERY字符串容易多了。
  

原文转自:http://www.ltesting.net