• 欢迎光临~

传输数据库/导入导出数据库

开发技术 开发技术 2022-10-09 次浏览

您可以使用完整的可传输 export/import功能将整个数据库从一个 Oracle 数据库实例复制到另一个实例。

为 Oracle 数据库迁移数据的导出/导入优势

使用导出/导入升级 Oracle 数据库时迁移数据可提高性能。

使用导出/导入来迁移数据具有以下好处:

  • 对数据进行碎片整理。您可以压缩导入的数据以提高性能。

  • 重组数据库。您可以创建新表空间或修改现有表、表空间或要使用导入数据填充的分区。

  • 由于创建了一个全新的数据库,因此有助于对 Oracle 数据库的新旧版本进行并行测试。

  • 启用指定数据库对象或用户的复制。仅导入您需要的对象、用户和其他项目对于仅在生产数据的子集上为新软件建立测试环境很有用。数据泵导出/导入提供灵活的数据子集功能。

  • 用作备份存档。您可以使用完整的数据库导出作为当前数据库的存档。

  • 使您能够在与放置早期版本数据库的平台不同的操作系统或硬件平台上建立升级的数据库。

  • 基于网络的数据泵导入使您能够直接通过网络为早期版本的 Oracle 数据库加载新版本的 Oracle 数据库。通过使用基于网络的数据泵导入,您不需要使用中间转储文件。

使用导出转储文件传输数据库

您可以使用导出转储文件传输数据库。

以下任务列表总结了使用导出转储文件传输数据库的过程。后续示例中提供了每个任务的详细信息。

  1. 在源数据库中,将每个用户定义的表空间配置为只读模式并导出数据库。

    确保将以下参数设置为指定值:

    • TRANSPORTABLE=ALWAYS

    • FULL=Y

    如果源数据库是 Oracle Database 11g数据库(11.2.0.3 或更高版本),则必须将VERSION参数设置为12或更高。

    如果源数据库包含任何加密表空间或包含具有加密列的表的表空间,那么您必须指定ENCRYPTION_PWD_PROMPT=YES或指定ENCRYPTION_PASSWORD参数。

    导出转储文件包括用户定义表空间中包含的对象的元数据以及管理表空间中包含的用户定义对象的元数据和数据,例如SYSTEMSYSAUX

  2. 传输导出转储文件。

    将导出转储文件复制到目标数据库可访问的位置。

  3. 传输数据库中所有用户定义的表空间的数据文件。

    将数据文件复制到目标数据库可访问的位置。

    如果源平台和目标平台不同,则通过在“跨平台传输数据V$TRANSPORTABLE_PLATFORM中的视图上运行查询来检查每个平台的字节序格式

    如果源平台的字节序格式与目标平台的字节序格式不同,则使用以下方法之一转换数据文件:

    • 使用包中的GET_FILEPUT_FILE过程DBMS_FILE_TRANSFER来传输数据文件。这些过程会自动将数据文件转换为目标平台的字节序格式。

    • 使用 RMANCONVERT命令将数据文件转换为目标平台的字节序格式。

笔记:

具有撤消段的数据文件不支持在不同字节序格式之间转换数据文件。

4、(可选)在源数据库上将用户定义的表空间恢复为读/写模式。

5、在目标数据库中,导入数据库。

导入完成后,用户定义的表空间处于读/写模式。

它还假设源平台具有以下数据文件和表空间:

表空间类型数据文件

sales

User-defined

/u01/app/oracle/oradata/mydb/sales01.dbf

customers

User-defined

/u01/app/oracle/oradata/mydb/cust01.dbf

employees

User-defined

/u01/app/oracle/oradata/mydb/emp01.dbf

SYSTEM

Administrative

/u01/app/oracle/oradata/mydb/system01.dbf

SYSAUX

Administrative

/u01/app/oracle/oradata/mydb/sysaux01.dbf

此示例做出以下附加假设:

  • 目标数据库是使用源数据库中的数据填充的新数据库。源数据库的名称是mydb

  • 源数据库和目标数据库都是 Oracle Database 19c 数据库。

完成以下任务以使用导出转储文件传输数据库:

任务 1 生成导出转储文件

通过完成以下步骤生成导出转储文件:

  1. 启动 SQL*Plus 并以管理员身份或以具有ALTERTABLESPACEMANAGETABLESPACE系统权限的用户身份连接到数据库。

  2. 将数据库中的所有用户定义表空间设为只读。
ALTER TABLESPACE sales READ ONLY;

ALTER TABLESPACE customers READ ONLY;

ALTER TABLESPACE employees READ ONLY;

3、以具有DATAPUMP_EXP_FULL_DATABASE角色的用户身份调用数据泵导出实用程序,并指定完全可传输的导出/导入选项。

SQL> HOST

$ expdp user_name full=y dumpfile=expdat.dmp directory=data_pump_dir 
        transportable=always logfile=export.log

Password: password

您必须始终指定TRANSPORTABLE=ALWAYS,它确定是否使用可传输选项。

此示例指定以下数据泵参数:

  • FULL参数指定正在导出整个数据库。

  • DUMPFILE参数指定要创建的结构信息导出转储文件的名称,expdat.dmp.

  • DIRECTORY参数指定指向转储文件的操作系统或Oracle Automatic Storage Management位置的目录对象。您必须在调用Data Pump之前创建DIRECTORY对象,并且必须向运行Export实用程序的用户授予目录上的READ和WRITE对象权限。

在非CDB中,自动创建目录对象DATA_PUMP_DIR。对该目录的读写权限自动授予DBA角色,从而授予用户SYS和SYSTEM。

但是,目录对象DATA_PUMP_DIR不是在PDB中自动创建的。因此,当导入到PDB时,请在PDB中创建目录对象,并在运行Data Pump时指定目录对象。

LOGFILE参数指定导出实用程序要写入的日志文件的文件名。在本例中,日志文件被写入转储文件所在的目录,但可以写入其他位置。

要在Oracle Database 11g Release 2(11.2.0.3)或更高版本的Oracle Database 11 g数据库上执行完全可传输导出,请使用VERSION参数,如以下示例所示:

expdp user_name full=y dumpfile=expdat.dmp directory=data_pump_dir 
      transportable=always version=12 logfile=export.log

仅Oracle Database 12c和更高版本的数据库支持完全可传输导入。

注意:在本例中,Data Pump实用程序仅用于导出用户定义表空间的数据字典结构信息(元数据)。实际数据仅针对管理表空间(SYSTEM和SYSAUX)卸载,因此即使对于大型用户定义表空间,此操作也会进行得相对较快。

4、检查日志文件中的错误,并记下必须传输到目标数据库的转储文件和数据文件。expdp在如下消息中输出这些文件的名称和路径:

******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
  /u01/app/oracle/admin/mydb/dpdump/expdat.dmp
******************************************************************************
Datafiles required for transportable tablespace SALES:
  /u01/app/oracle/oradata/mydb/sales01.dbf
Datafiles required for transportable tablespace CUSTOMERS:
  /u01/app/oracle/oradata/mydb/cust01.dbf
Datafiles required for transportable tablespace EMPLOYEES:
  /u01/app/oracle/oradata/mydb/emp01.dbf

5、When finished, exit back to SQL*Plus:

$ exit

任务 2 传输导出转储文件

将转储文件传输到DATA_PUMP_DIR目录对象指向的目录,或传输到您选择的任何其他目录。目标数据库必须可以访问新位置。

在目标数据库中,运行以下查询以确定DATA_PUMP_DIR的位置:

SELECT * FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME = 'DATA_PUMP_DIR';

OWNER      DIRECTORY_NAME   DIRECTORY_PATH
---------- ---------------- -----------------------------------
SYS        DATA_PUMP_DIR    C:apporauseradminorawindpdump

任务 3 传输用户定义表空间的数据文件

将数据库中用户定义的表空间的数据文件传输到目标数据库可以访问的地方。

在此示例中,将以下数据文件从源数据库传输到目标数据库:

  • sales01.dbf

  • cust01.dbf

  • emp01.dbf

如果要将数据库传输到与源平台不同的平台,则确定源平台和目标平台是否支持跨平台数据库传输,并确定每个平台的字节顺序。如果两个平台具有相同的字节顺序,则无需转换。否则,您必须在源数据库或目标数据库中对数据库中的每个表空间进行转换。

如果要将数据库传输到不同的平台,则可以在每个平台上执行以下查询。如果查询返回一行,则平台支持跨平台表空间传输。

SELECT d.PLATFORM_NAME, ENDIAN_FORMAT 
     FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d 
     WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;

以下是来自源平台的查询结果:

PLATFORM_NAME                      ENDIAN_FORMAT
---------------------------------- --------------
Solaris[tm] OE (32-bit)            Big

在这个例子中,您可以看到,endian格式是不同的。因此,在这种情况下,传输数据库需要进行转换。使用DBMS_FILE_TRANSFER包中的GET_FILE或PUT_FILE过程传输数据文件。这些过程会自动将数据文件转换为目标平台的endian格式。将数据文件传输到目标数据库现有数据文件的位置。在UNIX和Linux平台上,此位置通常为/u01/app/oracle/oradata/dbname/或+DISKGROUP/dbname/datafile/。或者,可以使用RMAN CONVERT命令转换数据文件

任务 4(可选)将表空间恢复为读/写模式

使传输的表空间在源数据库中再次读/写,如下所示:

ALTER TABLESPACE sales READ WRITE;
ALTER TABLESPACE customers READ WRITE;
ALTER TABLESPACE employees READ WRITE;

您可以推迟此任务,以首先确保导入过程成功。

任务 5 在目标数据库,导入数据库

以具有DATAPUMP_IMP_FULL_DATABASE角色的用户身份调用数据泵导入实用程序,并指定完全可传输的导出/导入选项。

impdp user_name full=Y dumpfile=expdat.dmp directory=data_pump_dir
   transport_datafiles=
      '/u01/app/oracle/oradata/mydb/sales01.dbf',
      '/u01/app/oracle/oradata/mydb/cust01.dbf',
      '/u01/app/oracle/oradata/mydb/emp01.dbf'
   logfile=import.log

Password: password

此示例指定以下数据泵参数:

  • FULL参数指定以FULL模式导入整个数据库。

  • DUMPFILE参数指定导出的文件,其中包含用户定义表空间的元数据以及要导入的管理表空间的元数据和数据。

  • DIRECTORY参数指定标识导出转储文件位置的目录对象。您必须在调用 Data Pump 之前创建DIRECTORY对象,并且必须将目录上的对象权限授予READ运行WRITE导入实用程序的用户。有关该命令 的信息,请参阅Oracle 数据库 SQL 语言参考。CREATE DIRECTORY

    在非 CDB 中,目录对象DATA_PUMP_DIR是自动创建的。对该目录的读取和写入权限自动授予DBA角色,因此授予用户SYSSYSTEM.

    但是,目录对象DATA_PUMP_DIR不会在 PDB 中自动创建。因此,在导入 PDB 时,在 PDB 中创建目录对象,并在运行 Data Pump 时指定目录对象。

  • TRANSPORT_DATAFILES参数标识要导入的所有数据文件。

    如果有很多数据文件, 您可以在参数指定的TRANSPORT_DATAFILES参数文件中多次指定参数。PARFILE

  • LOGFILE参数指定导入实用程序要写入的日志文件的文件名。在此示例中,日志文件被写入到从中读取转储文件的目录中,但它可以被写入到不同的位置。

该语句执行成功后,检查导入日志文件,确保没有出现意外错误。

在处理大量数据文件时,在语句行中指定数据文件名列表可能是一个费力的过程。它甚至可以超过语句行限制。在这种情况下,您可以使用导入参数文件。例如,您可以调用 Data Pump 导入实用程序,如下所示:

impdp user_name parfile='par.f'

例如,par.f可能包含以下行:

FULL=Y 
DUMPFILE=expdat.dmp 
DIRECTORY=data_pump_dir 
TRANSPORT_DATAFILES= 
'/u01/app/oracle/oradata/mydb/sales01.dbf', 
'/u01/app/oracle/oradata/mydb/cust01.dbf', 
'/u01 /app/oracle/oradata/mydb/emp01.dbf' 
LOGFILE=import.log

笔记:

 

  • 在导入期间,用户定义的表空间可能会被临时读取/写入以加载元数据。确保在导入期间未对数据进行任何用户更改。成功完成导入后,所有用户定义的表空间都变为读/写。

  • 执行网络数据库导入时,该TRANSPORTABLE参数必须设置为always

  • 当您导入 CDB 中的 PDB 时,请在用户名之后指定 PDB 的连接标识符。例如,如果 PDB 的连接标识符是hrpdb,则在运行 Oracle 数据泵导入实用程序时输入以下内容:

通过网络传输数据库

略。。。

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/transporting-data.html#GUID-032C9715-B2F8-4ACD-8A1C-C1A899DEA3C1

 

程序员灯塔
转载请注明原文链接:传输数据库/导入导出数据库
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com