熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle11g物理備用數據庫“實況克隆”詳解

2022-06-13   來源: Oracle 

  相比Oracle i和Oracle iOracle g在數據庫備份方面做出了極大的改善特別是作為Oracle最大可用性架構(MAA)一部分的真正應用集群(RAC)特性Oracle g現在創建一個備用數據庫變得更加簡單了因為恢復管理器(RMAN)支持直接從主數據庫使用DUPLICATE DATABASE命令集通過網絡克隆一個備用數據庫只要目標數據庫是活動的即可這意味著再也不用先生成再傳輸最後在備用數據庫上通過復雜的手工方式還原和恢復主數據庫的RMAN備份集了相反RMAN在主站點上自動生成一個轉換腳本在內存中然後在備用站點上使用這個腳本管理克隆操作實際上不用DBA進行任何干預下文將集中精力講解備用數據庫實況克隆特性筆者的硬件基本情況是雙核AMD Athlon 位CPU(Winchester GB內存主機運行的是Windows xp系統運行VMWare Server 訪問訪問虛擬數據庫服務器環境每個虛擬機使用個CPUM內存我選擇Oracle Enterprise Linux (OEL) (Linux內核版本ELsmp)作為虛擬機客戶端操作系統

  每個VMWare虛擬機配置好後在每個虛擬機的/etc/hosts文件中添加合適的條目讓主站點(training)和備用站點(gStdby)之間建立起網絡連接然後在每個節點上都安裝Oracle g數據庫最後在主站點上創建好標准的g R種子數據庫包括標准的示例方案這個數據庫的ORACLE_SID是orcl接下來就可以開始執行實況克隆操作了

  克隆前准備工作調整主數據庫

  在克隆主數據庫到對應的備用環境中之前我需要對主數據庫做一些調整下面的步驟未做特別說明沒有先後順序只要在發出DUPLICATE DATABASE命令前這些步驟都執行完了即可在克隆操作過程中應該沒有什麼讓人意外的東西出現

  強制記錄所有的交易

  大多數組織實施數據衛士配置的主要原因是保證所有交易都不丟失但遺憾的是默認情況下Oracle數據庫是運行在NOFORCE LOGGING模式下的這意味著對對象的改變可能丟失因為他們的存儲屬性被設為NOLOGGING為了確保所有的改變都被記錄下來我將執行ALTER DATABASE FORCE LOGGING命令這個命令需要在執行ALTER DATABASE ARCHIVELOG命令將數據庫ARCHIVELOG模式前執行這些命令如清單所示

  清單 將主數據庫切換到ARCHIVELOG模式

  –為歸檔日志文件設置一個合適的格式

  ALTER SYSTEM SET log_archive_format = log_%s_%t_%rarc SCOPE=SPFILE;

  –設置新的DB_UNIQUE_NAME參數它不能動態修改

  ALTER SYSTEM SET db_unique_name = orcl SCOPE=SPFILE;

  SHUTDOWN IMMEDIATE;

  STARTUP MOUNT;

  ALTER DATABASE FORCE LOGGING;

  ALTER DATABASE ARCHIVELOG;

  ALTER DATABASE OPEN;

  創建備用重做日志組

  自從Oracle i R開始支持備用重做日志(standby redo log 即SRL)組開始Oracle就建議配置它SRL對於實時應用(Real Time Apply)特性是需要的或DBA想要實現重做日志串聯目的時也需要除此之外它任然是備用數據庫配置選項Oracle g另一個優點是如果SRL在主數據庫上已經配置好那麼DUPLICATE DATABASE命令將會在備用數據庫上自動創建它們清單顯示了我在主數據庫上創建SRL的命令注意我也使用了多個重SRL文件保護整個SRL組避免數據丟失這一點和在線重做日志組類似

  清單 在主數據庫上創建備用重做日志文件

  ALTER DATABASE

  ADD STANDBY LOGFILE

  /u/app/oracle/oradata/orcl/srllog

  SIZE M

  REUSE;

  ALTER DATABASE

  ADD STANDBY LOGFILE

  /u/app/oracle/oradata/orcl/srllog

  SIZE M

  REUSE;

  ALTER DATABASE

  ADD STANDBY LOGFILE

  /u/app/oracle/oradata/orcl/srllog

  SIZE M

  REUSE;

  文件名轉換

  一般情況下備用數據庫都是創建在與主數據庫不同的主機上的否則在災難中主備數據庫都有可能受到危害最佳做法是將對應的備用數據庫的目錄和文件名都弄成一樣但如果遇到掛載點不一樣時目錄名需要修改這個時候就需要使用DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT初始化參數進行轉換了

  修改主站點初始化參數

  在主數據庫上設置下列初始化參數確保DUPLICATE DATABASE命令能夠一樣配置備用數據庫我在清單中詳細列出了這些初始化參數設置

  ()DB_UNIQUE_NAME

  我通過這個參數為主數據庫定義一個唯一的實例名這個參數值使得區分原始主數據庫和備用數據庫變得更加簡單因為這是一個靜態參數我在清單中已經將其設置為SCOPE=SPFILE它將在主數據庫實例啟動時生效

  ()LOG_ARCHIVE_CONFIG

  這個參數控制主或備用數據庫是否應該接受和/或發送來自遠程源的歸檔重做日志它允許我們包含所有主備數據庫因為它在配置中列出了所有數據庫的DB_UNIQUE_NAME值我將其設置為目前我的數據衛士數據庫orcl和stdby

  ()STANDBY_FILE_MANAGEMENT

  我將這個參數設置問為auto了這樣主數據庫上發生什麼操作備用數據庫上就會跟著發生什麼操作如主數據庫上創建一個文件備用數據庫上也將創建一個相同的文件刪除主數據庫上一個已有文件備用數據庫上也做對應的刪除如新增一個在線重做日志文件組或刪除一個表空間

  ()LOG_ARCHIVE_DEST_n

  這個控制是從主數據庫上傳輸歸檔重做日志到物理備用數據庫的關鍵參數我將設置兩個歸檔目標

   目標LOG_ARCHIVE_DEST_指定主數據庫歸檔重做日志的物理位置注意我們使用了閃回恢復區作為目標

   目標LOG_ARCHIVE_DEST_指定了對應的備用數據庫實例(stdby)的網絡服務地址這個參數確保歸檔重做日志自動傳輸到備用站點

  對於這個歸檔重做日志傳輸參數我還可以指定另外兩個指令

  ◆當數據庫是以特定角色激活時指令VALID_FOR大大簡化了重做日志傳輸時的類型當主備數據庫角色不同時在傳輸重做日志時這是最關鍵的參數列出了這個參數允許的值

  

  表 VALID_FOR指令值

設置 含義 ALL_LOGFILES (默認)目標使用在線或備用重做日志文件 ONLINE_LOGFILE 目標僅適用於在線歸檔重做日志文件 STANDBY_LOGFILE 目標僅適用於備用重做日志文件 ALL_ROLES 當數據庫以主或備用角色運行時(默認)目標都是有效的 PRIMARY_ROLE 當數據庫以主角色運行時目標是有效的 STANDBY_ROLE 當數據庫以備用角色運行時目標是有效的

  ◆也可以設置合適的重做日志傳輸模式(redo transport mode)值指定歸檔重做日志從主數據庫傳輸到備用數據庫列出了這個指令允許的值

   表 重做日志傳輸模式 設置 含義 ASYNC 在事務提交前可能不是所有的目標都接受了傳輸的重做日志(默認值) SYNC 在事務提交前所有目標必須接受傳輸的重做日志 AFFIRM 僅當重做數據被寫入到備用重做日志後目標才確認已收到含有SYNC含義 NOAFFIRM 當重做數據寫入到備用重做日志前目標就可以確認收到含有ASYNC含義

  網絡配置修改

  最後我需要確保主數據庫和備用數據庫之間能夠通過網絡通信唯一需要變化的就是在主數據庫本地命名配置文件(TNSNAMESORA)中加上備用數據庫的實例備用數據庫的LISTENERORA配置文件也需要一個備用數據庫實例的靜態監聽器這些變化如清單所示

  清單 在主數據庫上設置合適的初始化參數值

  ALTER SYSTEM SET log_archive_dest_ = LOCATION=/u/app/oracle/flash_recovery_area/ORCL/ DB_UNIQUE_NAME=orcl VALID_FOR=(ALL_LOGFILESALL_ROLES);

  ALTER SYSTEM SET log_archive_dest_state_ = ENABLE;

  ALTER SYSTEM SET log_archive_dest_ = SERVICE=stdby ASYNC DB_UNIQUE_NAME=stdby VALID_FOR=(ONLINE_LOGFILEPRIMARY_ROLE);

  ALTER SYSTEM SET log_archive_dest_state_ = ENABLE;

  ALTER SYSTEM SET standby_file_management = AUTO;

  ALTER SYSTEM SET log_archive_config = DG_CONFIG=(orclstdby);

  清單 網絡配置文件修改

  #在主數據庫實例上添加一個備用數據庫條目

  STDBY =

  (DESCRIPTION =

  (ADDRESS = (PROTOCOL = TCP)(HOST = gStdby)(PORT = ))

  (CONNECT_DATA =

  (SERVER = DEDICATED)

  (SERVICE_NAME = stdby)

  )

  )

  #使用備用數據庫實例的靜態引用設置備用數據庫監聽器

  SID_LIST_LISTENER =

  (SID_LIST =

  (SID_DESC =

  (GLOBAL_DBNAME = stdby)

  (ORACLE_HOME = /u/app/oracle/product//db_)

  (SID_NAME = stdby)

  )

  )

  LISTENER =

  (DESCRIPTION =

  (ADDRESS = (PROTOCOL = TCP)(HOST = gStdby)(PORT = ))

  准備克隆准備備用站點

  現在主站點已經准備好可以克隆了在對應的備用站點上也需要做一些對應的調整

  創建必要的目錄

  需要為數據庫控制文件數據文件在線重做日志文件和備用重做日志文件創建必要的目錄我還為數據庫的審核跟蹤創建了合適的目錄

  設置密碼文件

  因為主數據庫要和備用數據庫進行通信時需要使用遠程認證我將會使用orapwd工具創建一個新的密碼文件確保SYS的密碼和主數據庫匹配(注意我可能會直接從主數據庫拷貝到備用數據庫)

  創建備用初始化參數文件

  最後我需要創建一個初始化參數文件(PFILE)僅允許我啟動備用數據庫實例它只需要一個參數DB_NAME當DUPLICATE DATABASE命令腳本執行完畢後它將會創建一個服務端參數文件(SPFILE)它僅包括合適的初始化參數設置

  在清單中我解釋了這些命令和臨時備用數據庫初始化參數為了開啟DUPLICATE DATABASE克隆操作我將啟動備用站點的監聽器然後使用前面創建的PFILE初始化參數文件將備用數據庫實例啟動到NOMOUNT狀態

  從主數據庫的RMAN會話環境啟動DUPLICATE DATABASE命令前面我已經提到過Oracle g中DUPLICATE DATABASE命令最引人注目的改變是它可以通過網絡直接將主數據庫克隆到備用數據庫站點作為設置備用數據庫的一部分我也可以為所有需要的初始化參數指定值DUPLICATE DATABASE將會在備用數據庫上創建一個新的SPFILE

  清單顯示了使用DUPLICATE DATABASE命令進行克隆的完整語句注意我添加了下面這樣一些額外的參數可能和主數據庫的參數稍有不同

  ()DB_UNIQUE_NAME

  我將這個參數的值設為stdby了

  ()CONTROL_FILES

  我只為備用數據庫創建了一個控制文件在克隆完畢後我會復制多個

  ()FAL_CLIENT和FAL_SERVER

  這兩個參數確定哪個數據庫服務分別擔任FAL(fetch archive log)客戶端和服務器例如無論何時當主數據庫和備用數據庫之間的網絡斷掉後或如果備用數據庫已經關閉相當長一段時間歸檔重做日志可能就不會傳輸到備用服務器上這種情況叫做歸檔日志空白(archive log gap)這兩個FAL服務名確定了由哪個服務器(FAL_SERVER)維護所有歸檔重做日志組主列表由它為FAL_CLIENT提供可能發生的歸檔日志空白解決方案在我們的數據衛士設置中將備用服務器配置為FAL_CLIENT將主服務器配置為FAL_SERVER

  ()LOG_FILE_NAME_CONVERT

  我已經使用這個參數將主數據庫的歸檔重做日志和備用重做日志的目標做了翻譯確保在克隆過程中RMAN能夠自動在備用數據庫上創建恰當的副本

  ()LOG_ARCHIVE_DEST_n

  和主數據庫一樣我也設置了兩個歸檔日志目標一個主目標LOG_ARCHIVE_DEST_和次要目標LOG_ARCHIVE_DEST_將來主備站點角色發生交換後將由次要目標中的歸檔重做日志傳輸到原始主數據庫中

  最後讓我們開始克隆吧!首先在主數據庫服務器上啟動一個RMAN會話以target連接到主數據庫以auxiliary連接到備用數據庫

  oracle@training> rman target / auxiliary sys/oracle@stdby

  Recovery Manager: Release Production on Tue Apr ::

  Copyright (c) Oracle  All rights reserved

  connected to target database: ORCL (DBID=)

  connected to auxiliary database: STDBY (not mounted)

  為了加快處理過程我將會通過ALLOCATE CHANNEL命令創建兩個auxiliary通道和兩個normal通道並在相同的RUN塊中使用DUPLICATE DATABASE開始克隆下面是RMAN命令塊所做的事情

   使用主數據庫服務器的參數文件作為模版為備用數據庫創建了一個新的SPFILE但在DUPLICATE DATABASE運行塊中的SET命令中做了適當的修改

   然後關閉備用數據庫再使用新的SPFILE啟動到NOMOUNT模式

   接下來創建主數據庫控制文件的拷貝修改它讓所有文件名都與備用數據庫匹配拷貝新的控制文件到備用數據庫上然後使用新的控制文件將數據庫啟動到MOUNT模式

   然後在備用數據庫上直接創建主數據庫數據文件的鏡像拷貝備份

   最後使用主數據庫上當前的歸檔重做日志在備用數據庫上執行必要的恢復並將備用數據庫置為管理恢復模式

  我在清單中列出了克隆操作的結果它顯示了RMAN命令的輸出內容清單列出了克隆過程中產生的備用數據庫的警告日志條目

  清單 來自一個成功的備用數據庫克隆操作的輸出內容

  [oracle@training ~]$ rman target / auxiliary sys/oracle@stdby

  Recovery Manager: Release Production on Sat Apr ::

  Copyright (c) Oracle  All rights reserved

  connected to target database: ORCL (DBID=)

  connected to auxiliary database: STDBY (not mounted)

  RMAN> RUN {

  ALLOCATE CHANNEL d TYPE DISK;

  ALLOCATE CHANNEL d TYPE DISK;

  ALLOCATE AUXILIARY CHANNEL cnv TYPE DISK;

  ALLOCATE AUXILIARY CHANNEL cnv TYPE DISK;

  DUPLICATE TARGET DATABASE

  FOR STANDBY

  FROM ACTIVE DATABASE

  DORECOVER

  SPFILE

  SET db_unique_name=stdby

  SET control_files=/u/app/oracle/oradata/orcl/controlctl

  SET log_file_name_convert=/u/app/oracle/oradata/orcl//u/app/oracle/oradata/stdby/

  SET log_archive_dest_=location=/u/app/oracle/flash_recovery_area/STDBY/ valid_for=(ALL_LOGFILESALL_ROLES) db_unique_name=stdby

  SET log_archive_dest_=service=orcl ASYNC valid_for=(ONLINE_LOGFILEPRIMARY_ROLE) db_unique_name=orcl

  SET fal_client=stdby

  SET fal_server=orcl

  SET standby_file_management=AUTO

  SET log_archive_config=dg_config=(orclstdby)

  NOFILENAMECHECK;

  }

  > > > > > > > > > > > > > > > > > > > >

  using target database control file instead of recovery catalog

  allocated channel: d

  channel d: SID= device type=DISK

  allocated channel: d

  channel d: SID= device type=DISK

  allocated channel: cnv

  channel cnv: SID= device type=DISK

  allocated channel: cnv

  channel cnv: SID= device type=DISK

  Starting Duplicate Db at APR

  contents of Memory Script:

  {

  backup as copy reuse

  file  /u/app/oracle/product//db_/dbs/orapworcl auxiliary format

  /u/app/oracle/product//db_/dbs/orapwstdby   file

  /u/app/oracle/product//db_/dbs/spfileorclora auxiliary format

  /u/app/oracle/product//db_/dbs/spfilestdbyora   ;

  sql clone alter system set spfile= /u/app/oracle/product//db_/dbs/spfilestdbyora;

  }

  executing Memory Script

  Starting backup at APR

  Finished backup at APR

  sql statement: alter system set spfile= /u/app/oracle/product//db_/dbs/spfilestdbyora

  contents of Memory Script:

  {

  sql clone alter system set  db_unique_name =

  stdby comment=

   scope=spfile;

  sql clone alter system set  control_files =

  /u/app/oracle/oradata/orcl/controlctl comment=

   scope=spfile;

  sql clone alter system set  log_file_name_convert =

  /u/app/oracle/oradata/orcl/ /u/app/oracle/oradata/stdby/ comment=

   scope=spfile;

  sql clone alter system set  log_archive_dest_ =

  location=/u/app/oracle/flash_recovery_area/STDBY/ valid_for=(ALL_LOGFILESALL_ROLES) db_unique_name=stdby comment=

   scope=spfile;

  sql clone alter system set  log_archive_dest_ =

  service=orcl ASYNC valid_for=(ONLINE_LOGFILEPRIMARY_ROLE) db_unique_name=orcl comment=

   scope=spfile;

  sql clone alter system set  fal_client =

  stdby comment=

   scope=spfile;

  sql clone alter system set  fal_server =

  orcl comment=

   scope=spfile;

  sql clone alter system set  standby_file_management =

  AUTO comment=

   scope=spfile;

  sql clone alter system set  log_archive_config =

  dg_config=(orclstdby) comment=

   scope=spfile;

  shutdown clone immediate;

  startup clone nomount ;

  }

  executing Memory Script

  sql statement: alter system set  db_unique_name =  stdby comment= scope=spfile

  sql statement: alter system set  control_files =  /u/app/oracle/oradata/orcl/controlctl comment= scope=spfile

  sql statement: alter system set  log_file_name_convert =  /u/app/oracle/oradata/orcl/ /u/app/oracle/oradata/stdby/ comment= scope=spfile

  sql statement: alter system set  log_archive_dest_location=/u/app/oracle/flash_recovery_area/STDBY/ valid_for=(ALL_LOGFILESALL_ROLES) db_unique_name=stdby comment= scope=spfile

  sql statement: alter system set  log_archive_dest_service=orcl ASYNC valid_for=(ONLINE_LOGFILEPRIMARY_ROLE) db_unique_name=orcl comment= scope=spfile

  sql statement: alter system set  fal_client =  stdby comment= scope=spfile

  sql statement: alter system set  fal_server =  orcl comment= scope=spfile

  sql statement: alter system set  standby_file_management =  AUTO comment= scope=spfile

  sql statement: alter system set  log_archive_config =  dg_config=(orclstdby) comment= scope=spfile

  Oracle instance shut down

  connected to auxiliary database (not started)

  Oracle instance started

  Total System Global Area     bytes

  Fixed Size                     bytes

  Variable Size                bytes

  Database Buffers             bytes

  Redo Buffers                   bytes

  contents of Memory Script:

  {

  backup as copy current controlfile for standby auxiliary format  /u/app/oracle/oradata/orcl/controlctl;

  sql clone alter database mount standby database;

  }

  executing Memory Script

  Starting backup at APR

  channel d: starting datafile copy

  copying standby control file

  output file name=/home/oracle/snapcf_orclf tag=TAGT RECID= STAMP=

  channel d: datafile copy complete elapsed time: ::

  Finished backup at APR

  sql statement: alter database mount standby database

  contents of Memory Script:

  {

  set newname for tempfile  to

  /u/app/oracle/oradata/orcl/tempdbf;

  switch clone tempfile all;

  set newname for datafile  to

  /u/app/oracle/oradata/orcl/systemdbf;

  set newname for datafile  to

  /u/app/oracle/oradata/orcl/sysauxdbf;

  set newname for datafile  to

  /u/app/oracle/oradata/orcl/undotbsdbf;

  set newname for datafile  to

  /u/app/oracle/oradata/orcl/usersdbf;

  set newname for datafile  to

  /u/app/oracle/oradata/orcl/exampledbf;

  backup as copy reuse

  datafile  auxiliary format

  /u/app/oracle/oradata/orcl/systemdbf   datafile

   auxiliary format

  /u/app/oracle/oradata/orcl/sysauxdbf   datafile

   auxiliary format

  /u/app/oracle/oradata/orcl/undotbsdbf   datafile

   auxiliary format

  /u/app/oracle/oradata/orcl/usersdbf   datafile

   auxiliary format

  /u/app/oracle/oradata/orcl/exampledbf   ;

  sql alter system archive log current;

  }

  executing Memory Script

  executing command: SET NEWNAME

  renamed tempfile to /u/app/oracle/oradata/orcl/tempdbf in control file

  executing command: SET NEWNAME

  executing command: SET NEWNAME

  executing command: SET NEWNAME

  executing command: SET NEWNAME

  executing command: SET NEWNAME

  Starting backup at APR

  channel d: starting datafile copy

  input datafile file number= name=/u/app/oracle/oradata/orcl/sysauxdbf

  channel d: starting datafile copy

  input datafile file number= name=/u/app/oracle/oradata/orcl/systemdbf

  output file name=/u/app/oracle/oradata/orcl/systemdbf tag=TAGT RECID= STAMP=

  channel d: datafile copy complete elapsed time: ::

  channel d: starting datafile copy

  input datafile file number= name=/u/app/oracle/oradata/orcl/undotbsdbf

  output file name=/u/app/oracle/oradata/orcl/sysauxdbf tag=TAGT RECID= STAMP=

  channel d: datafile copy complete elapsed time: ::

  channel d: starting datafile copy

  input datafile file number= name=/u/app/oracle/oradata/orcl/exampledbf

  output file name=/u/app/oracle/oradata/orcl/exampledbf tag=TAGT RECID= STAMP=

  channel d: datafile copy complete elapsed time: ::

  channel d: starting datafile copy

  input datafile file number= name=/u/app/oracle/oradata/orcl/usersdbf

  output file name=/u/app/oracle/oradata/orcl/undotbsdbf tag=TAGT RECID= STAMP=

  channel d: datafile copy complete elapsed time: ::

  output file name=/u/app/oracle/oradata/orcl/usersdbf tag=TAGT RECID= STAMP=

  channel d: datafile copy complete elapsed time: ::

  Finished backup at APR

  sql statement: alter system archive log current

  contents of Memory Script:

  {

  backup as copy reuse

  archivelog like  /u/app/oracle/flash_recovery_area/ORCL/log___arc auxiliary format

  /u/app/oracle/flash_recovery_area/STDBY/log___arc   ;

  catalog clone archivelog  /u/app/oracle/flash_recovery_area/STDBY/log___arc;

  switch clone datafile all;

  }

  executing Memory Script

  Starting backup at APR

  channel d: starting archived log copy

  input archived log thread= sequence= RECID= STAMP=

  output file name=/u/app/oracle/flash_recovery_area/STDBY/log___arc RECID= STAMP=

  channel d: archived log copy complete elapsed time: ::

  Finished backup at APR

  cataloged archived log

  archived log file name=/u/app/oracle/flash_recovery_area/STDBY/log___arc RECID= STAMP=

  datafile switched to datafile copy

  input datafile copy RECID= STAMP= file name=/u/app/oracle/oradata/orcl/systemdbf

  datafile switched to datafile copy

  input datafile copy RECID= STAMP= file name=/u/app/oracle/oradata/orcl/sysauxdbf

  datafile switched to datafile copy

  input datafile copy RECID= STAMP= file name=/u/app/oracle/oradata/orcl/undotbsdbf

  datafile switched to datafile copy

  input datafile copy RECID= STAMP= file name=/u/app/oracle/oradata/orcl/usersdbf

  datafile switched to datafile copy

  input datafile copy RECID= STAMP= file name=/u/app/oracle/oradata/orcl/exampledbf

  contents of Memory Script:

  {

  set until scn  ;

  recover

  standby

  clone database

  delete archivelog

  ;

  }

  executing Memory Script

  executing command: SET until clause

  Starting recover at APR

  starting media recovery

  archived log for thread with sequence is already on disk as file /u/app/oracle/flash_recovery_area/STDBY/log___arc

  archived log file name=/u/app/oracle/flash_recovery_area/STDBY/log___arc thread= sequence=

  media recovery complete elapsed time: ::

  Finished recover at APR

  Finished Duplicate Db at APR

  released channel: d

  released channel: d


From:http://tw.wingwit.com/Article/program/Oracle/201311/16655.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.