国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

ORACLE技術(shù)問題專家問答五則

2024-08-29 13:37:53
字體:
供稿:網(wǎng)友

  一問:有關(guān)口令
  我在Solaris系統(tǒng)上運(yùn)行 Oracle8i 8.1.7企業(yè)版。我創(chuàng)建了兩個(gè)數(shù)據(jù)庫:SUGAR和TestDb。將兩者的remote_login_passWordfile都設(shè)置為 “獨(dú)占(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(錯(cuò)誤)
  ORA-01017: invalid username/password; logon
  denied(無效的用戶名/口令,登錄被拒絕)
  Warning: You are on longer connected to
  ORACLE(警告:你已經(jīng)與ORACLE斷開連接)
  我為什么不能以SYSDBA身份連接到TestDb?
  
  答:通常Oracle中的SYS口令與INTERNAL口令是同步的,SYS口令存儲于口令文件中。在上述情況下你建立了包含有一個(gè)口令的口令文件,而不是使用缺省的 “change_on_install,”這就是問題之所在。
  
  希望下面的方法對你有所幫助。首先,建立一個(gè)口令文件,其中包含一個(gè)口令,這個(gè)口令不要與系統(tǒng)口令匹配:
  
  $ orapwd file=orapw password=Foobar
  entries=40
  然后,進(jìn)入服務(wù)器,啟動(dòng)數(shù)據(jù)庫:
  
  $ svrmgr
  SVRMGR> connect internal
  Connected.(已連接)
  SVRMGR> startup
  ORACLE instance started.(ORACLE 實(shí)例已啟動(dòng))
  Total System Global Area (系統(tǒng)全局區(qū)域大小)
  193073136 bytes
  Fixed Size (固定大小)
  69616 bytes
  Variable Size (可變大小)
  141639680 bytes
  Database Buffers (數(shù)據(jù)庫緩沖區(qū))
  45056000 bytes
  Redo Buffers (重做緩沖區(qū))
  6307840 bytes
  Database mounted. (數(shù)據(jù)庫已加載)
  Database opened.數(shù)據(jù)庫已打開。
  現(xiàn)在使用SYS用戶的口令,以SYS身份連接:
  
  SVRMGR> connect sys/change_on_install@ora81
  Connected.(已連接)
  成功了。現(xiàn)在試著以SYSDBA身份連接:
  
  SVRMGR> connect sys/change_on_install@ora81
  as sysdba;
  ORA-01017: invalid username/password; logon
  denied(無效的用戶名/口令;登錄被拒絕)
  這里出現(xiàn)了你所說的錯(cuò)誤。你的SYS口令為:change_on_install,但口令文件中的口令卻是foobar。SYS用戶是專用的,以SYSDBA身份連接就像是以INTERNAL連接,你必須使用口令文件中的口令。試試這樣做:
  
  SVRMGR— connect sys/foobar@ora81 as sysdba;
  Connected.(已連接)
  并不是每個(gè)人都需要使用口令文件中的口令;用戶需要使用他們自己的口令。通過授權(quán)SYSDBA給SCOTT,你就可以明白這一點(diǎn):
  
  SVRMGR> grant sysdba to scott;
  Statement PRocessed.(已處理)
  這個(gè)命令將SCOTT以SCOTT的憑證加入到口令文件中。假如你改變了SCOTT的口令,口令文件也會(huì)自動(dòng)同步改變。現(xiàn)在,你可以試試以SYSDBA身份連接SCOTT了:
  
  SVRMGR> connect scott/tiger@ora81 as sysdba;
  Connected.(已連接)
  一切正常。
現(xiàn)在可以使用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,因?yàn)楦淖僑YS用戶口令將同時(shí)改變口令文件中的口令。當(dāng)你建立了口令文件后,Oracle數(shù)據(jù)庫在其中放入兩個(gè)賬號:SYS和INTERNAL,并將你在命令行中提供的口令作為這兩個(gè)賬戶的口令。當(dāng)你改變數(shù)據(jù)庫中的SYS用戶口令時(shí),數(shù)據(jù)庫將沖掉口令文件中的SYS和INTERNAL口令。下面操作將顯示口令foobar已經(jīng)是無效的了:
  
  SVRMGR> connect sys/foobar@ora81 as sysdba;
  ORA-01017: invalid username/password; logon
  denied(無效的用戶名/口令,登錄被拒絕)
  
  
  二問:利用QUERY選項(xiàng)輸出數(shù)據(jù)
  我知道在Oracle8i中,可以使用QUERY有選擇地輸出表數(shù)據(jù)。我想用EXP命令來實(shí)現(xiàn),但沒有成功。下面是我所寫的命令,以及得到的錯(cuò)誤信息:
  
  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.(沒有找到)
  
  
  答:操作系統(tǒng)不同,用來指定QUERY=參數(shù)的方法也不同。WHERE 語句里面往往有很多非凡的字符,如=.>.<和空格等等。而UNIX和Windows操作系統(tǒng)中的外殼命令提示是不歡迎這些字符的,這些字符將被忽略。你應(yīng)該根據(jù)不同的操作系統(tǒng)采用不用的方法。我一般使用帶有QUERY選項(xiàng)的參數(shù)文件(PARFILE),利用PARFILE,可以不考慮操作系統(tǒng)平臺而使用完全相同的方法。
  
  下面給出一個(gè)例子。我用select * from all_objects建立了一個(gè)表T,我希望輸出所有object_id 小于5000的行。在Windows中,必須這樣做:
  
  C:/exp>exp userid=tkyte/tkyte tables=t
  query="""where object_id < 5000"""
  
  
  注重:在windows中,需要在WHERE語句的兩端使用三個(gè)雙引號。在UNIX中,必須這樣做:
  
  $ exp userid=/ tables=t query=/"where
  object_id /< 5000/"
  exp userid=/ tables=t parfile=exp.par
  假如使用包含query="where object_id < 5000"的PARFILE文件,我可以在兩個(gè)系統(tǒng)中使用相同的一個(gè)命令:
  
  exp userid=/ tables=t parfile=exp.par
  
  在兩種操作系統(tǒng)中,完全相同。這相對于在不同的平臺中使用不同的QUERY字符串輕易多了。
  
  
  
  
  
  三問:DBMS_RANDOM
  您能否告訴我寫一個(gè)能產(chǎn)生大于0小于1的隨機(jī)數(shù)的隨機(jī)數(shù)產(chǎn)生器的最好方法?
  
  答:Oracle8 8.0版介紹了DBMS_RANDOM包,Oracle8i 8.1.6版介紹了DBMS_RANDOM包的新功能,但Oracle8i 文檔中沒有具體全面介紹其功能。幸運(yùn)的是:有一個(gè)新的DBMS_RANDOM包函數(shù)能夠返回0-1之間的隨機(jī)數(shù)。這個(gè)新函數(shù)是:
  
  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函數(shù)的第一種形式返回一個(gè)大于或等于0且小于1的隨機(jī)數(shù);第二種形式返回一個(gè)大于或等于LOW,小于HIGH的隨機(jī)數(shù)。下面是其用法的一個(gè)示例:
  
  SQL> select dbms_random.value,
  dbms_random.value(55,100)
  2 from dual;
  VALUE DBMS_RANDOM.VALUE(55,100)
  --------------- -----------------------------
  .782821936 79.6367038
  NORMAL函數(shù)返回服從正態(tài)分布的一組數(shù)。此正態(tài)分布標(biāo)準(zhǔn)偏差為1,期望值為0。這個(gè)函數(shù)返回的數(shù)值中有68%是介于-1與+1之間,95%介于-2與+2之間,99%介于-3與+3之間。事實(shí)上,這就是你在清單1中所看到的。
  
  
  
  最后,是STRING函數(shù)。它返回一個(gè)長度達(dá)60個(gè)字符的隨機(jī)字符串。參數(shù)OPT可以是清單2顯示的值中的任何一個(gè)單個(gè)字符。
  
  
  
  關(guān)于這些函數(shù)及DBMS_RANDOM包的文件都包含在SQLPlus中:
  
  select text
  from all_source
  where name = 'DBMS_RANDOM'
  and type = 'PACKAGE' order by line;
  
  
  四問:連接次序與謂詞求值
  在下面的查詢中,WHERE 語句的哪一部分先執(zhí)行?
  
  Select field names from emp, dept
  where emp.dept_num = dept.num and
  emp.name Like 'S%' and dept.name='IT';
  
  
  答:執(zhí)行次序隨已有的索引、統(tǒng)計(jì)、和session/init.ora參數(shù)的不同而變化。

  
  
  
  假定已有一個(gè)建立在DEPT(name)和EMP(dept_num)上的索引。假定優(yōu)化器認(rèn)為DEPT是唯一的,它可能按下面的順序進(jìn)行操作:
  
  
  
  
  
  利用建立在DEPT(name)上的索引查找dept列
  
  利用建立在EMP(dept_num)上的索引查找匹配的emp列(即連接emp.dept_num = dept.num)
  
  依據(jù)建立在emp.ename like 'S%'進(jìn)行過濾
  
  現(xiàn)在,我們假定沒有建立在EMP(dept_num)上的索引,也沒有建立在DEPT(name)上的索引,而存在建立在EMP(name)和DEPT(num)上的索引。優(yōu)化器可能按下面的次序進(jìn)行操作:
  
  
  
  
  
  利用建立在EMP(name)上的索引找到帶有S的EMPS
  
  利用建立在DEPT(num)上的索引找到匹配項(xiàng)
  
  根據(jù)dept.name = 'IT'過濾結(jié)果
  
  謂詞求值的次序是不確定的,可以隨時(shí)間的改變而改變,并由優(yōu)化器決定。不要假定任何事情會(huì)按一定的次序發(fā)生。假如你那么做,隨著時(shí)間的推移,你的應(yīng)用程序可能會(huì)出現(xiàn)一些看

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 连州市| 来宾市| 金寨县| 汾阳市| 九龙坡区| 静乐县| 伽师县| 广汉市| 横山县| 吐鲁番市| 邵武市| 孝感市| 五家渠市| 盐亭县| 磴口县| 贵定县| 普定县| 兴海县| 桂平市| 建湖县| 社会| 那坡县| 合山市| 毕节市| 墨竹工卡县| 陕西省| 泸西县| 外汇| 安塞县| 原平市| 子长县| 白水县| 定州市| 安新县| 光山县| 辛集市| 教育| 滦南县| 新蔡县| 昆明市| 龙门县|