問題:
數(shù)據(jù)庫表中沒有建立主鍵,即使建立了主鍵,也是使用與業(yè)務(wù)相關(guān)的字段建立的主鍵,還有復(fù)合主鍵。
調(diào)整:
1)為每個表添加ID列,并創(chuàng)建主鍵;
2)為每個表創(chuàng)建Oracle Sequence,使用trigger實現(xiàn)自動獲取;
3)原來使用業(yè)務(wù)鍵創(chuàng)建的主鍵改為唯一索引。
實現(xiàn):
1)從舊數(shù)據(jù)庫中導(dǎo)出表結(jié)構(gòu)及其他用戶對象,在新數(shù)據(jù)庫中創(chuàng)建用戶并導(dǎo)入
exp username/passwd@dbname file=old.dmp rows=n compress=n
說明:
a) exp命令不能使用一個參數(shù)比如tables=all 導(dǎo)出所有表,需要指定表名列表;表名列表獲取sql:select table_name from cat where table_type = 'TABLE';
b) 如果只導(dǎo)出表結(jié)構(gòu)而不導(dǎo)出其他用戶對象(sequence、procedure、trigger等),可以指定tables參數(shù),例如:tables=tab1,tab2
導(dǎo)入新數(shù)據(jù)庫后,刪除沒有用的用戶對象。(為避免JOB、數(shù)據(jù)庫鏈、視圖因權(quán)限不足而失敗,使用DBA用戶導(dǎo)入)
2)使用程序連接新數(shù)據(jù),根據(jù)新數(shù)據(jù)中的表名生成sql,并在新數(shù)據(jù)庫中執(zhí)行
sql的內(nèi)容包括根據(jù)舊主鍵創(chuàng)建唯一索引、刪除舊主鍵、創(chuàng)建ID列、創(chuàng)建ID主鍵、創(chuàng)建Sequence、創(chuàng)建Trigger
3)從舊數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù),在新數(shù)據(jù)庫中導(dǎo)入數(shù)據(jù)
exp username/passwd@dbname tables=tablename file=filename.dmp rows=y compress=n
既包含表結(jié)構(gòu),又包含數(shù)據(jù)
---------------------------------------------------------------------------------------------
使用PL/SQL Developer導(dǎo)出/導(dǎo)入表結(jié)構(gòu)、表數(shù)據(jù)
1)導(dǎo)出表結(jié)構(gòu):
Tools-->Export User Objects(導(dǎo)出用戶對象) -->選擇要導(dǎo)出的表(包括Sequence等)-->.sql文件,導(dǎo)出的都為sql文件
a)不要勾選Include Owner,否則用戶對象前面會有Owner名字。不要勾選Include Storage,否則建表語句會有與存儲有關(guān)的子句。
b)如果只導(dǎo)出表,則只選擇表對象。
導(dǎo)出表數(shù)據(jù):
Tools-->Export Tables-->選擇表,選擇SQL Inserts-->.sql文件
導(dǎo)入表結(jié)構(gòu):
執(zhí)行剛剛導(dǎo)出的sql文件,記住要刪掉table前的用戶名,比如以前這表名為sys.tablename,必須刪除sys
導(dǎo)入表數(shù)據(jù):
執(zhí)行剛剛導(dǎo)出的sql文件
posted on 2011-05-25 15:28
jeffma 閱讀(706)
評論(0) 編輯 收藏