欧美丝袜一区二区-欧美精品在线观看一区二区-久久精品男人,亚洲乱码中文字幕综合,久久精品手机视频,极度bdsm残忍bdsm变态

沃趣科技產(chǎn)品與技術(shù)資源中心
產(chǎn)品白皮書丨最佳實(shí)踐合集丨行業(yè)報(bào)告丨技術(shù)文章
資源 > 原理剖析|從Oracle日志解析學(xué)習(xí)數(shù)據(jù)庫(kù)內(nèi)核原理

原理剖析|從Oracle日志解析學(xué)習(xí)數(shù)據(jù)庫(kù)內(nèi)核原理

2023年06月13日

1、前言



不管現(xiàn)階段美國(guó)和中國(guó)對(duì)峙到何種程度,不管桀傲不馴拉里.埃里森如何不看好中國(guó),Oracle仍是數(shù)據(jù)庫(kù)中的一枝獨(dú)秀。然而,他山之石可以攻玉,多個(gè)國(guó)產(chǎn)數(shù)據(jù)庫(kù)在關(guān)鍵技術(shù)攻關(guān)方面的整體水平也已達(dá)到國(guó)際先進(jìn)。


國(guó)內(nèi)越來(lái)越多的Oracle數(shù)據(jù)庫(kù)開始下線,遷移到開源或者國(guó)產(chǎn)數(shù)據(jù)庫(kù)上,o2k支持實(shí)時(shí)增量的將Oracle數(shù)據(jù)庫(kù)增量變化抽取出來(lái),助力國(guó)產(chǎn)化數(shù)據(jù)庫(kù)無(wú)縫接管Oracle。


筆者作為數(shù)據(jù)庫(kù)內(nèi)核的負(fù)責(zé)人參與實(shí)現(xiàn)了o2k來(lái)解析Oracle日志,并于2022年2月15號(hào)把它開放出來(lái)給社區(qū)免費(fèi)使用,期間經(jīng)歷了各種迷茫,獲得了眾多大佬的指導(dǎo),最終總算是交出了一份還算不錯(cuò)的試卷。


作為一個(gè)DBA兼開發(fā)人員,在整個(gè)o2k的實(shí)現(xiàn)過(guò)程中,對(duì)于Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)理論和工程能力學(xué)習(xí)了很多,也進(jìn)一步對(duì)數(shù)據(jù)庫(kù)原理有了進(jìn)一步了解。


借助Oracle的設(shè)計(jì)理念和實(shí)現(xiàn),我們也看看是否能對(duì)新一代的數(shù)據(jù)庫(kù)從業(yè)者有一定的幫助和借鑒作用。


國(guó)內(nèi)軟件由于美國(guó)的打壓,數(shù)據(jù)庫(kù)作為基礎(chǔ)軟件贏來(lái)了一個(gè)難得的蓬勃發(fā)展期。


曾幾何時(shí),數(shù)據(jù)庫(kù)從業(yè)人員只是公司IT團(tuán)隊(duì)->運(yùn)維團(tuán)隊(duì)里的一個(gè)小小部門,而今一個(gè)能指導(dǎo)開發(fā)正確使用數(shù)據(jù)庫(kù),選擇數(shù)據(jù)庫(kù)來(lái)適配業(yè)務(wù)來(lái)適應(yīng)業(yè)務(wù)的數(shù)據(jù)架構(gòu)師供不應(yīng)求。


如果能掌握著數(shù)據(jù)庫(kù)原理,甚至能主動(dòng)改造數(shù)據(jù)庫(kù)適配相關(guān)應(yīng)用場(chǎng)景的人才年薪至少百萬(wàn)。


作為計(jì)算機(jī)皇冠上的其中一粒明珠,數(shù)據(jù)庫(kù)上承業(yè)務(wù)在線離線之責(zé),下接硬件內(nèi)核之妙,看到越來(lái)越多的人才加入數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)內(nèi)核隊(duì)伍,不勝欣慰!


本系列文章中我們將由淺入深以O(shè)racle日志解析遇到的重重阻塞為例,來(lái)介紹在數(shù)據(jù)庫(kù)中常見,而又關(guān)鍵的概念,了解數(shù)據(jù)庫(kù)設(shè)計(jì)思路及工程實(shí)現(xiàn)中需要注意的事項(xiàng)。


本文以淺為主,我們先簡(jiǎn)單介紹一下數(shù)據(jù)庫(kù)的背景和Oracle日志解析的基礎(chǔ)知識(shí)




2、前置知識(shí)了解


數(shù)據(jù)庫(kù)日志

  • 類似于銀行賬戶系統(tǒng)一樣,張三存入100塊錢會(huì)'先'被記錄為'張三增加100'的流水賬,然后再把張三的賬戶從1000塊修改為1100塊。


  • 數(shù)據(jù)庫(kù)為了保證原子性和持久化,也會(huì)'先'在redo日志中記錄一筆或者多筆redo record,然后再修改數(shù)據(jù)庫(kù)實(shí)際的行記錄


  • 注意,這里的“修改賬戶/修改行記錄”都是在“寫流水賬/寫日志”之后完成的。也就是說(shuō)redo 先于“數(shù)據(jù)寫入”,這也就是著名的數(shù)據(jù)庫(kù)write-ahead logging (WAL) 。


  • Oracle寫數(shù)據(jù)庫(kù)日志采用的是物理日志方式,記錄的是內(nèi)部數(shù)據(jù)塊的變化;MySQL在Server層的binlog是邏輯日志,記錄的是邏輯行數(shù)據(jù)的變化。所以對(duì)Oracle的日志解析不僅需要理解日志本身filespace、redo record,change vector的變化,還需要理解Oracle內(nèi)部數(shù)據(jù)存儲(chǔ)的格式。


1.png


怎么查看Oracle日志中記錄的內(nèi)容

Oracle中有專門的命令,支持將指定的二進(jìn)制redo日志解析為邏輯的文本文件,類似于MySQL提供的mysqlbinlog工具,方便用戶查看和診斷數(shù)據(jù)庫(kù)問(wèn)題。


 ALTER SYSTEM DUMP LOGFILE '/opt/oracle/oradata/master1/redo01.log';


當(dāng)然,這個(gè)解析出來(lái)的文本文件也并不是那么容易理解,下文中我們會(huì)對(duì)關(guān)鍵信息進(jìn)行解讀。


另外,這個(gè)邏輯的文本文件也并不是把所有的二進(jìn)制redo日志中的信息都解析并輸出出來(lái),例如supplement log這種,就沒(méi)有輸出


supplemental log

Oracle默認(rèn)只記錄變化的信息,類似于MySQL中binlog_row_image=minimal的情況。


也就是說(shuō),你執(zhí)行了update t1 set c2=3 where id=2,它只會(huì)記錄c2=3的后鏡像數(shù)據(jù)和c2=2修改之前的前鏡像數(shù)據(jù)。


對(duì)于主備物理塊同步,這些信息已經(jīng)足夠了,但是對(duì)于數(shù)據(jù)倉(cāng)庫(kù)或者大數(shù)據(jù)平臺(tái),不知道到底更新的是哪一行(id=2)的數(shù)據(jù),是無(wú)法保持跟Oracle的數(shù)據(jù)一致的。


通過(guò)alter database add supplemental log data (primary key) columns;可以讓Oracle在記錄日志的時(shí)候順便把primary key主鍵也記錄下來(lái),方便同步工具將變化對(duì)應(yīng)到具體哪一行,這些額外增加的日志稱為supplemental log。


OGG,O2K等同步工具都會(huì)要求源端Oracle開啟supplemental log。


日志組織形式

  • WAL日志是邏輯的日志表現(xiàn)形式,一個(gè)update的事務(wù)更新了5行數(shù)據(jù),會(huì)產(chǎn)生多個(gè)redo record(begin,5行記錄的前鏡像和后鏡像,commit),而這些日志記錄到日志文件中是以一個(gè)block一個(gè)block(默認(rèn)為512字節(jié))寫到文件中的


  • 邏輯上,數(shù)據(jù)庫(kù)日志是由一個(gè)一個(gè)的redo record組成的;


  • 物理上,數(shù)據(jù)庫(kù)日志文件中每個(gè)block都有Header和Tail,邏輯的redo record記錄到物理文件中對(duì)應(yīng)關(guān)系如下:


2.png




3、redo和undo

日志記錄內(nèi)容

說(shuō)了這么多理論的、務(wù)虛的東西,我們來(lái)點(diǎn)干貨。


首先,我們看看我們做一個(gè)update一行數(shù)據(jù)到底會(huì)生成哪些日志信息,為了排除其他的干擾,我們?cè)谧鰑pdate之前和之后都switch logfile,保證我們查詢的redo log中只有update一個(gè)變更


在Oracle上執(zhí)行的語(yǔ)句如下

## 這里新建一個(gè)表用于測(cè)試
create table test1 (id number primary key, name varchar2(15) not null, hiredate date default(sysdate) );
insert into test1 (id, name) values (1, 'o2k1');
insert into test1 (id, name, hiredate) values (2, 'o2k2', sysdate);
commit

## 為了排除其他的干擾,我們?cè)谧鰑pdate之前和之后都switch logfile,保證我們查詢的redo log中只有update一個(gè)變更
ALTER SYSTEM SWITCH LOGFILE;
update test1 set name='o2k3' where id=2;
commit;
ALTER SYSTEM SWITCH LOGFILE;

## 查詢到底應(yīng)該從那個(gè)歸檔日志中獲取update的變更
select * from v$archived_log;

## 將二進(jìn)制日志反解析出來(lái)
ALTER SYSTEM DUMP LOGFILE '+SSDDG1/chenmm/archivelog/2022_05_12/thread_2_seq_114.1017.1104513037';

## 查看日志被導(dǎo)入到哪個(gè)trace文件了
select value from v$diag_info where name='Default Trace File';    # 返回ora_6130.trc


這里我們得到兩個(gè)文件:

  1. 二進(jìn)制的redo日志文件"thread_2_seq_114.1017.1104513037"

  2. 根據(jù)這個(gè)二進(jìn)制日志解析出來(lái)的文本文件ora_6130.trc


相關(guān)的內(nèi)容我都放到了文末的附錄中了,大家可以自行查看。




4、redo邏輯結(jié)構(gòu)

我們先從文本文件ora_6130.trc入手查看一下redo文件的邏輯形式。參考redo邏輯格式(見附錄),可以看到


  • FILE HEADER:日志文件有日志文件的頭,記錄了Db Id,Db Name的數(shù)據(jù)庫(kù)信息,也記錄了文件大小、文件類型以及Blksiz=512(也就是說(shuō),redo物理塊大小為512字節(jié)),對(duì)比redo物理格式(見附錄)FILE HEADER是放到第一個(gè)512字節(jié)的BLOCK中。這里的文件號(hào)對(duì)應(yīng)的就是日志序號(hào)Seq#

FILE HEADER:
File Number=3, Blksiz=512, File Type=2 LOG


  • REDO HEADER:另外這里還記錄了這是RAC的哪個(gè)節(jié)點(diǎn),是那個(gè)序號(hào)的redo日志,scn的范圍,"Thread 0002, Seq# 0000000114, SCN 0x0000004f1aa1-0x0000004f1aa8"。對(duì)比redo物理格式REDO HEADER是放到第二個(gè)512字節(jié)的BLOCK中

descrip:"Thread 0002, Seq# 0000000114, SCN 0x0000004f1aa1-0x0000004f1aa8"
 thread: 2 nab: 0x4 seq: 0x00000072 hws: 0x2 eot: 0 dis: 0


  • REDO Record:redo record是redo邏輯日志的最重要的組成部分,數(shù)據(jù)庫(kù)的更新都會(huì)記錄到一個(gè)一個(gè)的Redo Record中,我們執(zhí)行的update和commit就被記錄成了兩個(gè)Redo Record。一個(gè)長(zhǎng)度為0x0244,一個(gè)長(zhǎng)度0x00a4

REDO RECORD - Thread:2 RBA: 0x000072.00000002.0010 LEN: 0x0244 VLD: 0x05
...
REDO RECORD - Thread:2 RBA: 0x000072.00000003.0064 LEN: 0x00a4 VLD: 0x01


redo record

進(jìn)一步分解redo record,可以看到redo record又是由一個(gè)redo header和多個(gè)change vector('CHANGE #?')組成


  • Redo Header:記錄了Redo的長(zhǎng)度LEN: 0x0244,redo record的地址RBA: 0x000072.00000002.0010,SCN:0x0000.004f1aa1等信息

REDO RECORD - Thread:2 RBA: 0x000072.00000002.0010 LEN: 0x0244 VLD: 0x05
SCN: 0x0000.004f1aa1 SUBSCN:  1 05/12/2022 17:10:35
(LWN RBA: 0x000072.00000002.0010 LEN: 0002 NST: 0001 SCN: 0x0000.004f1aa1)


  • Change Vector:它是數(shù)據(jù)變化的原子結(jié)構(gòu),觀察第一個(gè)Redo Record,我們可以看到CHANGE #1記錄了事務(wù)開始;CHANGE #2記錄了update的undo前鏡像;CHANGE #3記錄了update的redo后鏡像;CHANGE #4記錄了session信息;而第二個(gè)Redo Record的CHANGE #1記錄了事務(wù)提交的信息

CHANGE #1 TYP:0 CLS:17 AFN:3 DBA:0x00c00080 OBJ:4294967295 SCN:0x0000.004f1121 SEQ:1 OP:5.2 ENC:0 RBL:0
ktudh redo: slt: 0x0013 sqn: 0x00000648 flg: 0x0012 siz: 200 fbi: 0
            uba: 0x00c00e4c.0209.23    pxid:  0x0000.000.00000000


change vector

在進(jìn)一步分解change vector,它也是有Change Vector的header和可變數(shù)據(jù)組成,在Lewis《oracle core》中被稱為“唯一最重要的特性”。header和可變數(shù)據(jù)的具體信息我們?cè)谝院蟮奈恼轮性僭敿?xì)介紹。


這里僅介紹幾個(gè)最關(guān)鍵的信息:


  • opcode:OP:5.2記錄的是事務(wù)開始,OP:5.4記錄的是事務(wù)結(jié)束,OP:5.1記錄的是前鏡像,OP:11.5記錄的是update的后鏡像,有興趣的同學(xué)可以參考lewis記錄的opcode(https://jonathanlewis.wordpress.com/2017/07/25/redo-op-codes/)詳細(xì)列表。

  • xid:事務(wù)號(hào),Oracle事務(wù)管理起始于undo段,并依此為中心。這也是你看到為什么事務(wù)開始5.2、事務(wù)結(jié)束5.4和undo記錄5.1都是對(duì)Layer 5 : Transaction Undo的操作的原因。xid記錄的信息從某種程度上來(lái)說(shuō)記錄的就是在undo上占據(jù)了哪個(gè)slot。阿里巴巴的GalaxyEngine使用的lizard事務(wù)優(yōu)化跟Oracle的事務(wù)異曲同工

CHANGE #1 TYP:0 CLS:17 AFN:3 DBA:0x00c00080 OBJ:4294967295 SCN:0x0000.004f1121 SEQ:1 OP:5.2 ENC:0 RBL:0
CHANGE #2 TYP:0 CLS:18 AFN:3 DBA:0x00c00e4c OBJ:4294967295 SCN:0x0000.004f1120 SEQ:1 OP:5.1 ENC:0 RBL:0
  xid:  0x0001.013.00000648  
CHANGE #3 TYP:2 CLS:1 AFN:4 DBA:0x010000ad OBJ:98733 SCN:0x0000.004f1a8c SEQ:1 OP:11.5 ENC:0 RBL:0
CHANGE #1 TYP:0 CLS:17 AFN:3 DBA:0x00c00080 OBJ:4294967295 SCN:0x0000.004f1aa1 SEQ:1 OP:5.4 ENC:0 RBL:0



undo和redo


這里要專門說(shuō)一下undo和redo,由于MVCC多版本的設(shè)計(jì):

  • 對(duì)所有數(shù)據(jù)的修改,都需要記錄這個(gè)數(shù)據(jù)修改前的值,即在undo里面記錄前鏡像。對(duì)于我們的update就是要記錄name='o2k2'

  • 同時(shí),對(duì)所有數(shù)據(jù)的修改又必須先以Redo的方式記錄到WAL日志中,也出現(xiàn)了在redo中記錄undo信息的情況,即第一個(gè)Redo Record的CHANGE #2記錄了update的undo前鏡像。

  • 如果在數(shù)據(jù)庫(kù)做恢復(fù)前滾的時(shí)候,undo跟表數(shù)據(jù)一樣也需要恢復(fù)

也就是說(shuō),張三存了100塊錢,流水賬里面記錄的不是"張三 +100",而是“ 前鏡像:張三 1000;后鏡像:張三 1100”,修改一行數(shù)據(jù),可能只是幾個(gè)字節(jié)的變化,但是數(shù)據(jù)庫(kù)為了保證數(shù)據(jù)恢復(fù)、讀一致性多寫了這么多日志,多做了這么多事情。而如果你深入做數(shù)據(jù)庫(kù)內(nèi)核,你會(huì)發(fā)現(xiàn)這個(gè)是一個(gè)天才的設(shè)計(jì)。由于文章篇幅問(wèn)題,這里不細(xì)講。


表和行

進(jìn)一步細(xì)看的話,你可以看到前鏡像和后鏡像里面具體改的數(shù)據(jù),例如,前鏡像數(shù)據(jù)如下:

ncol: 3 nnew: 1 size: 0
col  1: [ 4]  6f 32 6b 32


這里表示這個(gè)表有3列,修改了一個(gè)列,大小變化為0,修改的是col1,對(duì)應(yīng)的四個(gè)字節(jié)為6f 32 6b 32,也就是o2k2 6f 32 6b 32是Oracle的數(shù)據(jù)存儲(chǔ)格式,跟redo 的存儲(chǔ)結(jié)構(gòu)關(guān)系不大。


小結(jié)

從上面的邏輯日志可以看出來(lái),Oracle想要對(duì)表更新:

  • 首先要在程序中構(gòu)建一個(gè)Redo Record

  • 然后構(gòu)建幾個(gè)Change Vector,包括事務(wù)開始、修改數(shù)據(jù)的前鏡像、修改事務(wù)的后鏡像等等

  • 將Redo Record 和Change Vector序列化到Redo Buffer (Oracle有專門的LGWR來(lái)刷新Redo Buffer到日志文件中)

  • 最后才是將Change Vector應(yīng)用到數(shù)據(jù)塊上去,這里來(lái)說(shuō),應(yīng)用的是表還是undo,并沒(méi)有太大區(qū)別

3.png



5、redo物理結(jié)構(gòu)


上面主要介紹的是redo的邏輯結(jié)構(gòu),是Oracle幫我們解析出來(lái)的,一般的疑難問(wèn)題排查到這一步應(yīng)該夠了,但是如果你要做日志解析或者想要進(jìn)一步深入排查,你可能會(huì)關(guān)注到底他在二進(jìn)制層面是怎么落地的。


這個(gè)章節(jié)僅面向1%的讀者,如果你對(duì)這塊不感興趣,可以直接跳過(guò)這個(gè)章節(jié):)


參考附錄redo物理格式,這里是將redo文件拷貝出來(lái)以后用Hexdump以十六進(jìn)制格式輸出的Oracle redo日志



redo file & block header

首先看第一個(gè)block,是file header的block 第一行,是block header,每個(gè)block的開頭16個(gè)字節(jié)記錄的都是這個(gè)block的header。


對(duì)比下面的普通block,可以看到0x0022是logfile header, 0x0122是logfile block 第二行開始是redo文件頭file header,這里記錄了幾個(gè)比較關(guān)鍵的信息:“00 02 00 00”表示0x00 00 02 00 = 512即這個(gè)redo log一個(gè)block到底有多大(在oracle 11.2以后BLOCKSIZE可以設(shè)置為512,1024或者4096), “03 00 00 00”表示0x00 00 00 03 = 3表示一共有3個(gè)block。

00000000  00 22 00 00 00 00 c0 ff  00 00 00 00 00 00 00 00  |."....??........|
00000010  65 58 00 00 00 02 00 00  03 00 00 00 7d 7c 7b 7a  |eX..........}|{z|


注意:由于我們的Oracle是安裝在little endian小端x86的linux服務(wù)器上的,所以“00 02 00 00”表示0x00 00 02 00 = 512需要倒過(guò)來(lái)一下,如果你的Oracle跑在Big Endian大端的IBM AIX上的時(shí)候,“00 02 00 00”表示0x00 02 00 00 = 131072就不用倒過(guò)來(lái)了


redo record & redo block


既然知道了一個(gè)block的大小為0x00000200,那第一個(gè)真正的redo block的起始位置開始的block就是00000000+00000200=00000200,第二個(gè)就是00000400,第三個(gè)就是00000600

00000200  01 22 00 00 01 00 00 00  72 00 00 00 00 80 25 cd  |."......r.....%?|
00000400  01 22 00 00 02 00 00 00  72 00 00 00 10 80 66 66  |."......r.....ff|
00000600  01 22 00 00 03 00 00 00  72 00 00 00 64 80 1b 9a  |."......r...d...|


這里“01 00 00 00”, “02 00 00 00” 和“03 00 00 00”就是block序號(hào),表示這是第幾個(gè)塊;"72 00 00 00"=0x00000072=114是日志序號(hào),對(duì)應(yīng)的就是redo日志空間中的Seq#號(hào);而"00 80", "10 80", "64 80"對(duì)應(yīng)的是該block中第一個(gè)redo record相對(duì)block起始地址的偏移量。


00000400起始的redo block的redo record是從“10 80”=0x8010-0x8000=0x10=16即從00000410"44 02 00 00..."開始就是redo record的字節(jié)信息了。

00000400  01 22 00 00 02 00 00 00  72 00 00 00 10 80 66 66  |."......r.....ff|
00000410  44 02 00 00 05 6e 00 00  a1 1a 4f 00 01 00 00 23  |D....n..?.O....#|


00000600起始的redo block的redo record是從“64 80”=0x8064-0x8000=0x64=100即從00000664"a4 00 00 00..."開始就是redo record的字節(jié)信息了。

00000600  01 22 00 00 03 00 00 00  72 00 00 00 64 80 1b 9a  |."......r...d...|
00000610  01 00 03 01 00 00 00 00  00 1a 4f 00 01 00 70 72  |..........O...pr|
00000620  6f 32 6b 33 05 14 00 00  00 00 00 00 00 00 00 00  |o2k3............|
00000630  00 00 00 00 00 00 00 00  00 06 00 00 12 00 04 00  |................|
00000640  00 00 02 00 04 00 04 00  00 00 00 00 03 00 4f f0  |..............O?|
00000650  2a 00 37 00 00 00 00 00  00 04 20 0b ff ff ff ff  |*.7....... .????|
00000660  53 59 53 00 a4 00 00 00  01 06 00 00 a2 1a 4f 00  |SYS.?.......?.O.|


我們可以明顯看到一個(gè)redo record是可以跨兩個(gè)block的。也就是前面我們介紹的邏輯的redo record是可能包含在一個(gè)物理redo block中的,也有可能跨多個(gè)物理redo block。


log redo header

第一個(gè)redo block比較特殊,"00 80"的起始redo record為0。起始這個(gè)redo block中并沒(méi)有redo record。而是包含了這個(gè)redo file的所屬實(shí)例信息,起止SCN等信息,甚至部分信息是以純文本來(lái)記錄的“Thread 0002, Seq# 0000000114, SCN 0x0000004f1aa1-0x0000004f1aa8”



6、總結(jié)


綜上所述,本文簡(jiǎn)略的介紹了Oracle redo的物理和邏輯格式。


一條update語(yǔ)句實(shí)際執(zhí)行時(shí),在Oracle上經(jīng)歷的寫undo、記錄WAL,修改數(shù)據(jù)塊的過(guò)程;介紹了Oracle在二進(jìn)制redo日志中把邏輯的redo record對(duì)應(yīng)記錄到redo block中的。


文末一張圖,簡(jiǎn)要總結(jié)一下他們的關(guān)系:


4.png

o2k是沃趣科技自主研發(fā),基于Oracle redo日志的二進(jìn)制解析工具,解析的結(jié)果以canal的protobuf的形式直接寫入到kafka,為數(shù)據(jù)倉(cāng)庫(kù)、人工智能和大數(shù)據(jù)不可或缺的數(shù)據(jù)來(lái)源管道。


技術(shù)合作和生態(tài)合作請(qǐng)聯(lián)系:o2k@woqutech.com



讓數(shù)據(jù)庫(kù)基礎(chǔ)設(shè)施更簡(jiǎn)單
加速企業(yè)數(shù)字化轉(zhuǎn)型建設(shè)及落地
立即咨詢

沃趣科技

中立的企業(yè)級(jí)數(shù)據(jù)庫(kù)云
十年磨一劍十年來(lái)始終如一的專注數(shù)據(jù)庫(kù)生態(tài)領(lǐng)域
夯實(shí)技術(shù)底蘊(yùn)打造最適合時(shí)代的數(shù)據(jù)庫(kù)基礎(chǔ)設(shè)施
業(yè)績(jī)持續(xù)領(lǐng)先目前已累計(jì)服務(wù)超3000家企業(yè)客戶

留言咨詢

完善信息,我們第一時(shí)間跟您聯(lián)系
姓名
手機(jī)
公司
所在地區(qū)
咨詢問(wèn)題