分享
 
 
 

ORACLE技术问题专家问答五则

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

一问:有关口令

我在Solaris系统上运行 Oracle8i 8.1.7企业版。我创建了两个数据库:SUGAR和TestDb。将两者的remote_login_passWordfile都设置为 “独占(exclusive)”。我试图以SYSDBA身份连接到TestDb,但未能成功。下面是我的做法:

$sqlplus /nolog

SQL conn sys/change_on_install@testdb

Connected.(已连接)

SQL select * from v$pwfile_users;

username sysdb sysop

-----------------------------------------

internal true true

sys true true

SQL conn sys/change_on_install@testdb as

sysdba

ERROR(错误)

ORA-01017: invalid username/password; logon

denied(无效的用户名/口令,登录被拒绝)

Warning: You are on longer connected to

ORACLE(警告:你已经与ORACLE断开连接)

我为什么不能以SYSDBA身份连接到TestDb?

答:通常Oracle中的SYS口令与INTERNAL口令是同步的,SYS口令存储于口令文件中。在上述情况下你建立了包含有一个口令的口令文件,而不是使用缺省的 “change_on_install,”这就是问题之所在。

希望下面的方法对你有所帮助。首先,建立一个口令文件,其中包含一个口令,这个口令不要与系统口令匹配:

$ orapwd file=orapw password=Foobar

entries=40

然后,进入服务器,启动数据库:

$ svrmgr

SVRMGR connect internal

Connected.(已连接)

SVRMGR startup

ORACLE instance started.(ORACLE 实例已启动)

Total System Global Area (系统全局区域大小)

193073136 bytes

Fixed Size (固定大小)

69616 bytes

Variable Size (可变大小)

141639680 bytes

Database Buffers (数据库缓冲区)

45056000 bytes

Redo Buffers (重做缓冲区)

6307840 bytes

Database mounted. (数据库已加载)

Database opened.数据库已打开。

现在使用SYS用户的口令,以SYS身份连接:

SVRMGR connect sys/change_on_install@ora81

Connected.(已连接)

成功了。现在试着以SYSDBA身份连接:

SVRMGR connect sys/change_on_install@ora81

as sysdba;

ORA-01017: invalid username/password; logon

denied(无效的用户名/口令;登录被拒绝)

这里出现了你所说的错误。你的SYS口令为:change_on_install,但口令文件中的口令却是foobar。SYS用户是专用的,以SYSDBA身份连接就像是以INTERNAL连接,你必须使用口令文件中的口令。试试这样做:

SVRMGR— connect sys/foobar@ora81 as sysdba;

Connected.(已连接)

并不是每个人都需要使用口令文件中的口令;用户需要使用他们自己的口令。通过授权SYSDBA给SCOTT,你就可以明白这一点:

SVRMGR grant sysdba to scott;

Statement processed.(已处理)

这个命令将SCOTT以SCOTT的凭证加入到口令文件中。假如你改变了SCOTT的口令,口令文件也会自动同步改变。现在,你可以试试以SYSDBA身份连接SCOTT了:

SVRMGR connect scott/tiger@ora81 as sysdba;

Connected.(已连接)

一切正常。

现在可以使用ALTER USER 命令来改变SYS用户的口令。

SVRMGR alter user sys identified by

change_on_install;

Statement processed.(已成功更改)

SVRMGR≫ connect sys/change_on_install@ora81

as sysdba;

Connected.(已连接)

你还可以用change_on_install,因为改变SYS用户口令将同时改变口令文件中的口令。当你建立了口令文件后,Oracle数据库在其中放入两个账号:SYS和INTERNAL,并将你在命令行中提供的口令作为这两个账户的口令。当你改变数据库中的SYS用户口令时,数据库将冲掉口令文件中的SYS和INTERNAL口令。下面操作将显示口令foobar已经是无效的了:

SVRMGR connect sys/foobar@ora81 as sysdba;

ORA-01017: invalid username/password; logon

denied(无效的用户名/口令,登录被拒绝)

二问:利用QUERY选项输出数据

我知道在Oracle8i中,可以使用QUERY有选择地输出表数据。我想用EXP命令来实现,但没有成功。下面是我所写的命令,以及得到的错误信息:

exp ddd/ddd file=/dbf/u11/customer.dmp

tables=AASC.AST_CUSTOMER_KEEP

query=\'where CUA_TRANS_DTS add_months\(sysdate, -6\)\'

table_export[2]: CUA_TRANS_DTS: not found.(没有找到)

答:操作系统不同,用来指定QUERY=参数的方法也不同。WHERE 语句里面往往有很多非凡的字符,如=..

下面给出一个例子。我用select * from all_objects建立了一个表T,我希望输出所有object_id 小于5000的行。在Windows中,必须这样做:

C:\expexp userid=tkyte/tkyte tables=t

query="""where object_id

注重:在windows中,需要在WHERE语句的两端使用三个双引号。在UNIX中,必须这样做:

$ exp userid=/ tables=t query=\"where

object_id exp userid=/ tables=t parfile=exp.par

假如使用包含query="where object_id

exp userid=/ tables=t parfile=exp.par

在两种操作系统中,完全相同。这相对于在不同的平台中使用不同的QUERY字符串轻易多了。

三问:DBMS_RANDOM

您能否告诉我写一个能产生大于0小于1的随机数的随机数产生器的最好方法?

答:Oracle8 8.0版介绍了DBMS_RANDOM包,Oracle8i 8.1.6版介绍了DBMS_RANDOM包的新功能,但Oracle8i 文档中没有具体全面介绍其功能。幸运的是:有一个新的DBMS_RANDOM包函数能够返回0-1之间的随机数。这个新函数是:

FUNCTION value RETURN NUMBER;

FUNCTION value (low IN NUMBER, high IN

NUMBER) RETURN NUMBER;

FUNCTION normal RETURN NUMBER;

FUNCTION string (opt char, len NUMBER)

RETURN VARCHAR2;

VALUE函数的第一种形式返回一个大于或等于0且小于1的随机数;第二种形式返回一个大于或等于LOW,小于HIGH的随机数。下面是其用法的一个示例:

SQL select dbms_random.value,

dbms_random.value(55,100)

2 from dual;

VALUE DBMS_RANDOM.VALUE(55,100)

--------------- -----------------------------

.782821936 79.6367038

NORMAL函数返回服从正态分布的一组数。此正态分布标准偏差为1,期望值为0。这个函数返回的数值中有68%是介于-1与+1之间,95%介于-2与+2之间,99%介于-3与+3之间。事实上,这就是你在清单1中所看到的。

最后,是STRING函数。它返回一个长度达60个字符的随机字符串。参数OPT可以是清单2显示的值中的任何一个单个字符。

关于这些函数及DBMS_RANDOM包的文件都包含在SQLPlus中:

select text

from all_source

where name = 'DBMS_RANDOM'

and type = 'PACKAGE' order by line;

四问:连接次序与谓词求值

在下面的查询中,WHERE 语句的哪一部分先执行?

Select field names from emp, dept

where emp.dept_num = dept.num and

emp.name Like 'S%' and dept.name='IT';

答:执行次序随已有的索引、统计、和session/init.ora参数的不同而变化。

假定已有一个建立在DEPT(name)和EMP(dept_num)上的索引。假定优化器认为DEPT是唯一的,它可能按下面的顺序进行操作:

利用建立在DEPT(name)上的索引查找dept列

利用建立在EMP(dept_num)上的索引查找匹配的emp列(即连接emp.dept_num = dept.num)

依据建立在emp.ename like 'S%'进行过滤

现在,我们假定没有建立在EMP(dept_num)上的索引,也没有建立在DEPT(name)上的索引,而存在建立在EMP(name)和DEPT(num)上的索引。优化器可能按下面的次序进行操作:

利用建立在EMP(name)上的索引找到带有S的EMPS

利用建立在DEPT(num)上的索引找到匹配项

根据dept.name = 'IT'过滤结果

谓词求值的次序是不确定的,可以随时间的改变而改变,并由优化器决定。不要假定任何事情会按一定的次序发生。假如你那么做,随着时间的推移,你的应用程序可能会出现一些看

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有