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

相关文章

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

Oracle Scheduler任务故障诊断方法实战指南

《OracleScheduler任务故障诊断方法实战指南》Oracle数据库作为企业级应用中最常用的关系型数据库管理系统之一,偶尔会遇到各种故障和问题,:本文主要介绍OracleSchedul... 目录前言一、故障场景:当定时任务突然“消失”二、基础环境诊断:搭建“全局视角”1. 数据库实例与PDB状态2

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Oracle迁移PostgreSQL隐式类型转换配置指南

《Oracle迁移PostgreSQL隐式类型转换配置指南》Oracle迁移PostgreSQL时因类型差异易引发错误,需通过显式/隐式类型转换、转换关系管理及冲突处理解决,并配合验证测试确保数据一致... 目录一、问题背景二、解决方案1. 显式类型转换2. 隐式转换配置三、维护操作1. 转换关系管理2.

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:问题已解