我們給系統(tǒng)創(chuàng)建了兩個用戶:com和comtest。前者存放的是正式庫數(shù)據(jù),后者存放的測試庫數(shù)據(jù)。它們都有一個taw_rm_user表,存放了使用該系統(tǒng)的用戶基本信息,我就是把其中的password字段全部改成了123456。
DMP備份文件是9月28號創(chuàng)建的,經(jīng)過十一七天長假后到今天,已經(jīng)有十幾天了,我簡單的查了一下日志,發(fā)現(xiàn)已經(jīng)創(chuàng)建了幾個新的用戶,并且有些舊的用戶的其他信息也已經(jīng)更改了。直接把備份文件中的taw_rm_user表導(dǎo)入com用戶下是肯定不行的。經(jīng)過一段時間的冷靜思考后,得到了一個解決方案。大致思路是:
1. 將測試庫的taw_rm_user表用CREATE TABLE AS語句導(dǎo)到一個臨時的備份表中(測試庫中的用戶表也不能亂改);
2. 再將taw_rm_user表刪除;
3. 然后將DMP備份文件的taw_rm_user表用IMP命令導(dǎo)入到comtest下;
4. 再自己編寫一個PL/SQL程序塊,通過使用游標(biāo)循環(huán),將這個新導(dǎo)入的表中的password字段更新到com.taw_rm_user表的對應(yīng)記錄中。注意,這里只更新對應(yīng)記錄,對新加入的用戶記錄不作任何修改;
5. 再將之前備份的taw_rm_user表恢復(fù)到comtest下即可。
其中使用的兩段關(guān)鍵語句如下:
-- 備份測試庫中的taw_rm_user表
create table comtest.taw_rm_user_bak
as
select * from comtest.taw_rm_user
-- 恢復(fù)正式庫中的taw_rm_user.password字段
declare
rec_comtest comtest.taw_rm_user%rowtype;
cursor cur_comtest is
select * from comtest.taw_rm_user;
begin
open cur_comtest;
loop
fetch cur_comtest into rec_comtest;
exit when cur_comtest%notfound;
update com.taw_rm_user
set com.taw_rm_user.password=rec_comtest.password
where com.taw_rm_user.user_id=rec_comtest.user_id;
end loop;
close cur_comtest;
commit;
end;
這樣就可以在不更改其他所有信息的情況下,將所有舊用戶的密碼恢復(fù)到從前。
更多信息請查看IT技術(shù)專欄