Oracle 可传输表空间(Transportable Tablespace)

2024-04-19 19:44

本文主要是介绍Oracle 可传输表空间(Transportable Tablespace),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在数据归档、备份、测试等场景,我们经常需要将数据从一个系统移动到另一个系统,一个较常用的方案是数据的导出/导入(export/import),但是在数据量较大的场景,此方案可能比较耗时。而可传输表空间是一种以文件为单位的数据移动技术,它绕过了导出/导入的数据处理过程,直接利用操作系统复制底层数据文件来快速移动数据。

文章目录

  • 一、可传输表空间简介
  • 二、可传输表空间示例
    • 2.1 将表空间置于只读状态
    • 2.2 导出元数据
    • 2.3 拷贝文件
    • 2.4 在目标系统导入元数据

一、可传输表空间简介

使用export/import的方式来传输数据,在导出/导入时都需要解析数据内容,如果需要传输的数据比较大,那么这是一个非常耗时的过程。可传输表空间的思想就是通过绕过这个数据处理过程来提速。通过数据定义(元数据)和数据内容(业务数据)分离的方式,将数据内容通过文件拷贝(物理移动)来达到快速移动的目的。

由于可传输表空间底层是文件拷贝,因此它在兼容性上没有数据导出/导入广泛,在应用场景上有如下限制:

  • 表空间必须是自包含的(Self-contained),即表空间中对象不依赖其他表空间中的内容。
  • 目标系统的字符集、操作系统、数据库版本必须和源系统一致。

可传输表空间的过程分为下面4个步骤:
1. 将表空间置于只读状态
2. 导出元数据
3. 将表空间对应的数据文件及第2步导出的元数据文件拷贝到目标服务器
4. 在目标服务器导入元数据

二、可传输表空间示例

在实际应用中,也可以专门建立一个表空间来使用这个特性。每次传输前将要传输的数据复制到这个表空间中,然后移动到目标系统,最后再加载到需要的表中。

先建立一个表空间和一张表作为示例数据:

create tablespace trans_tbs;
create table t(id integer) tablespace trans_tbs;
insert into t values(1);
commit;

在这里插入图片描述

在开始传输前,先检查表空间是否是自包含的,Oracle提供了dbms_tts.transport_set_check() 存储过程来检查,这个存储过程不会返回任何结果,是否冲突需要通过视图transport_set_violations查询:

exec dbms_tts.transport_set_check('TRANS_TBS', true); 
Select * from transport_set_violations;

在这里插入图片描述
确定表空间是自包含的就可以移动数据了。

2.1 将表空间置于只读状态

由于需要拷贝底层的数据文件,而在拷贝过程中不允许有事务对表空间进行修改,因此需要将表空间置于只读模式。这个要求对于OLTP系统可能有点苛刻,可以建立一个专门表空间专门进行数据传输,这样可以不影响正常业务的运行。

alter tablespace trans_tbs read only;

在这里插入图片描述
这里仅仅演示了一个表空间,如果同时传输多个表空间,只需要保证这些表空间是自包含的,并将它们置于只读即可。

2.2 导出元数据

元数据是指表空间中对象的定义数据,它们存在数据字典中,和表中的普通业务数据是分离。因此拷贝表空间文件不会包含元数据,元数据依然需要通过导出/导入的方式来移动。

下面的命令会在当前目录下生成名为trans_tbs.dmp的文件,transport_tablespace=y 选项意味着仅导出表空间的元数据,因此这个文件非常小:
exp userid=“/ as sysdba” transport_tablespace=y tablespaces=trans_tbs file=trans_tbs.dmp
在这里插入图片描述

2.3 拷贝文件

表空间对应的数据文件路径可以用下面的命令查询,:

select tablespace_name, file_name from dba_data_files where tablespace_name='TRANS_TBS';

在这里插入图片描述

将表空间所包含的数据文件和第二步导出的元数据文件拷贝到目标系统,这里由于只有一个数据库,新建一个目录来模拟另一个系统:

mkdir /u01/app/oracle/oradata/PROD/PROD/datafile/trans_tbs
cp /u01/app/oracle/oradata/PROD/PROD/datafile/o1_mf_trans_tb_ljtf5d9p_.dbf /u01/app/oracle/oradata/PROD/PROD/datafile/trans_tbs/trans.dbf

在这里插入图片描述

完成数据文件的拷贝后,第一步中被设置为只读表空间就可以恢复读写状态了:

alter tablespace trans_tbs read write;

在这里插入图片描述

2.4 在目标系统导入元数据

最后一步,仅需要将第二步导出的元数据在目标系统导入即可。这里由于是在同一个库演示,先将原表空间及文件删除,避免冲突:

drop tablespace trans_tbs including contents and datafiles;

在这里插入图片描述

使用imp命令导入元数据,这里需要提供要加载数据文件:

imp userid=\"/ as sysdba\" transport_tablespace=y tablespaces=trans_tbs file=trans_tbs.dmp datafiles=/u01/app/oracle/oradata/PROD/PROD/datafile/trans_tbs/trans.dbf

在这里插入图片描述

导入后再次查询dba_data_files表,可以看到表空间指向的是新数据文件,导入成功:

select tablespace_name, file_name from dba_data_files where tablespace_name='TRANS_TBS';

在这里插入图片描述

导入后的表空间是只读的,如果要更新,则要将其改为读写状态。如果只是用来迁移数据,可以采用直接路径插入insert /*+ append */ into … select …. 来将其快速加载到目标表中。

这篇关于Oracle 可传输表空间(Transportable Tablespace)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918384

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查