Oracle 一次生產分庫,升級,遷移

今天完成了一個負載較高的中央數據庫的分庫操做, 並實現了oracle的滾動升級(10.2.0.1->10.2.0.4), 業務中斷僅15分鐘. 平臺: RHEL AS 4 + Oracle 10.2.0.1

分庫目的:

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_sequences
WHERE   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--
相關文章
相關標籤/搜索