Oracle数据库迁移指南:快速move数据的技巧 (oracle数据库 move)

在数据库管理领域,数据库迁移是一项重要的任务。它涉及到将一个或多个数据库或应用程序从一个环境转移到另一个环境,通常是迁移基础架构或托管提供商、更新版本或平台或合并数据库。虽然Oracle数据库迁移是一项繁琐的任务,但必须完成此任务,既确保数据的完整性,又确保数据的安全性。在本文中,我们将分享一些Oracle数据库迁移的技巧,以帮助您在迁移过程中快速移动数据。

准备工作

在开始Oracle数据库迁移之前,必须先进行一些准备工作。这些准备工作包括:

1.存储备份和日志文件

在迁移过程中,您需要备份整个数据库和日志文件。因此,您需要有足够的存储空间,以便存储这些文件。备份数据库和日志文件可以帮助您在迁移过程中避免数据丢失。

2.确认迁移目标环境

在迁移之前,您需要确认目标数据库环境是否符合要求。目标环境需要具有足够的存储空间、性能和安全性,以保持新数据库的平稳运行。此外,新环境必须具有足够的权限,以允许您完成迁移。

3.创建迁移计划

创建迁移计划可以帮助您规划迁移过程的步骤和时间。此外,迁移计划还应包括备份和还原方案、验证和测试计划以及后续支持和维护计划。

快速move数据的技巧

1.使用Oracle Data Pump

Oracle Data Pump是一种快速移动数据的工具,它允许将数据以二进制格式从源数据库导出并导入到目标数据库。使用Data Pump可以大大加快数据的迁移速度。此外,Data Pump还可以将数据导出到平面文件中,以便在迁移过程中进行手动处理。

2.使用Oracle GoldenGate

Oracle GoldenGate是一种高性能、高可用性的数据复制和同步工具,它允许在不影响源数据库的情况下将数据复制到目标数据库。GoldenGate可以在不同的操作系统、数据库版本和架构之间进行复制。使用GoldenGate可以减少数据迁移的停机时间,并提高迁移的效率。

3.使用Oracle Transportable Tablespaces

Oracle Transportable Tablespaces允许在同一操作系统上的不同Oracle数据库之间移动数据。使用Transportable Tablespaces可以避免在目标数据库中重新创建表和索引,并减少数据迁移的时间。此外,Transportable Tablespaces还可以使迁移过程更加容易,因为您不必重新安装任何软件或创建新的数据库实例。

4.使用Oracle RMAN

Oracle Recovery Manager(RMAN)是一种备份和还原数据库的工具。使用RMAN可以将整个数据库备份到磁盘或磁带,并快速还原到目标数据库中。此外,使用RMAN还可以在备份和还原过程中对数据进行压缩,从而减少数据迁移的时间和存储空间。

在Oracle数据库迁移过程中,快速移动数据是至关重要的。使用Oracle Data Pump、Oracle GoldenGate、Oracle Transportable Tablespaces和Oracle RMAN等工具可以大大加快数据的迁移速度。此外,在启动迁移之前做好充分的准备工作和规划,可以帮助您避免中断和数据丢失,并确保数据库迁移的安全和完整性。

相关问题拓展阅读:

学习oracle视频,看到指定表空间数据文件移动到指定位置遇到问题,host move执行无任何效果

我今天学习oracle也到这儿,发现敲了命令,在相应的磁盘没看到dbf文件,此时我用的是pl/sql developer 里的命令窗口

后来销山仔我使用亏汪sqlplus来进行同样的操作,发现在相应的磁盘中找到了dbf文件,我觉得可能是使用工具的问题。

自己的一点心得,不知道对与否,希望对你有帮唯码助

是能移走的枣肆铅呀,不应该没反映的。记雹洞得移走之后还要rename datafile.

例如:

SQL> select file_name from dba_data_files;

FILE_NAME

/u01/oracle/oradata/oradb/users01.dbf

/u01/oracle/oradata/oradb/undotbs01.dbf

/u01/oracle/oradata/oradb/sysaux01.dbf

/u01/oracle/oradata/oradb/system01.dbf

/u01/oracle/oradata/oradb/encrypted_ts01.dbf

SQL> alter tablespace users offline;

Tablespace altered.

SQL> alter tablespace users rename datafile ‘/u01/凳好oracle/oradata/oradb/users01.dbf’ to ‘/u01/oracle/users02.dbf’;

Tablespace altered.

SQL> alter tablespace users online;

Tablespace altered.

SQL> select file_name from dba_data_files;

FILE_NAME

/u01/oracle/users02.dbf

/u01/oracle/oradata/oradb/undotbs01.dbf

/u01/oracle/oradata/oradb/sysaux01.dbf

/u01/oracle/oradata/oradb/system01.dbf

/u01/oracle/oradata/oradb/encrypted_ts01.dbf

SQL> !ls -a /u01/oracle/users02.dbf

/u01/oracle/users02.dbf

SQL> !ls -a /u01/oracle/oradata/oradb/users01.dbf

ls: /u01/oracle/oradata/oradb/users01.dbf: No such file or directory

我倒,host命缓中令就是在sql/plus中执迅哪携行操作系统的命令,如果被移动的表空间文件处于在在线状亩伏态,当然不能让你移动了!这个时候你可以把表空间文件设置为冷备份状态,这个时候可以移动。

我也遇到这个问凯雹芹题,后来发现是因为在PL/SQL developer中运盯毕行这条肆备命令就无效,在sqlplus中运行才有效

如何重建LOB类型的索引和LOB段

当我们想重建LOB类型的索引的时候,就会出现报错,重现如下:

create table test

( id int,

txt clob

);

SQL> select * from user_segments;

SEGMENT_NAMEPARTITION_NAME SEGMENT_TYPETABLESPACE_NAME

BYTES BLOCKS EXTENTS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE FREELISTS FREELIST_GROUPS BUFFER_POOL

TESTTABLEUSERS

DEFAULT

SYS_ILC00002$$ LOBINDEXUSERS

DEFAULT

SYS_LOBC00002$$ LOBSEGMENTUSERS

DEFAULT

alter index SYS_ILC00002$$ rebuild tablespace users ONLINE NOLOGGING

ORA-02327: 无法以数据类型 LOB 的型伍表达式创建索引

我们先回忆一下相关辩伏知识,以下来自ORACLE 9I&10G编程艺术

lobindex和lobsegment,它们做什么用?创建这些段是为了支持我们的LOB列。我们的实际LOB数据就存储在lobsegment中(确实,LOB数据也有可能存储在表T中,不过稍后讨论

ENABLE STORAGE IN ROW子句时还会更详细地说明这个内容)。lobindex用卜灶或于执行LOB的导航,来找出其中的某些部分。创建一个LOB列时,一般来说,存储在行中的这是一个指针(

pointer),或LOB定位器(LOB locator)。我们的应用所获取的就是这个LOB定位器。当请求得到LOB的“12.000~2,000字节”时,将对lobindex使用LOB定位器来找出这些字节存

储在哪里,然后再访问lobsegment。可以用lobindex很容易地找到LOB的各个部分。由此说来,可以把LOB想成是一种主/明细关系。

表中的LOB实际上只是指向lobindex,lobindex再指向LOB本身的各个部分。为了得到LOB中的N~M字节,要对表中的指针(LOB定位器)解除引用,遍历lobindex结构来找到所需的

数据库(chunk),然后按顺序访问。这使得随机访问LOB的任何部分都能同样迅速,你可以用同样快的速度得到LOB的最前面、中间或最后面的部分,因为无需再从头开始遍历LOB

ORACLE也说:The LOB index is an internal structure that is strongly associated with the LOB storage. 也就是说不让直接重建

但是我觉得可以明确INDEX是用来确定LOBSEGMENT的位置,如果经常对表中的行进行DML或者对大字段进行DML,我觉得重建还是用必要的。

既然是索引就要遵守索引的原则。大量的DML必然使索引的页节点越来越多,深度越来越大,但是其中包含了空闲空间。

ORACLE METALINK 说 Use the ALTER TABLE … MOVE command which will rebuild the indexes ,也就是使用ALTER TABLE MOVE语句来进行REBUILD索引。

下面就测试一下:

首先理解几个概念,才能了解实验结果:

1、IN ROW 默认的这个子句是(ENABLE STORAGE IN ROW),也就是小于4000字节就存储在表段中,如果大于4000字节就存储在lob段中,同时使用LOBINDEX来指定位置,我这里使

用DISABLE STORAGE IN ROW,也就是不管多大都存在LOBSEGMENT中。

2、CHUNK 表示最小LOGSEGMENT最小的存储单元,而且一个CHUNK只限于一个SEGMENT行使用,如果一个CHUNK设置为32K,你的SEGMENT行只有2K那就要浪费30k。

3、CACHE 表示是否把读取写入LOGSEGMENT记录到缓存,默认是NOCACHE,可以是CACHE和CACHE READS,前者读写都保存,后者读保存,写是直接写。而NOCACHE,就是直接读写。

下面是我建立表的语句。

CREATE TABLE “PPTEST”.”TEST2″

( “ID” NUMBER(*,0),

“TXT” CLOB

) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

STORAGE(INITIALNEXTMINEXTENTS 1 MAXEXTENTS

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

TABLESPACE “USERS”

LOB (“TXT”) STORE AS (

TABLESPACE “USERS” DISABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10

NOCACHE

STORAGE(INITIALNEXTMINEXTENTS 1 MAXEXTENTS

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))

我这里DISABLE STORAGE IN ROW CHUNK 8192,CHUNK是8K。

现在我插入数据

SQL> insert into test2

2 select * from test;

rows inserted

这里有58W多行,计算一下SEGMENTS占用空间。589824*8K=4.5G

查看一下:

select SEGMENT_NAME,SEGMENT_TYPE,BYTES/1024/1024/1024 gb,BLOCKS from user_segments;

SYS_ILC00002$$ LOBINDEX. 3968

SYS_LOBC00002$$LOBSEGMENT.95328

TESTTABLE0. 2432

确实我们的LOGSEGMENT是4.5G。

现在我们收集统计信息,并且对索引进行分析如下:

SQL> execute dbms_stats.gather_schema_stats(ownname => ‘PPTEST’,cascade => true);

PL/SQL procedure successfully completed

yze index SYS_ILC00002$$ validate structure;

yze index SYS_ILC00002$$ compute statistics;

过后查看都没有发现LOGINDEX的结构信息,不知道为何。

但是考虑进行了大量的DML够后进行REBULIDING索引的大小肯定会减少。

现在我们来进行REBULDING实验。

首先模拟大量删除插入,

delete test2;

insert into test2

select id,txt from (select rownum rn, id, txt from test) where mod(rn, 8) = 0;

先全部删除,然后再插入1/8的数据。(过程巨慢)

SQL> delete test2;

rows deleted

查看

select SEGMENT_NAME,SEGMENT_TYPE,BYTES/1024/1024/1024 gb,BLOCKS from user_segments;

SYS_ILC00002$$ LOBINDEX.240

SYS_LOBC00002$$LOBSEGMENT.03520

TESTTABLE0. 2432

索引的块大量增加,占用空间也大量增加,这里我也不太明白为何大量增加。这时其实没有任何数据了。

然后进行了插入。

SQL> insert into test2

2 select id,txt from (select rownum rn, id, txt from test) where mod(rn, 8) = 0;

73728 rows inserted

查看

select SEGMENT_NAME,SEGMENT_TYPE,BYTES/1024/1024/1024 gb,BLOCKS from user_segments;

SYS_ILC00002$$ LOBINDEX.1264

SYS_LOBC00002$$LOBSEGMENT.69056

TESTTABLE0. 2432

其实这个时候数据只是以前的1/8 但是LOGSEGMENT和LOBINDEX 却更大。所以有大量的浪费空间。

我们直接重建TEST2表

SQL> alter table test2 move tablespace users;

查看

SYS_ILC00002$$ LOBINDEX.1264

SYS_LOBC00002$$LOBSEGMENT.69056

TESTTABLE0. 384

只是重建了TEST2段

使用语句

ALTER TABLE test2 MOVE

TABLESPACE users

LOB (TXT) STORE AS lobsegment

(TABLESPACE users );

进行重建

重建期间可以看到临时对象如下:

4.TEMPORARY. 80

4.TEMPORARY.7408

4.TEMPORARY. 128

显然表本身,LOBSEGMENT和LOBINDEX都再重建

然后查看

SQL> select SEGMENT_NAME,SEGMENT_TYPE,BYTES/1024/1024/1024 gb,BLOCKS from user_segments;

SEGMENT_NAMESEGMENT_TYPE GB BLOCKS

TESTTABLE0. 384

LOBSEGMENT LOBSEGMENT.74496

SYS_ILC00002$$ LOBINDEX. 512

因为我这里使用 lobsegment所以以前的SYS_LOBC00002$$ 变为了LOBSEGMENT,可以看到这个时候容量正常了。0.56G刚好是以前的1/8.

如果想单独重建会报错。METALINK上记录如下:

Explanation

The ‘ALTER TABLE foo MODIFY LOB (lobcol) …’ syntax does not allow

for a change of tablespace

ALTER TABLE my_lob

MODIFY LOB (a_lob)

(TABLESPACE new_tbsp);

(TABLESPACE new_tbsp)

*

ORA-22853: invalid LOB storage option specification

You have to use the MOVE keyword instead as shown in the examples.

结论:

1、LOGSEGMENT不会重用HWM以下的空间,所以大量DML会不断增加它的大小。

2、进行LOBsegment和LOBINDEX重建很有必要,使用语法如下:

ALTER TABLE test2 MOVE

TABLESPACE users

LOB (TXT) STORE AS lobsegment

(TABLESPACE users );

必须和表一起重建,单独重建LOBSEGMENT或者LOGINDEX没有办法。

分两种情况,一种是移动普简桐通索引,另一种是移动分区索引。

oracle移动普通索引到其他表空间语法:拦饥坦

alter index 索引名 rebuild tablespace 其他表空间;

oracle移动分区索引到其他表空间语法:

alter table 表名 move partition 分区名 tablespace 其他表空间肢弊;

oracle数据库 move的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle数据库 move,Oracle数据库迁移指南:快速move数据的技巧,学习oracle视频,看到指定表空间数据文件移动到指定位置遇到问题,host move执行无任何效果,如何重建LOB类型的索引和LOB段的信息别忘了在本站进行查找喔。


数据运维技术 » Oracle数据库迁移指南:快速move数据的技巧 (oracle数据库 move)