Oracle 9i 數(shù)據(jù)庫設(shè)計(jì)指引全集(4)
2024-08-29 13:40:14
供稿:網(wǎng)友
2.5.4.4 外鍵值可用null的問題
外鍵列如沒有明確說明not null,可插入null記錄(而null是在外部表的記錄中沒有的),如無可插null記錄的想法,要對(duì)外鍵字段加not null約束。
2.5.4.5 序列 sequence 跳號(hào)的問題
sequence 因回滾,系統(tǒng)崩潰(使用cache 內(nèi)的值將認(rèn)為已用),多表引用都將使其跳號(hào),所以不能用于為連續(xù)序號(hào) utl_row.cast_to_row
2.5.4.6 unicn/ intersect/ minus 使用ordey by的注重事項(xiàng)
以上語句進(jìn)行連表操作,而表同表的字段順序的類型相同但字段標(biāo)題名可不同,使用ordey by時(shí)后面假如是字段名,要求所有的表的字段標(biāo)題名相同,否則用字段的順序號(hào)
select id,name,year from user1
union
select no,name,to_number(null) year from user2
order by 1,name,year
2.5.5 安全性
2.5.5.1 Where 條件
無論在使用Select,還是使用破壞力極大的Update和Delete語句時(shí),一定要檢查Where條件判定的完整性,不要在運(yùn)行時(shí)出現(xiàn)數(shù)據(jù)的重大丟失。假如不確定,最好先用Select語句帶上相同條件來果一下結(jié)果集,來檢驗(yàn)條件是否正確。
2.5.6 完整性
有依靠關(guān)系的表,例如主外鍵關(guān)系表,在刪除父表時(shí)必須級(jí)聯(lián)刪除其子表相應(yīng)數(shù)據(jù),或則按照某種業(yè)務(wù)規(guī)則轉(zhuǎn)移該數(shù)據(jù)。9I中表中字段縮小及變類型,字段為空或表空,varchar和char長(zhǎng)度不變可任意改,字段名和表名可字段可用 ALTER TABLE table SET UNUSED (column) 設(shè)定為不可用,注重?zé)o命令再設(shè)為可用
3 備份恢復(fù)設(shè)計(jì)原則
3.1 數(shù)據(jù)庫eXP/imp備份恢復(fù)
Oracle數(shù)據(jù)庫的Exp、Imp提供了數(shù)據(jù)快速的備份和恢復(fù)手段,提供了數(shù)據(jù)庫級(jí)、用戶級(jí)和表級(jí)的數(shù)據(jù)備份恢復(fù)方式。這種方法一般作為數(shù)據(jù)庫輔助備份手段。
3.1.1 數(shù)據(jù)庫級(jí)備份原則
在數(shù)據(jù)庫的數(shù)據(jù)量比較小,或數(shù)據(jù)庫初始建立的情況下采用。不適合7*24的在線生產(chǎn)環(huán)境數(shù)據(jù)庫備份。
3.1.2 用戶級(jí)備份原則
在用戶對(duì)象表數(shù)據(jù)容量比較小、或則用戶對(duì)象初始建立的情況下使用。
3.1.3 表級(jí)備份原則
主要在以下場(chǎng)合采用的備份方式:
參數(shù)表備份
靜態(tài)表備份
分區(qū)表的分區(qū)備份。
3.2 數(shù)據(jù)庫冷備份原則
數(shù)據(jù)庫冷備份必須符合以下原則:
數(shù)據(jù)庫容量比較小。
數(shù)據(jù)庫答應(yīng)關(guān)閉的情況。
3.3 Rman備份恢復(fù)原則
這種方式適用于7*24環(huán)境下的聯(lián)機(jī)熱備份情形。
3.3.1 Catalog數(shù)據(jù)庫
單獨(dú)建立備份恢復(fù)用的數(shù)據(jù)庫實(shí)例,盡可能與生產(chǎn)環(huán)境的數(shù)據(jù)庫分開,確保catalog與生產(chǎn)數(shù)據(jù)庫的網(wǎng)絡(luò)連接良好。在9I系統(tǒng)使用良好的備份策略以可,支持完全使用控制文件保存catalog信息,備份策略如下:
backup spfile format '/data/backup/%d_SPFILE_%T_%s_%p.bak';
sql "alter system archive log current";
backup archivelog all format '/data/backup/%d_ARC_%T_%s_%p.bak' delete all input;
backup current controlfile format '/data/backup/%d_CTL_%T_%s_%p.bak';
在spfile、控制文件、數(shù)據(jù)庫全丟的情況下可通過下面的方式恢復(fù)
RMAN> connect target
connected to target database (not started)
RMAN> startup
RMAN> restore spfile from '/data/backup/COMMDB_SPFILE_20030411_9_1.bak';
SQL> startup
ORA-00205: error in identifying controlfile, check alert log for more info
RMAN> restore controlfile from 'd:/DB92_CTL_20031113_9_1.BAK';
Mout database:
RMAN> recover database;
RMAN> alter database open resetlogs;
注重:對(duì)數(shù)據(jù)庫設(shè)定控制文件保存?zhèn)浞菪畔?65天,具體語句如下。
alter system set control_file_record_keep_time=365 SCOPE=BOTH;
3.3.2 Archive Log
設(shè)置Archive Log 的位置,確保存儲(chǔ)介質(zhì)有足夠的空間來保留指定時(shí)間內(nèi)archive log的總量。建設(shè)定期對(duì)RMAN進(jìn)行全備份,刪除冗余歸檔日志文件。
3.3.3 全備份策略
對(duì)于小容量數(shù)據(jù)庫,可以采用全備份策略。對(duì)于大容量數(shù)據(jù)庫,必須制定全備份策略方案,備份時(shí)對(duì)archive log進(jìn)行轉(zhuǎn)儲(chǔ),同時(shí)冷備份catalog 數(shù)據(jù)庫。
3.3.4 增量備份策略
對(duì)于大容量數(shù)據(jù)庫,必須制定增量備份、累積備份和全備份的周期,備份時(shí)對(duì)archive log進(jìn)行轉(zhuǎn)儲(chǔ),同時(shí)冷備份catalog 數(shù)據(jù)庫。
3.3.5 恢復(fù)原則
采用Rman腳本進(jìn)行數(shù)據(jù)庫恢復(fù)。數(shù)據(jù)庫恢復(fù)有以下幾種:
3.3.5.1 局部恢復(fù)
主要用于恢復(fù)表空間、數(shù)據(jù)文件,一般不影響數(shù)據(jù)庫其他操作。
3.3.5.2 完全恢復(fù)
數(shù)據(jù)庫恢復(fù)到故障點(diǎn),由catalog當(dāng)前數(shù)據(jù)庫決定。
3.3.5.3 不完全恢復(fù)
恢復(fù)到數(shù)據(jù)庫的某一時(shí)間點(diǎn)或備份點(diǎn)。
恢復(fù)catalog數(shù)據(jù)庫。
恢復(fù)數(shù)據(jù)庫control file 。
恢復(fù)到數(shù)據(jù)庫某一時(shí)間點(diǎn)。
重設(shè)日志序列。
3.4 備用數(shù)據(jù)庫原則
數(shù)據(jù)庫系統(tǒng)在以下情況下可以考慮采用備用數(shù)據(jù)庫data guard原則:
數(shù)據(jù)庫容量適中。
數(shù)據(jù)庫嚴(yán)格要求7*24不間斷,或間斷時(shí)間要求控制在最小范圍內(nèi)。
數(shù)據(jù)庫要求有異地備份冗余。
3.5 一些小經(jīng)驗(yàn)
使用oemc的oms時(shí),首選項(xiàng)要求是節(jié)點(diǎn)和數(shù)據(jù)庫分別加入系統(tǒng)用戶(如:administrator)和數(shù)據(jù)庫DBA用戶(system)。節(jié)點(diǎn)的系統(tǒng)用戶必須有批處理作業(yè)登錄的權(quán)限
agent 不能啟動(dòng),lisnter修改后都要手動(dòng)刪除oracle/ora9/network/agent 中的*.q文件
oracle/admin/my9i/bdump 中是用戶的出錯(cuò)日志
改變表的空間的方式alter table hr.ssss move TABLESPACE example(要重建索引); 或用imp導(dǎo)入時(shí),設(shè)定導(dǎo)入用戶只有某一表空間的使用權(quán),無RESOURCE角色和UNLIMITED TABLESPACE權(quán)限
aleter system set log_checkpoint_to_alter=true,后可報(bào)警文件發(fā)現(xiàn)checkpoint的起動(dòng)和結(jié)束時(shí)間。
3.6 系統(tǒng)調(diào)優(yōu)知識(shí)
3.6.1.1 生成狀態(tài)報(bào)表(statspack的使用)
使用(存放位置@?/rdbms/admin/)的文件生成報(bào)表用戶
@?/rdbms/admin/Spcreate.sql建表
將timed_statistics設(shè)定true
使用生成的perfstat用戶登錄,執(zhí)行以下語句手動(dòng)收集信息
Exex statspack.snap
Exec statspack.snap(I_SNAP_LEVEL=>0,I_MODEFY_PRAMETER=>TRUE) 0級(jí),最少10最大
使用下面的語句生成狀態(tài)報(bào)表
@?/rdbms/admin/SPReport.sql
其他相關(guān)文件
delete stats$snapshot ;清原來記錄數(shù)據(jù)
@?/rdbms/admin/Saputo.sql
select job from user_jobs 取用戶作業(yè)號(hào)
exec dbms_remove(作業(yè)號(hào))
timed_statistics=true要求
@?/rdbms/admin/spdrop.sql ;
3.6.1.2 sql追蹤
設(shè)定全部用戶跟蹤
alter system set sql_trace=true;
用戶級(jí)別跟蹤
alter session set sql_trace=true;
用戶的跟蹤文件生成在 admin/{pid}/udump/{pid} _ora_{ SPID}.trc 中,spid從下面語句得到
SELECT b.name bkpr, s.username, p.spid,s.sid,s.serial# FROM v$bgprocess b, v$session s, v$process p WHERE p.addr = b.paddr(+) AND p.addr = s.paddr and s.username=user;
DBA對(duì)特定用戶跟蹤
exec dbms_system_set_Sql_trace_in_session(sid,serial#,true)
信息從下面得到
SELECT b.name bkpr, s.username, p.spid,s.sid,s.serial#,osuser,s.program
FROM v$bgprocess b, v$session s, v$process p
WHERE p.addr = b.paddr(+)
AND p.addr = s.paddr;
/*p.spid用于sql_trace時(shí)日志編號(hào),dbms_system.set_sql_trace_in_session(sid,erial#,true)*/
用戶的跟蹤文件生成在 admin/{pid}/udump 中
系統(tǒng)的跟蹤文件生成在admin/{pid}/bdump/alert_{pid}.log
tkprof.exe將log文件生成格式化文本
在av Rd(ms) 20以上說明表空間使用過用頻繁,考慮將表分開其他表空間上
系統(tǒng)變量fast_start_mttr_target的值要大到不產(chǎn)生log等待,當(dāng)然也可通過加log組使其不等待
reao log大小應(yīng)為每30分鐘切換一次
建議表空間的利用率不超80%
buffer hit 要達(dá)80%以上為好
3.6.1.3 內(nèi)存調(diào)整
一般的內(nèi)存分配原則
SGA 50%(其中80% DATA BUFFER,15% SHARE POOL,5其他)
PGA30%
OS 20%
例如:2G的WINDOWS的平臺(tái),OS 300M,SAG 1.2G,PGA 500M
內(nèi)存