Oracle數據庫常見(jiàn)問(wèn)題答疑
作者:丁誠、李小峰
Oracle數據庫以其強大的功能和穩定性而著(zhù)稱(chēng),但同時(shí),在開(kāi)發(fā)和管理方面也存在很多困難,筆者在此總結了一些Oracle數據庫開(kāi)發(fā)和管理的常見(jiàn)問(wèn)題,希望能對大家有所幫助。
問(wèn):如果發(fā)現表中有壞塊,如何檢索其它未壞的數據?
答:首先需要找到壞塊的ID(可以運行dbverify實(shí)現),假設為1234。運行下面的查詢(xún)查找段名:
select segment_name, segment_type, block_id, blocks
from dba_extents
where (1234 between block_id and (block_id + blocks - 1));
一旦找到壞段名稱(chēng),若段是一個(gè)表,則最好建立一個(gè)臨時(shí)表,存放好的數據。若段是索引,則刪除它,再重建。
create table good_table
as
select from bad_table where rowid not in
( select /+index(bad_table, any_index)/ rowid
from bad_table where substr( rowid, 1, 8 ) = 1234)
問(wèn):如請問(wèn)如何關(guān)閉FORM調用REPORT時(shí)的小窗口?
答:在利用Oracle數據庫的Develop 2000設計開(kāi)發(fā)界面的過(guò)程中,當FORM調用REPORT時(shí),會(huì )顯示一個(gè)背景窗口REPORT BACKGROUD ENGINE,等待FORM對REPORT的調用,當FORM調用其它REPORT時(shí),也使用這個(gè)后臺服務(wù)器,不論調用多少個(gè)REPORT,這個(gè)后臺服務(wù)器存在且只有一個(gè)。但當FORM與REPORT全部退出后,該窗口仍處于等待狀態(tài),不會(huì )關(guān)閉,這時(shí),我們需要手工將其關(guān)閉。
我們可以使用以下參數在FORM調用REPORT時(shí)不顯示這個(gè)小窗口:
Add_Parameter( pl_id, ‘ORACLE_SHUTDOWN‘,TEXT_Parameter, ‘Yes‘ );
需要注意的是,該參數必須加在所有參數的前面,即它必須為第一個(gè)參數。
問(wèn):請問(wèn)如何根據查詢(xún)條件在REPORT中動(dòng)態(tài)顯示記錄?
答:1. 在REPORT的“數據模型”下面的“用戶(hù)參數”中,創(chuàng )建用戶(hù)自定義參數W_CLAUSE,W_CLAUSE為從FORM傳遞過(guò)來(lái)的查詢(xún)條件,數據類(lèi)型為字符型,缺省值為NULL。
2. 修改查詢(xún)Q_1,將SQL查詢(xún)語(yǔ)句修改為select from dept &&w_clause。
3. 在運行報表時(shí),報表會(huì )自動(dòng)將符合&&w_clause的查詢(xún)條件記錄顯示出來(lái)。
如果從FORM傳遞過(guò)來(lái)的w_clause為where dept=1,本報表的SQL查詢(xún)自動(dòng)轉換為select from dept where dept=1,并在報表運行結果中顯示符合該查詢(xún)條件的記錄,如果從FORM傳遞過(guò)來(lái)的w_cluase為where to_char(年度,‘YYYY.MM‘)=‘2000.03‘,則在報表運行結果中自動(dòng)顯示2000年3月份的記錄。
問(wèn):在Oracle中,我們如何查看某表上的約束?
答:我們可以使用下面語(yǔ)句從all_constraints視圖中查看某表上的約束:
SELECT constraint_name, table_name, r_owner, r_constraint_name
FROM all_constraints
WHERE table_name = ‘table_name‘ and owner = ‘owner_name‘;
另一個(gè)視圖ALL_CONS_COLUMNS也包括組成表上約束列的信息。
問(wèn):如何將數據庫從noarchivelog方式改變?yōu)閍rchivelog方式?
答:首先打開(kāi)Init.ora文件,確保存檔日志目標指向一有效目錄。
然后啟動(dòng)Server Manager
svrmgrl〉 shutdown immediate
svrmgrl〉 startup mount
svrmgrl〉 alter database archivelog;
svrmgrl〉 alter database open;
svrmgrl〉 archive log list;
在init.ora中設置參數archive_log_start=TRUE,它設置存檔日志為自動(dòng)啟動(dòng)。在Oracle 8i中支持多個(gè)存檔日志的目標,因此參數修改為log_archive_dest[n],其中n為1到5。
問(wèn):在Oracle數據庫中,我們如何增加表空間的大???
答: 在開(kāi)發(fā)Oracle數據庫中,我們有兩種方法增加表空間的大?。?
1.增加額外的數據文件到表空間中
例如:alter tablespace users add datafile ‘/u01/oradata/orcl/users02.dbf‘ size 25m;
2.修改表空間當前的數據文件
例如:alter database datafile
‘/u01/oradata/orcl/users01.dbf‘ resize 50M;
問(wèn):請問(wèn)如何在REPORT中設置動(dòng)態(tài)顯示域?
答:在REPORT中設置動(dòng)態(tài)顯示域的方法如下:
1. 在REPORT的“數據模型”下面的“用戶(hù)參數”中,創(chuàng )建用戶(hù)自定義參數,如RQ,RQ是從FORM傳遞過(guò)來(lái)的顯示日期,數據類(lèi)型為字符型。
2. 在布局模型中,創(chuàng )建一個(gè)顯示域F_1,在屬性選項板中修改該顯示域的源為用戶(hù)自定義參數RQ,并且設為“不可見(jiàn)的”。
3. 在動(dòng)態(tài)預覽中,創(chuàng )建一個(gè)文本域D_1,調整該文本域的位置和寬度,在該域的內容中輸入&&F_1,則該域會(huì )動(dòng)態(tài)顯示用戶(hù)定義參數RQ的值。
聯(lián)系客服