1) 遷出BUSINESS/BUSINESS_APP兩業務系統用戶數據, 減輕中央庫的業務壓力和負載, 調整數據庫架構, 以應對後續新業務系統上線形成對中央庫的衝擊;
2) 新庫升級Oracle10.2.0.1到10.2.0.4, 數據庫自己修復了不少bug, 加強了數據庫的穩定性.
3) 調整定時任務, 把原先的定時任務由crontab/job方式改成oracle scheduler.
大概操做步驟以下:
--1) 提早安裝Oracle10.2.0.4, 並部署Streams複製(schema複製)
BEGIN
DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS (
schema_names => 'BUSINESS,BUSINESS_APP',
source_directory_object => 'DIR_SOURCE',
destination_directory_object => 'DIR_DEST',
source_database => 'SOUR.NET',
destination_database => 'DEST.LK',
perform_actions => TRUE,
script_name => NULL,
script_directory_object => NULL,
capture_name => 'cap_erating',
capture_queue_table => 'tab_cap_que_erating',
capture_queue_name => 'cap_que_erating',
capture_queue_user => NULL,
propagation_name => 'prop_erating',
apply_name => 'app_erating',
apply_queue_table => 'tab_app_que_erating',
apply_queue_name => 'app_que_erating',
apply_queue_user => NULL,
dump_file_name => 'SOUR.dmp',
log_file => 'SOUR.log',
bi_directional => FALSE,
include_ddl => TRUE,
instantiation => DBMS_STREAMS_ADM.instantiation_schema
);
END;
/
--2) 檢查目標庫Streams複製是否正常
SELECT 'capture' process_type,
capture_name process_name,
status,
error_message
FROM DBA_CAPTURE
UNION ALL
SELECT 'propagation' process_type,
propagation_name process_name,
status,
error_message
FROM dba_propagation
UNION ALL
SELECT 'apply' process_type,
apply_name process_name,
status,
error_message
FROM dba_apply;
SELECT apply_name,
local_transaction_id,
source_commit_scn,
error_creation_time,
error_message
FROM dba_apply_error
ORDER BY source_commit_scn DESC;
--3) 中止所有業務系統, 要求只能中斷15分鐘
--4) 取消源庫定時任務(包括crontab/job)
--5) 覈查源庫是否還有鏈接
SELECT username, status, COUNT ( * )
FROM v$session
WHERE username IN
('BUSINESS', 'BUSINESS_APP')
GROUP BY username, status;
--6) 覈查目標庫是否還有Streams複製事務
SELECT streams_name,
streams_type,
cumulative_message_count,
first_message_time,
XIDUSN,
XIDSLT,
XIDSQN,
last_message_time,
total_message_count
FROM v$streams_transaction
ORDER BY 3 DESC;
--7) 從源庫得到重建序列語句, Streams複製這點特別注意, 由於Streams自己不會去同步序列值
set pages 0
SELECT 'DROP SEQUENCE ' || sequence_owner || '.' || sequence_name || ';'
stmt
FROM dba_sequences
WHERE sequence_owner IN
('BUSINESS', 'BUSINESS_APP')
UNION ALL
SELECT 'CREATE SEQUENCE '
|| sequence_owner
|| '.'
|| sequence_name
|| ' start with '
|| last_number
|| ' MAXVALUE '
|| max_value
|| ' MINVALUE '
|| min_value
|| DECODE (cycle_flag, 'N', ' NOCYCLE ', ' CYCLE ')
|| DECODE (cache_size, 0, ' NOCACHE ', ' CACHE '||cache_size)
|| DECODE (ORDER_FLAG, 'N', ' NOORDER ', ' ORDER ') sql
|| ';' stmt數據庫
FROM dba_sequencesWHERE sequence_owner IN
('BUSINESS', 'BUSINESS_APP');
--8) 目標庫重建序列
--9) 源庫和目標庫刷新同義詞, 把同義詞指向新的dblink, 同義詞腳本提早準備好
--源庫
@E:\用戶遷移\sour_synonyms.sql
--目標庫
@E:\用戶遷移\dest_synonyms.sql
--10) 源庫和目標庫從新編譯失效對象
@?/rdbms/admin/utlrp.sql
exec uts.get_invalid;
--11) 各業務系統更改數據庫鏈接指向, 並啓動各業務系統
--12) 測試業務系統啓動狀況
SELECT username, status, COUNT ( * )
FROM v$session
WHERE username IN
('BUSINESS', 'BUSINESS_APP')
GROUP BY username, status;
--12) 增長定時任務, 爲方便管理統一改成scheduler
--13) 刪除流配置 exec dbms_streams_adm.remove_streams_configuration;--14) 其它收尾工做, 如各開發人員查詢用戶的受權等等. --End--