RMAN跨平臺可傳輸表空間和資料庫

迷倪小魏發表於2017-09-17

這篇文章翻譯自Oracle 11gR2官方文件。詳細討論了使用RMAN工具的CONVERT DATAFILE,CONVERT TABLESPACE和CONVERT DATABASE命令實現跨平臺傳輸表空間和資料庫。


 

27  Transporting Data Across Platforms

You can use RMAN to transport tablespaces across platforms with different endian formats. You can also use RMAN to transport an entire database to a different platform so long as the two platforms have the same endian format.

你可以使用RMAN在具有不同位元組序序列的平臺之間傳輸表空間。 你也可以使用RMAN傳輸整個資料庫到不同的平臺,只要這兩個平臺具有相同的字串格式即可。

 

Overview of Cross-Platform Data Transportation

This section explains the basic concepts and tasks involved in transporting tablespaces and databases across platforms.

Purpose of Cross-Platform Data Transportation

You can transport tablespaces in a database that runs on one platform into a database that runs on a different platform. Typical uses of cross-platform transportable tablespaces include the following:

你可以將在一個平臺上執行的資料庫中的表空間傳輸到在不同平臺上執行的資料庫。跨平臺可運輸表空間的典型用途包括:

  • Publishing structured data as transportable tablespaces for distribution to customers, who can convert the tablespaces for integration into their existing databases regardless of platform
  • Moving data from a large data warehouse server to data marts on smaller computers such as Linux-based workstations or servers
  • Sharing read-only tablespaces across a heterogeneous cluster in which all hosts share the same endian format

·         將結構化資料作為可傳輸表空間釋出給客戶,無論平臺如何,可將表空間轉換為現有資料庫進行整合

·         將資料從大型資料倉儲伺服器移動到較小型計算機(如基於Linux的工作站或伺服器)上的資料集市

·         在異構叢集中共享只讀表空間,其中所有主機共享相同的端格式

You can also use RMAN to transport an entire database from one platform to another. For example, business requirements demand that you run your databases on less expensive servers that use a different platform. In this case, you can use RMAN to transport the entire database rather than re-create it and use import utilities or transportable tablespaces to repopulate the data.

你還可以使用RMAN將整個資料庫從一個平臺傳輸到另一個平臺。例如,業務需求要求在使用不同平臺的較便宜的伺服器上執行資料庫。在這種情況下,你可以使用RMAN傳輸整個資料庫,而不是重新建立它,並使用匯入實用程式或可移動表空間重新填充資料。

You can convert a database on the destination host or source host. Reasons for converting on the destination host include:

你可以在目標主機或源主機上轉換資料庫。 在目的主機上轉換的原因包括:

  • Avoiding performance overhead on the source host due to the conversion process
  • Distributing a database from one source system to multiple recipients on several different platforms
  • Evaluating a migration path for a new platform

·         由於轉換過程,避免源主機的效能開銷

·         將資料庫從一個源系統分發到多個不同平臺上的多個收件人

·         評估新平臺的遷移路徑

 

Basic Concepts of Cross-Platform Data Transportation

You must use the RMAN CONVERT command in a transportable tablespace operation when the  is different from the and the endian formats are different. If you are converting part of the database between platforms that have the same endian format, you can use operating system methods to copy the files from the source to the destination. If you are converting an entire, same endian database, any data files with undo information must be converted. You cannot copy the data files directly from the source to the destination platform.

當源平臺與目標平臺不同,並且位元組儲存順序不同時,必須在可移動表空間操作中使用RMAN CONVERT命令。 如果要在具有相同位元組儲存順序的平臺之間轉換部分資料庫,則可以使用作業系統方法將檔案從源端複製到目標端。 如果要轉換整個具有相同位元組儲存順序的資料庫,則必須轉換具有undo資訊的任何資料檔案。不能將資料檔案直接從源端複製到目標平臺。

Tablespace and Data File Conversion

You can perform tablespace conversion with the RMAN CONVERT TABLESPACE command on the source host, but not on the destination host. The CONVERT TABLESPACE command does not perform in-place conversion of data files. Rather, the command produces output files in the correct format for use on the destination platform. The command does not alter the contents of data files in the source database.

你以在源主機上使用RMAN CONVERT TABLESPACE命令進行表空間轉換,但該命令不能用在目標主機。 CONVERT TABLESPACE命令不能進行資料檔案的就地轉換。 相反,該命令會以正確的格式生成輸出檔案,以便在目標平臺上使用。 該命令不會更改源資料庫中的資料檔案的內容。

You can use the CONVERT DATAFILE command to convert files on the destination host, but not on the source host. The Data Pump Export utility generates an that, with data files manually copied to the destination host, can be imported into the destination database. Until the data files are transported into the destination database, the data files are not associated with a tablespace name in the database. In this case, RMAN cannot translate the tablespace name into a list of data files. Therefore, you must use CONVERT DATAFILE and identify the data files by file name.

可以在目標主機上使用CONVERT DATAFILE命令轉換檔案,但該命令不能用在源主機上。 “資料泵匯出”生成一個轉儲檔案,可將該dump檔案手動複製到目標主機,將其匯入目標資料庫。 在將資料檔案傳輸到目標資料庫之前,資料檔案不與資料庫中的表空間名稱相關聯。 在這種情況下,RMAN無法將表空間名稱轉換為資料檔案列表。 因此,必須使用CONVERT DATAFILE來根據檔名來識別資料檔案。

Database Conversion

To convert a whole database to a different platform, both platforms must use the same endian format. The RMAN CONVERT DATABASE command automates the movement of an entire database from a source platform to a destination platform. The transported database contains the same data as the source database and also has, with a few exceptions, the same settings as the source database.

要將整個資料庫轉換為不同的平臺,兩個平臺必須使用相同的位元組儲存順序。 RMAN CONVERT DATABASE命令自動將整個資料庫從源平臺移動到目標平臺。傳輸的資料庫包含與源資料庫相同的資料,除了少數特例,還有與源資料庫相同的設定。

自動傳送到目標平臺的檔案包括:

Files automatically transported to the destination platform include:

  • Data files that belong to permanent tablespaces

Unlike transporting tablespaces across platforms, transporting entire databases requires that certain types of blocks, such as blocks in undo segments, be reformatted to ensure compatibility with the destination platform. Even though the endian formats for the source and destination platforms are the same, the data files for a transportable database must under go a conversion process. You cannot simply copy data files from one platform to another as you can when transporting tablespaces.

?屬於永久表空間的資料檔案

與跨平臺傳輸表空間不同,傳輸整個資料庫需要重新格式化某些型別的塊(例如undo段中的塊),以確保與目標平臺的相容性。即使源平臺和目標平臺的位元組儲存順序相同,可傳輸資料庫的資料檔案必須經過轉換。當在傳輸表空間時,你不能簡單地將資料檔案從一個平臺複製到另一個平臺。

  • Initialization parameter file or server parameter file

If the database uses a text-based initialization parameter file, then RMAN transports it. If the database uses a server parameter file, then RMAN generates an initialization parameter file based on the server parameter file, transports it and creates a new server parameter file at the destination based on the settings in the initialization parameter file.

Usually, some parameters in the initialization parameter file require manual updating for the new database. For example, you may change the DB_NAMEand parameters such as CONTROL_FILES that indicate the locations of files on the destination host.

?初始化引數檔案或伺服器引數檔案

如果資料庫使用文字初始化引數檔案,那麼RMAN會傳輸它。如果資料庫使用伺服器引數檔案,首先RMAN會根據伺服器引數檔案生成一個初始化引數檔案,並在目標端根據初始化引數檔案中的設定傳輸並建立一個新的伺服器引數檔案。

通常,初始化引數檔案中的一些引數需要手動更新新的資料庫。例如,您可以更改DB_NAME和引數(如CONTROL_FILES),以指示目標主機上檔案的位置。

You can convert the format of the data files either on the source platform or on the destination platform. The CONVERT DATABASE ON DESTINATION PLATFORM command does not convert the format of data files. Rather, it generates scripts that you can run manually to perform the conversion. The CONVERT SCRIPTparameter creates a  that you can manually execute at the destination host to convert data file copies in batch mode. The TRANSPORT SCRIPTparameter generates a  that contains SQL statements to create the new database on the destination platform.

可以在源平臺或目標平臺上轉換資料檔案的格式。 CONVERT DATABASE ON DESTINATION PLATFORM命令不轉換資料檔案的格式。 相反,它生成可以手動執行以執行轉換的指令碼。 CONVERT SCRIPT引數建立一個轉換指令碼,你可以在目標主機上手動執行轉換指令碼,以批處理模式轉換資料檔案副本。 TRANSPORT SCRIPT引數生成包含SQL語句的傳輸指令碼,以在目標平臺上建立新的資料庫。

Performing Cross-Platform Tablespace Conversion on the Source Host(在源主機中執行跨平臺表空間傳輸)

For purposes of illustration, assume that you must transport tablespaces finance and hr from source database prod_source, which runs on a Sun Solaris host. You plan to transport them to destination database prod_dest running on a Linux PC. You plan to store the converted data files in the temporary directory/tmp/transport_linux/ on the source host.

為了說明情況,假設你必須從在Sun Solaris主機上執行的源資料庫prod_source傳輸表空間financehr 你計劃將它們傳輸到執行在Linux PC上的目標資料庫prod_dest。你計劃將轉換的資料檔案儲存在源主機上的/ tmp / transport_linux /臨時目錄中。

To perform cross-platform tablespace conversion on the source host:

在源主機上執行跨平臺表空間轉換:

  1. Start SQL*Plus and connect to the source database prod_source with administrator privileges.

啟動SQL * Plus,並以管理員許可權連線到源資料庫prod_source

  1. Query the name for the destination platform in the V$TRANSPORTABLE_PLATFORM view.

The database has a list of its own internal names for each platform supporting cross-platform data transport. You may need the exact name of the source or destination platform as a parameter to the CONVERT command. Query V$TRANSPORTABLE_PLATFORM to get the platform names. The following example queries Linux platform names:

V $ TRANSPORTABLE_PLATFORM檢視中查詢目標平臺的名稱。

資料庫具有支援跨平臺資料傳輸的每個平臺的自己內部名稱的列表。 你可能需要源平臺或目標平臺的確切名稱作為CONVERT命令的引數。 查詢V $ TRANSPORTABLE_PLATFORM以獲取平臺名稱。 以下示例查詢Linux平臺名稱:

SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT
FROM   V$TRANSPORTABLE_PLATFORM
WHERE  UPPER(PLATFORM_NAME) LIKE '%LINUX%';

The PLATFORM_NAME for Linux on a PC is Linux IA (32-bit).

  1. Place the tablespaces to be transported in read-only mode. For example, enter:

將待傳輸的表空間放置在只讀模式。

ALTER TABLESPACE finance READ ONLY;
ALTER TABLESPACE hr READ ONLY;

  1. Choose a method for naming the output files.

You must use the FORMAT or DB_FILE_NAME_CONVERT arguments to the CONVERT command to control the names of the output files. The rules are listed in order of precedence:

你必須使用CONVERT命令的FORMATDB_FILE_NAME_CONVERT引數來控制輸出檔案的名稱。 規則按優先順序列出:

    1. Files that match any patterns provided in CONVERT ... DB_FILE_NAME_CONVERT clause are named based upon this pattern.
    2. If you specify a FORMAT clause, then any file not named based on patterns provided in CONVERT ... DB_FILE_NAME_CONVERT clause is named based on the FORMAT pattern.

如果指定了FORMAT子句,則根據CONVERT ... DB_FILE_NAME_CONVERT子句中提供的模式未命名的任何檔案都將基於FORMAT模式進行命名。

Note:

You cannot use CONVERT ... DB_FILE_NAME_CONVERT to generate output file names for the CONVERT command when the source and destination files have Oracle Managed File names.

當原始檔和目標檔案具有Oracle託管檔名時,不能使用CONVERT ... DB_FILE_NAME_CONVERTCONVERT命令生成輸出檔名。

 

  1. Start RMAN and connect to the source database (not the destination database) as TARGET. For example, enter:

% rman
RMAN> CONNECT TARGET SYS@prod_source

  1. Run the CONVERT TABLESPACE command to convert the data files into the endian format of the destination host.

In the following example, the FORMAT argument controls the name and location of the converted data files:

RMAN> CONVERT TABLESPACE finance,hr

2>   TO PLATFORM 'Linux IA (32-bit)'

3>   FORMAT '/tmp/transport_linux/%U';

The result is a set of converted data files in the /tmp/transport_linux/ directory, with data in the correct endian format for the Linux IA (32-bit) platform.

  1. Follow the rest of the general outline for transporting tablespaces:
    1. Use the Oracle Data Pump Export utility to create the export dump file on the source host.
    2. Move the converted data files and the export dump file from the source host to the desired directories on the destination host.
    3. Plug the tablespace into the new database with the Import utility.
    4. If applicable, place the transported tablespaces into read/write mode.

使用Oracle 資料泵在源主機上建立匯出轉儲檔案。

將轉換的資料檔案和匯出轉儲檔案從源主機移動到目標主機上的所需目錄。

使用匯入程式將表空間插入新資料庫。

如果適用,將傳輸的表空間設定為讀/寫模式。

 

Performing Cross-Platform Data File Conversion on the Destination Host(在目標主機中執行跨平臺資料檔案傳輸)

About Cross-Platform Data File Conversion on the Destination Host

Data file conversion necessitates that you choose a technique for naming the output files. You must use the FORMAT or DB_FILE_NAME_CONVERT arguments to theCONVERT command to control the naming of output files. The rules are listed in order of precedence:

你必須使用CONVERT命令的FORMATDB_FILE_NAME_CONVERT引數來控制命名輸出檔案。規則按優先順序列出:

  1. Files that match any patterns provided in CONVERT ... DB_FILE_NAME_CONVERT clause are named based upon this pattern.
  2. If you specify a FORMAT clause, then any file not named based on patterns provided in CONVERT ... DB_FILE_NAME_CONVERT clause is named based on theFORMAT pattern.

CONVERT中提供的任何模式匹配的檔案... DB_FILE_NAME_CONVERT子句根據此模式命名。

如果指定FORMAT子句,則根據CONVERT ... DB_FILE_NAME_CONVERT子句中提供的模式未命名的任何檔案都將基於FORMAT模式進行命名。

Note:

You cannot use CONVERT ... DB_FILE_NAME_CONVERT to generate output file names for the CONVERT command when both the source and destination files are Oracle Managed Files.

當原始檔和目標檔案都是Oracle託管檔案時,不能使用CONVERT ... DB_FILE_NAME_CONVERT來生成CONVERT命令的輸出檔名。

If the source and destination platforms differ, then you must specify the FROM PLATFORM parameter. View platform names by querying the V$TRANSPORTABLE_PLATFORM. The FROM PLATFORM value must match the format of the data files to be converted to avoid an error. If you do not specify FROM PLATFORM, then this parameter defaults to the value of the destination platform.

如果源和目標平臺不同,則必須指定FROM PLATFORM引數。透過查詢V $ TRANSPORTABLE_PLATFORM檢視平臺名稱。 FROM PLATFORM值必須與要轉換的資料檔案的格式相匹配,以避免錯誤。如果不指定FROM PLATFORM,則此引數預設為目標平臺的值。

Using CONVERT DATAFILE to Convert Data File Formats

This section explains how to use the CONVERT DATAFILE command. The section assumes that you intend to transport tablespaces finance (data filesfin/fin01.dbf and fin/fin02.dbf) and hr (data files hr/hr01.dbf and hr/hr02.dbf) from a source database named prod_source. The database runs on a Sun Solaris host. You plan to transport these tablespaces into a destination database named prod_dest, which runs on a Linux PC. You plan to perform conversion on the destination host.

假設你打算從prod_source源資料庫傳輸表空間financedata filesfin / fin01.dbffin / fin02.dbf)和hr(資料檔案hr / hr01.dbfhr / hr02.dbf)。 該資料庫在Sun Solaris主機上執行。 你計劃將這些表空間傳輸到prod_dest目標資料庫,該資料庫在Linux PC上執行。 你計劃在目標主機上執行轉換。

When the data files are plugged into the destination database, you plan to store them in /orahome/dbs and preserve the current directory structure. That is, data files for the hr tablespace are stored in the /orahome/dbs/hr subdirectory, and data files for the finance tablespace are stored in the /orahome/dbs/fin directory.

當資料檔案插入目標資料庫時,你計劃將它們儲存在/ orahome / dbs中,並保留當前的目錄結構。 也就是說,hr表空間的資料檔案儲存在/ orahome / dbs / hr子目錄中,finance表空間資料檔案儲存在/ orahome / dbs / fin目錄中。

To perform cross-platform data file conversion on the destination host:

  1. Start SQL*Plus and connect to the source database prod_source with administrator privileges.

啟動SQL * Plus,並以管理員許可權連線到源資料庫prod_source

  1. Query the name for the source platform in V$TRANSPORTABLE_PLATFORM.

The database has a list of its own internal names for each platform supporting cross-platform data transport. You may need the exact name of the source or destination platform as a parameter to the CONVERT command. For example, you can obtain the platform name of the connected database as follows:

V $ TRANSPORTABLE_PLATFORM中查詢源平臺的名稱。

資料庫具有支援跨平臺資料傳輸的每個平臺的自己內部名稱的列表。 您可能需要源或目標平臺的確切名稱作為CONVERT命令的引數。 例如,可以如下獲取連線的資料庫的平臺名稱:

SELECT PLATFORM_NAME
FROM   V$TRANSPORTABLE_PLATFORM
WHERE  PLATFORM_ID =
        ( SELECT PLATFORM_ID
                   FROM   V$DATABASE );

For this scenario, assume that the PLATFORM_NAME for the source host is Solaris[tm] OE (64-bit).

  1. Identify the tablespaces to be transported from the source database and place them in read-only mode.

將待傳輸的表空間放置在只讀模式。

For example, enter the following SQL statements to place finance and hr in read-only mode:

ALTER TABLESPACE finance READ ONLY;
ALTER TABLESPACE hr READ ONLY;

  1. On the source host, use Data Pump Export to create the export dump file

In this example, the dump file is named expdat.dmp.

在源主機使用資料泵匯出一個dump檔案

  1. Make the export dump file and the data files to be transported available to the destination host.

將匯出轉儲檔案和要傳輸的資料檔案提供給目標主機

You can use NFS to make the dump file and current database files (not copies) accessible. Alternatively, you can use an operating system utility to copy these files to the destination host.

In this example, you store the files in the /tmp/transport_solaris/ directory of the destination host. You preserve the subdirectory structure from the original location of the files, that is, the data files are stored as:

  • /tmp/transport_solaris/fin/fin01.dbf
  • /tmp/transport_solaris/fin/fin02.dbf
  • /tmp/transport_solaris/hr/hr01.dbf
  • /tmp/transport_solaris/hr/hr02.dbf
  • Start RMAN and connect to the destination database (not the source database) as TARGET. For example, enter the following command:
  • % rman
    RMAN> CONNECT TARGET SYS@prod_dest

    1. Execute the CONVERT DATAFILE command to convert the data files into the endian format of the destination host.

    執行CONVERT DATAFILE命令將資料檔案轉換為目標主機的位元組儲存順序。

    In this example, you use DB_FILE_NAME_CONVERT to control the name and location of the converted data files. You also specify the FROM PLATFORM clause.

    RMAN> CONVERT DATAFILE
    2>   '/tmp/transport_solaris/fin/fin01.dbf',
    3>   '/tmp/transport_solaris/fin/fin02.dbf',
    4>   '/tmp/transport_solaris/hr/hr01.dbf',
    5>   '/tmp/transport_solaris/hr/hr02.dbf'
    6>   DB_FILE_NAME_CONVERT
    7>     '/tmp/transport_solaris/fin','/orahome/dbs/fin',
    8>     '/tmp/transport_solaris/hr','/orahome/dbs/hr'
    9>   FROM PLATFORM 'Solaris[tm] OE (64-bit)

    The result is a set of converted data files in the /orahome/dbs/ directory that are named as follows:

    • /orahome/dbs/fin/fin01.dbf
    • /orahome/dbs/fin/fin02.dbf
    • /orahome/dbs/hr/hr01.dbf
    • /orahome/dbs/hr/hr02.dbf
  • Follow the rest of the general outline for transporting tablespaces:
      1. Plug the tablespace into the new database with the Import utility.
      2. If applicable, place the transported tablespaces into read-only mode.

    使用匯入程式將表空間插入新資料庫。

    將傳送的表空間置於只讀模式。


     

    Checking the Database Before Cross-Platform Database Conversion(跨平臺資料庫轉換之前檢查資料庫)

    As explained in , you can use the RMAN CONVERT DATABASE command to automate the copying of an entire database from one platform to another.

    你可以使用RMAN CONVERT DATABASE命令自動將整個資料庫從一個平臺複製到另一個平臺。

    Before converting the database, see the list of CONVERT DATABASE command prerequisites described in Confirm that you meet all these prerequisites before attempting the procedure in this section.

    在轉換資料庫之前,請參閱Oracle資料庫備份和恢復參考中描述的CONVERT DATABASE命令先決條件列表。確認在嘗試本節中的過程之前,滿足所有這些先決條件。

    One prerequisite is that both the source and destination platform must share the same endian format. For example, you can transport a database from Microsoft Windows to Linux for x86 (both little-endian), or from HP-UX to AIX (both big-endian), but not from HP-UX to Linux for x86 (big-endian to little-endian).

    一個先決條件是源平臺和目標平臺必須共享相同的位元組儲存順序。例如,你可以將資料庫從Microsoft Windows傳輸到Linux for x86(小端),或從HP-UX傳輸到AIX(大端),但不能從HP-UXLinux for x86(大端到小端)。

    Note:

    If you cannot use the CONVERT DATABASE command because the platforms do not share endian formats, then you can create a database on a destination platform manually and transport needed tablespaces from the source database with cross-platform transportable tablespaces.

    如果不能使用CONVERT DATABASE命令,因為平臺位元組儲存序列不一致,那麼你可以手動建立目標平臺上的資料庫,並使用跨平臺的可移動表空間從源資料庫傳輸所需的表空間。

    When you transport entire databases, note that certain files require RMAN conversion to ensure compatibility with the destination platform. Even though the endian formats for the source and destination platform are the same, these files cannot be simply copied from the source to the destination system. The following kinds of files require RMAN conversion:

    當傳輸整個資料庫時,請注意,某些檔案需要進行RMAN轉換才能確保與目標平臺的相容性。即使源平臺和目標平臺的位元組儲存順序相同,這些檔案也不能簡單地從原始檔複製到目標系統。以下型別的檔案需要RMAN轉換:

    • Any file containing undo segments
    • Any file containing automatic segment space management (ASSM) segment headers that is being transported to or from the HP Tru64 platform

    ·         任何包含undo段的檔案

    ·         任何包含自動段空間管理(ASSM)段頭的檔案,這些段頭正在傳輸到HP Tru64平臺或從HP Tru64平臺傳輸

    The CONVERT DATABASE command, by default, processes all data files in the database using RMAN conversion. The RMAN conversion copies the files from one location to another, even when it does not make any changes to the file. If you have other preferred means to copy those files that do not require RMAN conversion, you can use the SKIP UNNECESSARY DATAFILES option of the CONVERT DATABASE command. If you select this option, then the CONVERT DATABASE command only processes the kinds of files previously mentioned. All other files must be copied by the user from the source to the destination database.

    CONVERT DATABASE命令預設使用RMAN轉換來處理資料庫中的所有資料檔案。即使檔案沒有進行任何更改,RMAN轉換將檔案從一個位置複製到另一個位置。如果有其他首選方法來複制不需要RMAN轉換的檔案,則可以使用CONVERT DATABASE命令的SKIP UNNECESSARY DATAFILES選項。如果選擇此選項,則CONVERT DATABASE命令僅處理上述檔案的種類。所有其他檔案必須由使用者從源複製到目標資料庫。

    The files should be copied while the source database is open in read-only mode. Similarly, if the conversion is performed at the destination, all data files should be copied to the destination when the source database is open in read-only mode.

    在源資料庫以只讀模式開啟時,在複製檔案。類似地,如果在目的地執行轉換,則當源資料庫以只讀模式開啟時,所有資料檔案都應被複制到目標。

    To prepare for database conversion:

    1. Start a SQL*Plus session as SYSDBA on the source database.

    SYSDBA的許可權使用SQl*Plus連線到源資料庫

    1. Open the database in read-only mode.

    以只讀模式開啟資料庫

    ALTER DATABASE OPEN READ ONLY;

    1. Ensure that server output is on in SQL*Plus.

    For example, enter the following SQL*Plus command:

    SET SERVEROUTPUT ON

    1. Execute the DBMS_TDB.CHECK_DB function.

    執行DBMS_TDB.CHECK_DB函式

    This check ensures that no conditions would prevent the transport of the database, such as incorrect compatibility settings, in-doubt or active transactions, or incompatible endian formats between the source platform and destination platform.

    此檢查確保沒有條件會阻止資料庫的傳輸,例如不正確的相容性設定,無效或活動事務,或源平臺和目標平臺之間不相容的位元組儲存順序。

    You can call CHECK_DB without arguments to see if a condition at the source database prevents transport. You can also call this function with the arguments shown in .

    可以呼叫CHECK_DB而不用引數來檢視源資料庫中的條件是否阻止傳輸。還可以使用表27-1所示的引數呼叫此函式。

    Table 27-1 CHECK_DB Function Parameters

    Parameter

    Description

    target_platform_name

    The name of the destination platform as it appears in the  view.

    This parameter is optional, but is required when the skip_option parameter is used. If omitted, it is assumed that the destination platform is compatible with the source platform, and only the conditions not related to platform compatibility are tested.

    skip_option

    Specifies which, if any, parts of the database to skip when checking whether the database can be transported. Supported values (of type NUMBER) are:

    o    SKIP_NONE (or 0), which checks all tablespaces

    o    SKIP_OFFLINE (or 2), which skips checking data files in offline tablespaces

    o    SKIP_READONLY (or 3), which skips checking data files in read-only tablespaces

     

     illustrates executing CHECK_DB on a 32-bit Linux platform for transporting a database to 32-bit Windows, skipping read-only tablespaces.

    驗證在32Linux平臺上執行CHECK_DB,用於將資料庫傳輸到32Windows,並跳過只讀表空間。

    Example 27-1 Executing DBMS_TDB.CHECK_DB

    DECLARE

      db_ready BOOLEAN;

    BEGIN

      db_ready :=

           DBMS_TDB.CHECK_DB('Microsoft Windows IA (32-bit)',DBMS_TDB.SKIP_READONLY);

    END;

    /

     

    PL/SQL procedure successfully completed.

    If no warnings appear, or if DBMS_TDB.CHECK_DB returns TRUE, then you can transport the database. Proceed to Step 6.

    如果沒有出現警告,或DBMS_TDB.CHECK_DB返回TRUE,則可以傳輸資料庫。 繼續步驟6

    If warnings appear, or if DBMS_TDB.CHECK_DB returns FALSE, then you cannot currently transport the database. Proceed to Step 5.

    如果出現警告,或DBMS_TDB.CHECK_DB返回FALSE,則無法傳輸資料庫。 繼續步驟5

    1. Examine the output to learn why the database cannot be transported, fix the problem if possible, and then return to the Step 4. See the DBMS_TDBdocumentation for the conditions present.

    檢查輸出以瞭解為什麼無法傳輸資料庫,如果可能的話可以解決問題,然後返回到步驟4.有關條件的資訊,請參閱DBMS_TDB文件。

    1. Execute the DBMS_TDB.CHECK_EXTERNAL function to identify any external tables, directories, or BFILEs. RMAN cannot automate the transport of these files, so you must copy the files manually and re-create the database directories.

    執行DBMS_TDB.CHECK_EXTERNAL函式來識別任何外部表,目錄或BFILE RMAN無法自動傳輸這些檔案,因此你必須手動複製檔案並重新建立資料庫目錄。

     

     shows how to call the DBMS_TDB.CHECK_EXTERNAL function.

    如何呼叫DBMS_TDB.CHECK_EXTERNAL函式

    Example 27-2 Executing DBMS_TDB.CHECK_EXTERNAL

    DECLARE

         external BOOLEAN;

    BEGIN

        /* value of external is ignored, but with SERVEROUTPUT set to ON

         * dbms_tdb.check_external displays report of external objects

         * on console */

        external := DBMS_TDB.CHECK_EXTERNAL;

    END;

    /

    If no external objects exist, then the procedure completes with no output. If external objects exist, however, then the output is similar to the following:

    如果沒有外部物件存在,那麼該過程完成,沒有輸出。 但是,如果存在外部物件,則輸出類似於以下內容:

    The following external tables exist in the database:
    SH.SALES_TRANSACTIONS_EXT
    The following directories exist in the database:
    SYS.DATA_PUMP_DIR, SYS.MEDIA_DIR, SYS.DATA_FILE_DIR, SYS.LOG_FILE_DIR
    The following BFILEs exist in the database:
    PM.PRINT_MEDIA

     
    PL/SQL procedure successfully completed.




    Converting Data Files on the Source Host When Transporting a Database
    (在傳輸資料庫時轉換源主機上的資料檔案)

    When you transport entire databases, certain types of blocks, such as blocks in undo segments, must be reformatted to ensure compatibility with the destination platform. Even though the endian formats for the source and destination platform are the same, the data files for a transportable database must undergo a conversion process. You cannot simply copy data files from one platform to another as you can when transporting tablespaces.

    當在傳輸整個資料庫時,必須重新格式化某些型別的塊(例如undo段中的塊),以確保與目標平臺的相容性。儘管源平臺和目標平臺的位元組儲存順序相同,但可傳輸資料庫的資料檔案必須經過轉換過程。你不可以在傳輸表空間時簡單地將資料檔案從一個平臺複製到另一個平臺。

    Data files with undo information and those from the HP Tru64 platform must be converted. By default, all data files are converted when the CONVERT DATABASEcommand is executed. If, however, SKIP UNNECESSARY DATAFILES is used in the CONVERT DATABASE command, then the data files with undo segments and those from the HP Tru64 platform are converted. The data files without undo segments can be copied to the new database using FTP, an operating system copy command, or some other mechanism.

    必須轉換具有undo資訊和HP Tru64平臺的資料檔案。預設情況下,執行CONVERT DATABASE命令時,將轉換所有資料檔案。但是,如果在CONVERT DATABASE命令中使用SKIP UNNESSESSARY DATAFILES引數,則會轉換具有undo段和HP Tru64平臺的資料檔案。沒有undo段的資料檔案可以使用FTP,作業系統複製命令或其他機制複製到新資料庫。

    This section assumes that you have already met all of the CONVERT DATABASE prerequisites and followed the steps in . The goal of this procedure is to convert the format of data files on the source host as part of a cross-platform database transport.

    假設你已經滿足了所有的CONVERT DATABASE先決條件,並按照“"Checking the Database Before Cross-Platform Database Conversion”中的步驟。該過程的目標是在源主機上轉換資料檔案的格式,作為跨平臺資料庫傳輸的一部分。

    Assume that you want to convert a database running on Solaris to a database that runs on Windows.

    假設要將在Solaris上執行的資料庫轉換為在Windows上執行的資料庫。

    To convert the database on the source platform:

    1. Open the source database in read-only mode.

    ALTER DATABASE OPEN READ ONLY;

    1. Start RMAN and connect to the source database as TARGET. For example, enter the following commands:

    % rman
    RMAN> CONNECT TARGET SYS@source_db

    1. Run the CONVERT DATABASE command.

     shows a CONVERT DATABASE command (sample output included). The TRANSPORT SCRIPT parameter specifies the location of the generated SQL script that you can use to create the new database. The TO PLATFORM parameter indicates the platform of the destination database. TheDB_FILE_NAME_CONVERT parameter specifies the naming scheme for the generated data files.

    27-3顯示CONVERT DATABASE命令(包括樣本輸出)。 TRANSPORT SCRIPT引數指定可用於建立新資料庫的生成的SQL指令碼的位置。 TO PLATFORM引數指示目標資料庫的平臺。 DB_FILE_NAME_CONVERT引數指定生成的資料檔案的命名方案。

    Example 27-3 Converting a Database on the Source Host

    RMAN> CONVERT DATABASE

    2>   NEW DATABASE 'newdb'

    3>   TRANSPORT SCRIPT '/tmp/convertdb/transportscript.sql'

    4>   TO PLATFORM 'Microsoft Windows IA (32-bit)'

    5>   DB_FILE_NAME_CONVERT '/disk1/oracle/dbs' '/tmp/convertdb';

     

    Starting convert at 25-NOV-06

    using channel ORA_DISK_1

     

    External table SH.SALES_TRANSACTIONS_EXT found in the database

     

    Directory SYS.DATA_PUMP_DIR found in the database

    Directory SYS.MEDIA_DIR found in the database

    Directory SYS.DATA_FILE_DIR found in the database

    Directory SYS.LOG_FILE_DIR found in the database

     

    BFILE PM.PRINT_MEDIA found in the database

     

    User SYS with SYSDBA and SYSOPER privilege found in password file

    User OPER with SYSDBA privilege found in password file

    channel ORA_DISK_1: starting datafile conversion

    input datafile fno=00001 name=/disk1/oracle/dbs/tbs_01.f

    converted datafile=/tmp/convertdb/tbs_01.f

    channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:15

    channel ORA_DISK_1: starting datafile conversion

    input datafile fno=00002 name=/disk1/oracle/dbs/tbs_ax1.f

    converted datafile=/tmp/convertdb/tbs_ax1.f

    channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03

    .

    .

    .

    channel ORA_DISK_1: starting datafile conversion

    input datafile fno=00016 name=/disk1/oracle/dbs/tbs_52.f

    converted datafile=/tmp/convertdb/tbs_52.f

    channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01

    Run SQL script /tmp/convertdb/transportscript.sql on the destination platform

      to create database

    Edit init.ora file init_00gb3vfv_1_0.ora. This PFILE will be used to

      create the database on the destination platform

    To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on

      the destination platform

    To change the internal database identifier, use DBNEWID Utility

    Finished backup at 25-NOV-06

    1. After CONVERT DATABASE completes, you can open the source database read/write again.

    CONVERT DATABASE完成後,可以以讀寫的方式開啟源資料庫。

    1. Move the data files generated by CONVERT DATABASE to the desired locations on the destination host.

    CONVERT DATABASE生成的資料檔案移動到目標主機上所需的位置。

    In , the command creates the files in the /tmp/convertdb/ directory on the source host. Move these files to the directory on the destination host that will contain the destination database files.

    在例27-3中,該命令將在源主機上的/ tmp / convertdb /目錄中建立檔案。 將這些檔案移動到將包含目標資料庫檔案的目標主機上的目錄。

    1. If the path to the data files is different on the destination host, then edit the transport script to refer to the new data file locations.

    如果資料檔案的路徑在目標主機上不同,則編輯傳輸指令碼以引用新的資料檔案位置。

    1. If necessary, edit the initialization parameter file to change any settings for the destination database.

    如有必要,請編輯初始化引數檔案以更改目標資料庫的任何設定。

    You should edit several entries at the top of the initialization parameter file when the database is moved to the destination platform. For example, the initialization parameter file may look as follows:

    當資料庫移動到目標平臺時,你應該編輯初始化引數檔案頂部的多個條目。 例如,初始化引數檔案可能如下所示:

    # Please change the values of the following parameters:
    control_files            = "/tmp/convertdb/cf_D-NEWDBT_id-1778429277_00gb9u2s"
    db_recovery_file_dest    = "/tmp/convertdb/orcva"
    db_recovery_file_dest_size= 10737418240
    instance_name            = "NEWDBT"
    service_names            = "NEWDBT.example.com"
    plsql_native_library_dir = "/tmp/convertdb/plsqlnld1"
    db_name                  = "NEWDBT"

    1. If necessary, edit the transport script to use the new names for the converted data files.

    如有必要,請編輯傳輸指令碼以使用轉換後的資料檔案的新名稱。

    In , the transport script is named /tmp/convertdb/transportscript.sql. You run this script on the destination host to create the database. Thus, you must edit this script with the correct names for the data files.

    在例27-3中,傳輸指令碼命名為/tmp/convertdb/transportscript.sql 您可以在目標主機上執行此指令碼來建立資料庫。 因此,您必須使用資料檔案的正確名稱編輯此指令碼

    1. On the destination host, start SQL*Plus and connect to the destination database instance as SYSDBA using operating system authentication.

    在目標主機上,啟動SQL * Plus,並使用作業系統身份驗證以SYSDBA連線到目標資料庫例項。

    For example, connect as follows:

    SQL> CONNECT / AS SYSDBA

    If you choose not to use operating system authentication, then you must first configure Oracle Net files, create a , and start the listener. You can then connect to the instance with a net service name.

    如果你選擇不使用作業系統身份驗證,則必須首先配置Oracle Net檔案,建立密碼檔案,然後啟動偵聽器。 然後,您可以使用網路服務名稱連線到例項。

    1. Execute the transport script in SQL*Plus to create the new database on the destination host.

    SQL * Plus中執行傳輸指令碼,以在目標主機上建立新的資料庫

    SQL> @transportscript

    When the transport script finishes, the creation of the new database is complete.

    傳輸指令碼完成後,新資料庫的建立就完成了

     

    Converting Data Files on the Destination Host When Transporting a Database(在傳輸資料庫時轉換目標主機上的資料檔案)

    This section assumes that you have already met all of the CONVERT DATABASE command prerequisites and followed the steps in . The goal of this procedure is to convert the format of data files on the destination host as part of a cross-platform database transport.

    假設你已經滿足了所有CONVERT DATABASE命令的先決條件,並按照“"Checking the Database Before Cross-Platform Database Conversion”中的步驟進行操作。 此過程的目標是在目標主機上轉換資料檔案的格式,作為跨平臺資料庫傳輸的一部分。

    Perform the data file conversion in the following phases:

    在以下階段執行資料檔案轉換:

    在源主機上執行初步的資料檔案轉換步驟

    轉換目標主機上的資料檔案

    Performing Preliminary Data File Conversion Steps on the Source Host

    In this procedure, you execute the CONVERT DATABASE command on the source host. This command generates an initialization parameter file and scripts that you can edit for use on the destination host. You also copy the unconverted data files from the source host to the destination host.

    在此過程中,你可以在源主機上執行CONVERT DATABASE命令。 此命令生成一個初始化引數檔案和指令碼,你可以編輯該指令碼以在目標主機上使用。你還將未轉換的資料檔案從源主機複製到目標主機。

    To perform preliminary data file conversion steps on the source host:

    1. Ensure that the database is open in read-only mode.

    確保資料庫是以只讀方式開啟

    1. Start RMAN and connect to the source database as TARGET.

    For example, enter the following commands:

    % rman
    RMAN> CONNECT TARGET SYS@source_db

    1. Run the CONVERT DATABASE ON DESTINATION PLATFORM command.

     shows a sample CONVERT DATABASE command (sample output included). The ON DESTINATION PLATFORM parameter specifies that any CONVERTcommands required for data files should be performed on the destination platform rather than the source platform. The FORMAT parameter specifies the naming scheme for the generated files.

    示例27-4顯示了一個示例CONVERT DATABASE命令(包括樣本輸出)。 ON DESTINATION PLATFORM引數指定在目標平臺而不是源平臺上執行資料檔案所需的任何CONVERT命令。 FORMAT引數指定生成的檔案的命名方案。

    Example 27-4 Executing CONVERT DATABASE ON DESTINATION PLATFORM

    RMAN> CONVERT DATABASE

    2>   ON DESTINATION PLATFORM

    3>   CONVERT SCRIPT '/tmp/convertdb/convertscript-target'

    4>   TRANSPORT SCRIPT '/tmp/convertdb/transportscript-target'

    5>   NEW DATABASE 'newdbt'

    6>   FORMAT '/tmp/convertdb/%U';

     

    Starting convert at 28-JAN-05

    using target database control file instead of recovery catalog

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=39 devtype=DISK

     

    External table SH.SALES_TRANSACTIONS_EXT found in the database

     

    Directory SYS.DATA_PUMP_DIR found in the database

    Directory SYS.MEDIA_DIR found in the database

    Directory SYS.DATA_FILE_DIR found in the database

    Directory SYS.LOG_FILE_DIR found in the database

     

    BFILE PM.PRINT_MEDIA found in the database

     

    User SYS with SYSDBA and SYSOPER privilege found in password file

    User OPER with SYSDBA privilege found in password file

    channel ORA_DISK_1: starting to check datafiles

    input datafile fno=00001 name=/disk1/oracle/dbs/tbs_01.f

    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00

    channel ORA_DISK_1: starting to check datafiles

    input datafile fno=00002 name=/disk1/oracle/dbs/tbs_ax1.f

    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00

    channel ORA_DISK_1: starting to check datafiles

    input datafile fno=00017 name=/disk1/oracle/dbs/tbs_03.f

    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00

    .

    .

    .

    channel ORA_DISK_1: starting to check datafiles

    input datafile fno=00015 name=/disk1/oracle/dbs/tbs_51.f

    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00

    channel ORA_DISK_1: starting to check datafiles

    input datafile fno=00016 name=/disk1/oracle/dbs/tbs_52.f

    channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00

    Run SQL script /tmp/convertdb/transportscript-target on the destination platform to create database

    Edit init.ora file /tmp/convertdb/init_00gb9u2s_1_0.ora. This PFILE will be used to create the database on the destination platform

    Run RMAN script /tmp/convertdb/convertscript-target on destination platform to convert datafiles

    To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the destination platform

    To change the internal database identifier, use DBNEWID Utility

    Finished backup at 28-JAN-05

    The command in  creates a transport script, an initialization parameter file for the new database, and a convert script containing RMANCONVERT DATAFILE commands for each data file being converted.

    示例27-4中的命令建立一個傳輸指令碼,一個用於新資料庫的初始化引數檔案,以及一個轉換指令碼,其中包含要轉換的每個資料檔案的RMANCONVERT DATAFILE命令。

    Note:

    CONVERT DATABASE ON DESTINATION PLATFORM does not produce converted data file copies. The command only creates scripts.

    CONVERT DATABASE ON DESTINATION PLATFORM不會生成轉換的資料檔案副本。 該命令僅建立指令碼。

    1. Use an operating system utility to copy the following files to a temporary location on the destination host:

    使用作業系統實用程式將以下檔案複製到目標主機上的臨時位置:

    • The data files to be converted(要轉換的資料檔案)
    • The convert script(轉換指令碼)
    • The transport script(傳輸指令碼)
    • The initialization file for the destination database(目標資料庫的初始化檔案)
  • Make the source database read/write.
  • 使源資料庫讀/寫。

    Converting Data Files on the Destination Host

    This section explains how to use the script created in the previous section to convert the data files on the destination host.

    本節介紹如何使用上一節中建立的指令碼來轉換目標主機上的資料檔案

    The convert script created in the previous phase uses the original data file names of the source database files. The FORMAT parameter specifies the name that was generated with the FORMAT or DB_FILE_NAME_CONVERT parameter of the CONVERT DATABASE command.

    在前一階段建立的轉換指令碼使用源資料庫檔案的原始資料檔名。 FORMAT引數指定使用CONVERT DATABASE命令的FORMATDB_FILE_NAME_CONVERT引數生成的名稱。

    If the data files of the source database are accessible from the destination host with the same path names, then so long as the source database is read-only you can run the convert script on the destination host without any changes. For example, if the source and destination hosts both use NFS to mount a disk containing the source data files, and if the mount point for both hosts is /fs1/dbs/, then no editing is needed.

    如果源資料庫的資料檔案可以從具有相同路徑名稱的目標主機訪問,那麼只要源資料庫是隻讀的,你可以在目標主機上執行轉換指令碼,而不進行任何更改。 例如,如果源和目標主機都使用NFS裝載包含源資料檔案的磁碟,並且如果兩個主機的安裝點為/ fs1 / dbs /,則不需要編輯。

    To convert the data files on the destination host:

    If necessary, edit the convert script.(如有必要,編輯轉換指令碼)

    In the script, one CONVERT DATAFILE command exists for each data file to be converted. The convert script should indicate the current temporary file names of the unconverted data files and the output file names of the converted data files. A typical convert script looks as follows:

    在指令碼中,每個要轉換的資料檔案都有一個CONVERT DATAFILE命令。 轉換指令碼應該指示未轉換的資料檔案的當前臨時檔名和轉換的資料檔案的輸出檔名。 一個典型的轉換指令碼如下所示:

    RUN

    {

     CONVERT

     FROM PLATFORM 'Linux IA (32-bit)'

     PARALLELISM 10

      DATAFILE '/disk1/oracle/dbs/tbs_01.f'

      FORMAT

     '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-1_7qgb9u2s';

     

     DATAFILE '/disk1/oracle/dbs/tbs_ax1.f'

     FORMAT

     '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSAUX_FNO-2_7rgb9u2s';

     

     DATAFILE '/disk1/oracle/dbs/tbs_03.f'

     FORMAT

     '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-17_7sgb9u2s';

     

     DATAFILE '/disk1/oracle/dbs/tbs_51.f'

     FORMAT

     '/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-15_8egb9u2u';

     

     DATAFILE '/disk1/oracle/dbs/tbs_52.f'

      FORMAT

     '/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-16_8fgb9u2u';

    }

    Edit each DATAFILE command in the convert script to specify the temporary location of each data file as input. Also, edit the FORMAT parameter of each command to specify the desired final location of the data files of the transported database.

    convert指令碼中編輯每個DATAFILE命令,以指定每個資料檔案的臨時位置作為輸入。 此外,編輯每個命令的FORMAT引數以指定傳輸資料庫的資料檔案的所需最終位置。

    1. If necessary, edit the initialization parameter file on the destination host to change settings for the destination database.

    如有必要,編輯目標主機上的初始化引數檔案以更改目標資料庫的設定。

    You should edit several entries at the top of the initialization parameter file before moving the database to the destination platform. For example, the initialization parameter file may look as follows:

    在將資料庫移動到目標平臺之前,應編輯初始化引數檔案頂部的多個條目。 例如,初始化引數檔案可能如下所示:

    # Please change the values of the following parameters:

    control_files            = "/tmp/convertdb/cf_D-NEWDBT_id-1778429277_00gb9u2s"

    db_recovery_file_dest    = "/tmp/convertdb/orcva"

    db_recovery_file_dest_size= 10737418240

    instance_name            = "NEWDBT"

    service_names            = "NEWDBT.example.com"

    plsql_native_library_dir = "/tmp/convertdb/plsqlnld1"

    db_name                  = "NEWDBT"

    1. On the destination host, use SQL*Plus to start the database instance in NOMOUNT mode.

    在目標主機上,使用SQL * PlusNOMOUNT模式啟動資料庫例項。

    Specify the initialization parameter file that you copied in the preceding step. For example, enter the following command:

    指定在上一步中複製的初始化引數檔案。 例如,輸入以下命令

    SQL> STARTUP NOMOUNT PFILE='/tmp/init_convertdb_00i2gj63_1_0.ora'

    1. Start RMAN and connect to the destination database (not the source database) as TARGET. For example, enter the following command:

    % rman
    RMAN> CONNECT TARGET SYS@prod_dest

    1. Run the convert script at the RMAN prompt. For example, enter the following command:

    RMAN> @/tmp/convertdb/convertscript-target

    1. Shut down the database instance.

    關閉資料庫例項。

    This step is necessary because the transport script that must execute already includes a STARTUP NOMOUNT command.

    此步驟是必需的,因為必須執行的傳輸指令碼已經包含STARTUP NOMOUNT命令。

    1. If necessary, edit the transport script to use the new names for the converted data files.

    如有必要,編輯傳輸指令碼以使用轉換後的資料檔案的新名稱。

    In , the transport script is /tmp/convertdb/transportscript.sql. You run this script on the destination host to create the database. Thus, you must edit this script with the correct names for the data files.

    在例27-3中,傳輸指令碼為/tmp/convertdb/transportscript.sql 您可以在目標主機上執行此指令碼來建立資料庫。 因此,您必須使用資料檔案的正確名稱編輯此指令碼。

    1. Execute the transport script in SQL*Plus.

    SQL * Plus中執行傳輸指令碼。

    For example, create the new database on the destination host as follows:

    SQL> @/tmp/convertdb/transportscript

    When the transport script completes, the destination database is created.

    傳輸指令碼完成後,將建立目標資料庫

     

    參考連結:

    http://blog.itpub.net/23135684/viewspace-776048/

    http://blog.sina.com.cn/s/blog_69e7b8d7010164xh.html

     


    作者:SEian.G(苦練七十二變,笑對八十一難)



    來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31015730/viewspace-2145069/,如需轉載,請註明出處,否則將追究法律責任。

    相關文章