golang 解析oracle 数据文件头

news2024/11/27 18:49:24
package main

import (
	"encoding/binary"
	"fmt"
	"io"
	"os"
)
// Powered by 黄林杰 15658655447
// Usered for parser oracle datafile header block 1 ....
// oracle 数据文件头块解析
// KCBlockStruct represents the structure of the Oracle block
type KCBlockStruct struct {
	TypeKCBH    byte
	FrmtKCBH    byte
	RDBAKCBH    uint32
	ChkvalKCBH  uint16
	KCCFHDBI    uint32
	KCCFHDBNX   []byte
	KCCFHCSQ    uint32
	KCCFHFSZ    uint32
	KCCFHFNO    uint16
	KCCFHTYP    uint16
	KCVFHRDB    uint32
	KSCNBAS     uint32
	KSCNWRP     uint16
	KCVFHCRT    uint32
	KCVFHRLC    uint32
	KCVFHRLS    struct {
		KSCNBAS uint32
		KSCNWRP uint16
	}
	KCVFHBSBSC  struct {
		KSCNBAS uint32
		KSCNWRP uint16
	}
	KCVFHSTA    uint16
	KCVFHCPC    uint32
	KCVFHCCC    uint32
	KCVFHTSN    uint32
	KCVFHTLN    uint16
	KCVFHTNM    [30]byte
	KCVFHPRC    uint32
	KCVFHPRS    struct {
		KSCNBAS uint32
		KSCNWRP uint16
	}
	KCVCPSN     struct {
		KSCNBAS uint32
		KSCNWRP uint16
	}
	KCVCPTime   uint32
	KCVCPThr    uint16
	KCVCPRA     struct {
		KCRBASEQ uint32
		KCRBABNO uint32
		KCRBABOF uint32
	}
	// Add more fields based on your structure
}

func main() {
	// Open the Oracle data file
	file, err := os.Open("C:\\Users\\ZMI\\Desktop\\asm-diskb\\newoasm\\SYSTEM.260.1096299059.dbf")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}
	defer file.Close()

	// Read the first block (assuming 8192 bytes)
	blockSize := 8192
	block := make([]byte, blockSize)
	// 指定要读取的块号
	blockNumber := 1

	// 计算块的偏移量
	blockOffset := blockSize * blockNumber

	// 移动文件指针到块的起始位置
	_, err = file.Seek(int64(blockOffset), io.SeekStart)
	if err != nil {
		fmt.Println("Error seeking to block:", err)
		return
	}



	_, err = file.Read(block)
	if err != nil {
		fmt.Println("Error reading file:", err)
		return
	}
	hexString := fmt.Sprintf("%X", block)

	// 打印结果
	fmt.Println("oracle 8kb  block Hexadecimal representation:", hexString)


	// Parse the block using the defined structure
	kcBlock := parseKCBlock(block)

	// Print the extracted information
	fmt.Printf("TypeKCBH: %X\n", kcBlock.TypeKCBH)
	fmt.Printf("FrmtKCBH: %X\n", kcBlock.FrmtKCBH)
	fmt.Printf("RDBAKCBH: %X\n", kcBlock.RDBAKCBH)
	// Print more fields as needed
	fmt.Printf("KCCFHDBI: %d\n", kcBlock.KCCFHDBI)
	fmt.Printf("KCCFHDBNX: %s\n", kcBlock.KCCFHDBNX)
}

func parseKCBlock(block []byte) KCBlockStruct {
	kcBlock := KCBlockStruct{
		TypeKCBH: block[0],
		FrmtKCBH: block[1],
		RDBAKCBH: binary.LittleEndian.Uint32(block[4:8]),
		// Parse more fields based on your structure
		KCCFHDBI: binary.LittleEndian.Uint32(block[28:32]),
		KCCFHDBNX: block[32:40],
	}
	return kcBlock
}

##代码执行结果:

##下载地址:

oracle11g数据文件头block1解析资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1216495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全链路压测:确保系统稳定性的关键一环

在当今高度数字化的业务环境中,系统的稳定性和性能至关重要。全链路压测作为确保系统在各种负载下依然可靠运行的关键工具,越来越受到企业的关注。本文将深入探讨全链路压测的概念及目的。 一、全链路压测概念 全链路压测是一种模拟真实用户行为、模拟全…

人人商城app禁用

api.map.baidu.com 换成 lbs.map.baidu.com

计算机网络:网络层ARP协议

在实现IP通信时使用了两个地址:IP地址(网络层地址)和MAC地址(数据链路层地址) 问题:已知一个机器(主机或路由器)的IP地址,如何找到相应的MAC地址? 为了解决…

μC/OS-II---整理学习1

目录 系统功能系统结构图 μC/OS-II是用 C 语言(绝大部分)和汇编语言(与处理器密切相关的代码)编写的。 系统功能 实时内核:μC/OS-II—内核:任务调度(oc_core.c)任务管理&#xf…

Python爬虫实战(进阶篇)—7获取每日菜价(附完整代码)

文章目录 专栏导读背景前期准备1、网址:2、分析: 请求url、请求方法、请求参数测试一个完整代码写入Excel视频展示不足:结尾 专栏导读 🔥🔥本文已收录于《Python基础篇爬虫》 🉑🉑本专栏专门针…

IaaS、PaaS、SaaS 的区别

文章1:软件系统的分类 文章2:有哪些通俗易懂的例子可以解释 IaaS、PaaS、SaaS 的区别?——原文 写的很好的两篇文章值得一看 你一定听说过云计算中的三个“高大上”的你一定听说过云计算中的三个“高大上”的概念:IaaS、PaaS和…

【Java 进阶篇】JQuery 案例:qq表情选择,表达情感的小黄脸

在我们的数字交流时代,表情符号已成为表达情感的重要方式之一。为了丰富用户的输入体验,qq表情选择功能应运而生。通过巧妙运用 JQuery,我们可以在页面中实现一个生动活泼的表情选择框,让用户轻松表达各种情感。本篇博客将深入探讨…

使用量子玻尔兹曼机推进机器学习:新范式

一、说明 量子玻尔兹曼机(QBM)是量子物理学和机器学习的前沿融合。通过利用叠加和纠缠等量子特性的力量,QBM 可以同时探索多个解决方案,使其异常擅长解决复杂问题。它使用量子位(量子计算的构建模块)以传统…

所有社区工作者!能救一个是一个

救命啊,这东西我怎么早不知道呢! 社区人到年底了各种要写的东西很烦啊!突然看到这个,真的救我大命了啊! 谁懂啊?!!平时写个东西起码两三天,试了一下这东西!…

阅读记录 The Aggregation–Heterogeneity Trade-off in Federated Learning

The Aggregation–Heterogeneity Trade-off in Federated Learning Abstract 机器学习的传统观点认为,训练模型的数据越多,模型的性能就越好。因此,人们开发了多种联邦学习方法来聚合尽可能多的本地样本。与这种观点相反,本文表…

营收连续上涨,一脉阳光能否打造“医学影像独角兽”?

自2018年完成B轮融资的一脉阳光,时隔四年,于今年11月13日向港交所发起冲刺。作为国内唯一一家为整个医学影像产业链提供多元化服务的医学影像平台运营商及管理者,一脉阳光受到多家投资机构的青睐,高盛、新浚资本多次追加投资。 此…

网络和Linux网络_2(套接字编程)socket+UDP网络通信代码

目录 1. 预备知识 1.1 源IP地址和目的IP地址 1.2 端口号port和套接字socket 1.3 网络通信的本质 1.4 TCP和UDP协议 1.5 网络字节序 2. socket套接字 2.1 socket创建套接字 2.2 bind绑定 2.3 sockaddr结构体 3. UDP网络编程 3.1 server的初始化服务器 3.2 server的…

使用阿里云Logstash,从自建es6.2.4迁移数据至云ES7.10测试

一、购买阿里云Logstash服务 4C16G 40G 高效云盘 二、配置管道 2.1 配置启动管道前置工作 logstash要通源端ES网络及http端口,且加白logstash要通目标端ES网络及http端口,且加白目标端ES加配置自动创建索引配置管道前先安装 logstash-output-file_extend插件目标云ES7.10要…

Java 等后端应用如何获取客户端真实IP —— 筑梦之路

需求说明 现有一套Java开发的应用,需要能获取到用户访问的真实IP地址,以此来过滤到一些不安全的因素。而实际部署的场景中Java服务提供给用户访问需要经过多次代理,默认情况下是无法获取到客户端真实IP地址的,因此要实现该需求&a…

如何实现SSL证书自动部署、自动续费、自动更新?看这里~

SSL证书默认有效期默认为1年,部分免费证书的默认有效期为3个月。您必须在证书到期前的30个自然日内续费并更新证书,才能延长证书的服务时长。证书续费时, 会颁发一个新的证书,您收到新证书后需要手工更新到服务器上。部分证书支持…

乡村电商人才齐聚浙江建德,这场农播氛围值已拉满!

“3、2、1,上链接!” “现场营造了很好的交流氛围,碰撞出了不少合作机会。” “农播让我们有机会为家乡农产品代言,并且通过电商平台,把优质农特产品卖到全国各地。” “就像是一个演员需要一个舞台,一个好产品也需…

[Linux] yum仓库相关

一、yum仓库 1.1 yum简介 yum 是一种基于 RPM 软件包(Red-Hat Package Manager 的缩写)的软件更新机制,可自动解决软件包之间的依赖关系。这就解决了日常工作中花费大量时间寻找安装包的问题。 为什么会出现依赖 linux 本身就有简化系统的优…

华为鸿蒙开发记录

错误 1No module found. Make sure the project sync is completed successfully and the module is set in Edit Configuration > General 应该是项目建立的是Api是9 ,但是 华为远程模拟器是应该建立的是 8的,导致 版本过低。从新建立项目选择APi8就…

前端学习笔记--React

1. 什么是React? React 是一个用于构建用户界面的JavaScript库核心专注于视图,目的实现组件化开发我们可以很直观的将一个复杂的页面分割成若干个独立组件,每个组件包含自己的逻辑和样式 再将这些独立组件组合完成一个复杂的页面。 这样既减少了逻辑复杂度,又实现…

基于vue 2.0的H5页面中使用H5自带的定位,高德地图定位,搜索周边商户,覆盖物标记,定位到当前城市

基于vue的H5页面中使用高德地图定位&#xff0c;搜索周边商户&#xff0c;覆盖物标记 首先安装高德地图插件 npm i amap/amap-jsapi-loader --save地图承载容器 <template><div id"container"></div> </template>地图容器样式 <style…