Insider看法Delphix VDB倒带
我喜欢问题 - 他们给了我一些关于我不写的东西 ’不得不从我的体验中提出挑战…:)
所以在我的 最后一篇,保罗问道:
我不确定在发布发生时发生的其他变化会发生什么?据推测,他们也丢失了?据推测,数据库必须在恢复数据时下降?
设置
在我们的情景中回答这个问题,我’m将在VEMP_826虚拟化数据库上执行以下操作:
- 添加表格
- 添加索引
- 包括交易,删除插入和删除
- 使用管理控制台重新加快数据库
作为我’m即将对我的数据库进行这些更改,我 拍一个快照 然后使用它在Delphix管理控制台中显示“Camera”配置窗格中的图标。
请注意每个SNC范围列表。 Â那些是SCN中可用的SCN,也列出了时间戳。
现在我登录VDB驻留的目标主机。即使这是在AWS上托管的,它对我而言比登录到任何远程箱都没有什么不同。我设置了我的环境并以架构所有者登录以执行我们的任务’ve listed above.
创建表
所以我们’LL为我们的测试创建表,索引和一些支持对象:
CREATE TABLE REW_TST ( C1 NUMBER NOT NULL ,C2 VARCHAR2(255) ,CDATE TIMESTAMP ); CREATE INDEX PK_INX_RT ON REW_TST (C1); CREATE SEQUENCE RT_SEQ START WITH 1; CREATE OR REPLACE TRIGGER RW_BIR BEFORE INSERT ON REW_TST FOR EACH ROW BEGIN Â SELECT C1_SEQ.NEXTVAL Â INTO Â :new.C1 Â FROM Â DUAL; END; /
现在它是’s all created, we’ll 拿另一个快照.
将数据添加到kinder表
此快照只需几秒钟,在我们的第一个次数之后大约10分钟,并且包含自从我们参加初始变更以来对数据库所做的更改。
现在我’LL从昨天从另一个事务添加了一条从另一个事务的行:
INSERT INTO KINDER_TBL VALUES (1,dbms_random.string('A', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (2,dbms_random.string('B', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (3,dbms_random.string('C', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (4,dbms_random.string('D', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (5,dbms_random.string('E', 200), SYSDATE); INSERT INTO KINDER_TBL VALUES (6, dbms_random.string('F', 200), SYSDATE); INSERT INTOÂ KINDER_TBL VALUES (7,dbms_random.string('G', 200), SYSDATE); COMMIT;
We’ll拿另一个快照:
将数据添加到新表
现在让步’S向新表添加一吨行’ve created:
SQL> Begin
For IDS in 1..10000
Loop
INSERT INTO REW_TST (C2)
VALUES (dbms_random.string('X', 200));
Commit;
End loop;
End;Â
 /
并采取另一个快照。
现在我在发布变更中临界时代的所有快照,都有一个可用的辅助选项。
DBA级别的快照
正如我之前指出的那样,每个快照中都有一系列SCNS。 Â请注意,我现在可以从管理控制台提供时间或SCN:
因此,我可以轻松回到我的任何集合开始或通过快照结束SCN,或者我可以单击向上/向下箭头或键入我想要定位恢复的精确scn。有一次,我’ve决定恢复正确的SCN,然后单击刷新VDB,它将转到该SCN,就像通过RMAN进行恢复,但是不必输入命令和时间约束,这将是一个令人难以置信的快速恢复。
请注意,我也可以回到我的任何一个快照。为此测试的目的,我们’通过单击所选的SCN并单击“倒带VDB”,重新返回到新表之前。
注意现在 这是最终的快照 在系统中显示,不再显示我们将10k行插入REW_TST后所拍摄的那个。
如果我们查看我们的SQL *加上数据库的连接,我们’ll see that it’S不再从我们的新表中的10k行检查连接:
如果我重新连接,我对我工作的表中的数据有什么数据?
pssst-Â在我创建表时昨天插入了十四行而不是七排… 🙂
我认为保罗有很多问题,但我’我将在一个深入跳跃一点 -
倒带期间的数据库中断
是的,数据库确实遇到了停电,因为VDB被返回到用户界面或命令行界面为Delphix请求的时间点或SCN。 Â您可以从查询数据库中看到这一点:
SQL> select to_char(startup_time,'DD-MM-YYYY HH24:MI:SS') startup_time from v$instance; STARTUP_TIME ------------------- 10-05-2017 12:11:49
整个数据库被恢复到这一次,DSOURCE,数据库VDB来自所有VDB中的所有内容都会追踪并跟踪所有VDB中的所有内容,都推动了数据库,但在此期之前的快照存在,(跟踪Delphix引擎。)
如果您查看VDB的警报日志,请您’LL还看到了恢复步骤的尾部,包括我们所要求的SCN:
alter database recover datafile list clear Completed: alter database recover datafile list clear alter database recover datafile list 1 , 2 , 3 , 4 Completed: alter database recover datafile list alter database recover if needed start until change 2258846 Media Recovery Start started logmerger process Parallel Media Recovery started with 2 slaves Wed May 10 12:11:05 2017 Recovery of Online Redo Log: Thread 1 Group 3 Seq 81 Reading mem 0 Â Mem# 0: /mnt/provision/VEmp_826/datafile/VEMP_826/onlinelog/o1_mf_3_dk3r6nho_.log Incomplete recovery applied all redo ever generated. Recovery completed through change 2258846 time 05/10/2017 11:55:30 Media Recovery Complete (VEmp826)
你的变化周围的任何其他变化’从回溯到倒带影响,所以如果有两个开发人员在同一数据库上工作,它们可能会互相影响,但是使用VDB的小占地面积,为什么哇’您只需给他们每个自己的VDB并在开发周期结束时合并变化? “采用虚拟化技术的辉煌原因是在2周的冲刺中有能力,比我们越来越多的瀑布方法更加敏捷。
让我知道如果您还有更多问题 - 我为我提供了一些问题的问题,请致以一些激励’在盖子下进行!
谢谢你– it is really useful
嗨谢谢你的优秀博客文章。我也在使用delphix,我只有一个问题–Delphix VDB倒带操作是否正常需要6-8分钟?
我正在考虑那段时间,并且根据Delphix作业日志,时间消费者是(i)恢复Oracle数据库(1分钟),(ii)打开Oracle数据库(2.5分钟),(iii)添加新的在线重做日志到VDB。我的来源VDB相当大,但我’如果这与VDB性能有任何关系,我会感到惊讶,因为我’只能及时倒退几分钟。
只是想知道这是德尔福克可以做的最好的。
嗨大卫,
如果重做日志很大,磁盘是’一个存储器,我可以看到这一步需要更长的时间,(就好像你在物理数据库上创建重做日志…)但我会添加一条痕迹,看看这么久了。希望这可以帮助!
凯利恩