Oracle GoldenGate19c & Oracle GoldenGate Veridata12c 实验
**概述**
文档类别 | 测试文档 |
---|---|
文档时间 | 2021-02 |
文档标题 | 对Oracle GoldenGate及Ogg Veridata功能验证(一) |
作者 | Ora_Ckpt_Lu |
**目的**
1.Oracle GoldGate 19c使用集成抽取模式是否能够应用至Oracle database 11.2.0.4.0;
2.使用Oracle GoldGate 19c集成抽取、集成复制对CLOB,BLOB,LONG,XML数据类型支持程度;
3.Oracle GoldenGate veridata 数据验证工具对Oracle GoldenGate同步数据一致性校验真实性;
4.Oracle GoldenGate veridata 数据验证工具对Out-of-sync数据的修复方法可行性;
**结果**
1、Oracle GoldenGate 19c集成抽取模式可以适用于Oracle database 11.2.0.4.0未打补丁版本,
官方推荐如果适用集成抽取则需要打一些推荐补丁,本实验环境未应用任何数据库补丁2、Oracle GoldenGate 19c集成抽取模式对Oracle数据库表含有CLOB,BLOB,XML数据类型是支持的,
但是对于LONG对象类型表存在同步丢失内容(丢失long列的字节长度)问题,具体原因还在继续排查3、使用Oracle GoldenGate veridata 数据验证工具可以运行在没有Oracle
GoldenGate同步环境中,支持异构数据
数据比较,数据比对效率高,通过主键以及其他列hash比较方式进行数据一致性比较,同时支持Oracle lob之间快速比较4、使用Oracle GoldenGate veridata 数据验证工具 可以对源与目标数据不一致的地方进行数据修复,数据修复同样适用于
Oracle lob类型,并且高效,可以用作同步时对同步失败表进行修复,但是需要做大量预先定义工作。
**目录**
一、环境准备
1.主机规划
2.数据准备
使用Python的Cx_Oracle模块创建相关表
#-*- coding:utf-8 -*-
import cx_Oracle
import os
import sys
os.environ['NLS_LANG']='SIMPLIFIED CHINESE_CHINA.UTF8'
def CrtTab(conn):
cursor = conn.cursor()
#创建BLOB表
sqlstr1 = '''
CREATE TABLE TAB_BLOB(
name VARCHAR2(24) primary key,
content BLOB
)
'''
#创建CLOB表
sqlstr2 = """
CREATE TABLE TAB_CLOB(
name VARCHAR2(24) primary key,
content CLOB
)
"""
#创建LONG表
sqlstr3 = """
CREATE TABLE TAB_LONG(
name VARCHAR2(24) primary key,
content LONG
)
"""
#创建XML表
sqlstr4 = """
CREATE TABLE TAB_XML(
id VARCHAR2(24) primary key,
content xmltype
)
"""
cursor.execute(sqlstr1)
cursor.execute(sqlstr2)
cursor.execute(sqlstr3)
cursor.execute(sqlstr4)
cursor.close()
def main():
conn = cx_Oracle.connect('scott', 'scott', '192.168.3.103:1521/pri')
print("已连接到数据库pri!")
CrtTab(conn)
print("已创建相关表!")
conn.close()
if __name__ == '__main__':
main()
- 使用python插入原始数据
#-*- coding:utf-8 -*-
import cx_Oracle
import os
import sys
os.environ['NLS_LANG']='SIMPLIFIED CHINESE_CHINA.UTF8'
def IstTab(conn):
cursor = conn.cursor()
#将本地图片插入TAB_BLOB
path = 'E:\\人社厅硬件交接\\巡检\\巡检报告\\7月2日巡检\\5500\\'
for file in os.listdir(path):
name = file
content = open(path + file,'rb')
content = content.read()
sqlstr = "insert into tab_blob(name,content) values('%s',:blobData)" %(file)
cursor.setinputsizes(blobData=cx_Oracle.BLOB)
cursor.execute(sqlstr,{
'blobData':content})
cursor.execute('commit')
#将本地文本文件插入TAB_CLOB
path1 = 'E:\工作\手记\\'
for file in os.listdir(path1):
name = file
content = open(path1 + name, 'rb')
content = content.read()
sqlstr = "insert into tab_clob(name,content) values('%s',:clobData)" % (file)
cursor.setinputsizes(clobData=cx_Oracle.CLOB)
cursor.execute(sqlstr, {
'clobData': content}