前提:
数据库仓库A(就拿oracle11g为例)中有两个用户user1和user2,现在有user1中有表ldm_table1,且表ldm_table1有数据5千万以上,ldm_table1中的数据是从其他库B(数据源)中抽取过来的,前期业务理解不够或者需求有变,数据有变动需要重新从B中抽取数据到A库表ldm_table1中。
重新抽取数据前想把原来的ldm_table1中的数据进行备份,备份到用户user2中,以备将来恢复(重新抽取可能出错等原因)。
前面差不多是废话,可能举例不恰当,反正就是想备份大表(5千万以上记录,我自己这么认为,相对的),或者大表之间数据存在相互拷贝的一些方法。
1.具体备份方法(这里写了16个并行,视情况而定):
create table user2.LDM_table1 nologging parallel (DEGREE 16) AS SELECT * FROM user1.LDM_table1;
2.
truncate table user1.LDM_table1;
3.现在想把user2.LDM_table1中数据再恢复到user1.LDM_table1中,具体sql如下(我们不再create table了,因为user1.LDM_table1已经存在,并且索引什么的都建立了,如果数据没有超过1亿):
alter table user1.LDM_table1 nologging;
alter session enable parallel dml;
insert /*+append parallel*/ into user1.LDM_table1 SELECT/*+parallel*/ * FROM user2.LDM_table1;
COMMIT
alter table user1.LDM_table1 logging;;
4.数据再多一些,比如几个亿的,用3中方法有些慢,所以我目前觉得还是用create方法(上述1中提到的)好些。但是采用重新创建表的方法时,需要drop掉原来的表,并且要建立索引,具体sql如下:
a.采用1中方法,
create table user1.LDM_table1 nologging parallel (DEGREE 16) AS SELECT * FROM user2.LDM_table1;
b.创建主键(主键创建加并行好像不起作用)
c.创建索引(这里加了24个并行,视情况)
create bitmap index user1.INDEX_LDM_table1_RQ on user1.LDM_table1 (RQ)parallel 24 local;
d.如果需要收集统计信息,则执行
exec dbms_stats.gather_table_stats('USER1','LDM_TABLE1,CASCADE=>true,estimate_percent=>10,method_opt=>'for all columns size auto',degree=>16);
5.如果表user1.LDM_table1表存在分区,那么重新恢复可就不是简单create table(上述方法1)就能行的,因为采用上述方法1会丢失分区,所以这时应该用另一种方法,具体sql如下:(注意必须写明各个字段,而字段后面不跟长度类型等)
create table user1.LDM_table1
(
aaa,
bbb,
ccc,
....
)
partition by range (N_DM)
(
partition P00000000000 values less than (' 5500000')
tablespace TS_DAT_LDM
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 160K
next 1M
minextents 1
maxextents unlimited
),
partition P 5500000 values less than ('5501000')
tablespace TS_DAT_LDM
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 160K
next 1M
minextents 1
maxextents unlimited
),
........
)
select
aaa,
bbb,
ccc,
.....
from user2.LDM_table1;
6.有时候需要将表user2.LDM_table1中的部分数据提交到表user1.LDM_table1中,如果采用上述3中的方法会觉得有些慢,可以采用分部提交或者就循环提交,每次提交100万,直至提交完毕,具体sql如下
--循环提交数据
declare
cursor cur is
select /*+parallel(16)*/* from user2.LDM_table1;
type rec is table of cur%rowtype;
recs rec;
begin
execute immediate 'alter table user1.LDM_table1 nologging';
execute immediate 'alter session enable parallel dml';
open cur;
while (true) loop
fetch cur bulk collect
into recs limit 1000000;
forall i in 1 .. recs.count
insert /*+append parallel(8)*/into user1.LDM_table1 values recs (i);
commit;
exit when cur%notfound;
end loop;
close cur;
execute immediate 'alter table user1.LDM_table1 logging';
end;
/
7.如果想删除大表user1.LDM_table1中的部分数据,比如从几亿数据中删除1000万,可能采用delete方法比较慢,所以我们可以采用循环删除的方法,具体sql如下:
--循环删除数据
declare
v_cnt NUMBER:=0;
BEGIN
LOOP
DELETE FROM user1.LDM_table1 WHERE y_dm LIKE '10025%'
AND ROWNUM<=10000;
v_cnt:=SQL%ROWCOUNT;
COMMIT;
EXIT WHEN v_cnt<=0;
END LOOP
END;
/
--加并行快点
declare
v_cnt NUMBER:=0;
BEGIN
execute immediate 'alter table user1.LDM_table1 nologging';
execute immediate 'alter session enable parallel dml';
LOOP
DELETE/*+PARALLEL(16)*/ FROM user1.LDM_table1 WHERE y_dm LIKE '10025%'
AND ROWNUM<=10000;
v_cnt:=SQL%ROWCOUNT;
COMMIT;
EXIT WHEN v_cnt<=0;
END LOOP
END;
/
8.注意内容
如果索引很多(一般是超过5个,我觉得),可以考虑先删除索引,后加入数据,最后创建索引
9.自己理解比较少,只能写成这样,欢迎讨论。
分享到:
相关推荐
Oracle大数据平台提供了数据实时复制、流数据处理、批量加工、数据挖掘、大数据地图与图形处理、大数据一体机、NoSQL数据库、数据可视化、商业智能、批处理流处理等系列产品。 #### 关键产品: - **GoldenGate for...
Oracle 11g冷备份并迁移整个数据库到另一台服务器 Oracle 11g冷备份是指在不停止数据库的前提下,对数据库进行备份的操作。cold backup是相对于hot backup的,hot backup是在数据库运行时进行备份,而cold backup是...
Oracle基于日志的数据备份主要涉及Oracle数据库的CDC(Change Data Capture)特性,这是一种在数据库级别实现的增量数据抽取解决方案。CDC允许系统跟踪和捕获数据库中的数据变更,从而有效地进行数据迁移和同步,...
Oracle的RMAN(Recovery Manager)工具可以用于创建物理备份,然后在另一个位置恢复这些备份以实现复制。物理复制通常用于备份和恢复,或者在测试环境中复制生产数据。 4. Oracle GoldenGate Oracle GoldenGate是...
物理备份通常涉及复制数据文件、控制文件和重做日志文件,而逻辑备份则是基于SQL语句的备份,如使用`SQL*Plus`的`COPY`命令。 此外,Oracle的RMAN提供了更强大的备份和恢复功能,支持自动备份、压缩备份、网络备份...
在Oracle数据库中处理千万级别的数据时,合理的表空间管理和分区策略是非常重要的。以下是从给定的部分内容中提取的关键步骤: 1. **创建表空间**: - 创建了三个表空间:`dinya_space01`、`dinya_space02` 和 `...
此外,DSG的灾备解决方案如BDMP系列(BS和DC)一体机提供了高性能备份、应用测试和数据迁移功能,支持非归档备份、直接表恢复、实时备份和容灾,确保了业务的连续性和数据的安全性。 3. **应用级双活容灾**:DSG的...
它能够执行完整的数据库备份、特定表空间或数据文件的备份、增量备份以及文件的差错检查。RMAN的架构包括RMAN信息库(Repository)、RMAN客户端、服务器进程和数据库服务器Session。RMAN信息库可以存储在控制文件或...
2. **数据备份与恢复**:定期将关键数据表复制到另一个数据库,可以作为数据备份的一种方式,一旦主数据库出现故障,可以通过副本快速恢复数据。 3. **分布式数据处理**:在大数据环境下,数据往往需要分布在多个...
热备份的关键步骤包括确定需要备份的表空间、执行备份操作并监控数据库状态。使用SQL命令可以获取数据文件和redo log文件的信息。 2. 归档模式的恢复 归档模式是Oracle数据库的一种运行模式,它在数据库正常运行的...
- **高级复制**:讲解Oracle的复制技术,如Logical Standby、GoldenGate等,用于数据同步和灾难恢复。 - **存储优化**:涵盖表压缩、索引压缩和In-Memory Option等存储优化技术。 - **数据库云服务**:Oracle11g...
- **Data Guard**:Oracle Data Guard 提供了一种通过物理日志复制来保护数据的方法,可以实现在主数据库出现故障时自动切换到备用数据库。 ### 其他相关技术 - **NoSQL和大数据集成**:随着数据量的快速增长,...
2. 分区与表空间:Oracle支持分区表以提高大数据处理能力,表空间管理则是分配和组织数据库存储的关键。 3. 数据库设计:如何进行规范化设计,避免数据冗余和异常,以及ER模型和逻辑设计的概念。 4. 实施与迁移:...
- 数据库复制:学会使用Oracle的数据复制技术进行数据分布和同步。 - 大数据和数据仓库:了解如何利用Oracle数据库处理大规模数据集和建立数据仓库。 - 云数据库服务:掌握Oracle提供的云服务,例如Oracle Cloud ...
【Oracle9i分布式数据库系统复制机制】是Oracle9i数据库版本中的一项关键技术,它主要用于提高分布式数据库系统的可靠性和性能。在大规模的分布式环境中,数据复制是确保数据一致性和可用性的核心手段。 分布式...
3. **文件复制**:关闭新服务器上的Oracle服务,结束所有与Oracle相关的进程。将备份的原始Oracle文件夹完整地拷贝到新系统中Oracle的安装路径,覆盖现有的文件夹。 4. **服务恢复**:启动并恢复Oracle相关的系统...
物理备份直接复制数据库文件,如数据文件、控制文件和归档日志,适用于快速恢复整个数据库或单个表空间。逻辑备份则使用SQL语句导出数据和元数据,适用于跨平台迁移和恢复特定对象。恢复策略应考虑不同的灾难场景,...
Oracle GoldenGate 提供了低延迟的数据复制,适用于大数据、云和混合环境。 **一、Oracle GoldenGate 组件** 1. **提取过程 (Extract)**:运行在源数据库服务器上,负责从数据库日志中读取更改数据,并将这些更改...
- RMAN(恢复管理器):Oracle提供的强大备份工具,可以实现完整、增量、归档日志等多种方式的备份。 - 数据库恢复策略:包括如何进行灾难恢复、逻辑恢复以及闪回技术的应用。 5. **安全与权限管理**: - 用户...
这份"简明Oracle培训手册,最新版"旨在为初学者和有一定经验的数据库管理员提供一个全面而简洁的学习指南,帮助他们深入理解Oracle的核心概念和技术。 首先,我们要了解Oracle数据库的基本架构。Oracle数据库是由多...