达梦数据库使用dmlcvt命令找回更改前的数据

在生产系统上不小心修改了表数据后最快的方法是用闪回查询找回。但时间不能超过undo_retention(默认90秒)。其实最标准的处理方法是在其他机器上将数据库恢复到修改前的时刻。但数据库比较大时恢复时间较长。真实场景可能比较急。那么也可以分析归档日志找回修改前的状态。

分析归档日志的最常用方法是LOGMNR日志挖掘。但要求事先已经打开了附加日志RLOG_APPEND_LOGIC(默认不打开)。本文介绍另一种找回办法dmlcvt

录入测试数据

#登录数据库
[dmdba@node1 log]$ disql SYSDBA/SYSDBA
Server[LOCALHOST:5236]:mode is normal, state is open
login used time : 3.486(ms)
disql V8

#创建测试表
SQL> create table test1(a varchar(100));
executed successfully
used time: 18.696(ms). Execute id is 500.

#显示当前事务号
SQL> select trx_id from v$sessions where sess_id=sessid;
LINEID     TRX_ID
---------- --------------------
1          22079
used time: 1.073(ms). Execute id is 501.

#插入数据
SQL> insert into test1 values('LIUQINGYAN');
affect rows 1
used time: 0.581(ms). Execute id is 502.
SQL> commit;
executed successfully
used time: 3.441(ms). Execute id is 503.

#显示当前事务号
SQL> select trx_id from v$sessions where sess_id=sessid;
LINEID     TRX_ID
---------- --------------------
1          22080
used time: 0.241(ms). Execute id is 504.

#修改表数据
SQL> update test1 set a='LIUQINGYAN1';
affect rows 1
used time: 1.161(ms). Execute id is 505.
SQL> commit;
executed successfully
used time: 3.493(ms). Execute id is 506.
#切归档
SQL> alter system switch logfile;
executed successfully
used time: 14.133(ms). Execute id is 0.

打开dmsql日志

2024-05-18 04:17:01.376 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:0 stmt:0x7f1d50035178 appname:disql ip:::1) [ORA]: select trx_id from v$sessions where sess_id=sessid;
2024-05-18 04:17:01.376 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:NULL appname:disql) TRX: START
2024-05-18 04:17:01.377 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:0x7f1d50035178 appname:disql ip:::1) [SEL] select trx_id from v$sessions where sess_id=sessid;
2024-05-18 04:17:01.377 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:0x7f1d50035178 appname:disql ip:::1) [SEL] select trx_id from v$sessions where sess_id=sessid; EXECTIME: 0(ms) ROWCOUNT: 1(rows).
2024-05-18 04:17:24.864 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:0x7f1d50035178 appname:disql ip:::1) [ORA]: insert into test1 values('LIUQINGYAN');
2024-05-18 04:17:24.864 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:0x7f1d50035178 appname:disql ip:::1) [INS] insert into test1 values('LIUQINGYAN');
2024-05-18 04:17:24.865 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:NULL appname:disql) trx[22079] alloc pseg page[0, 1311], page_lsn[55069], n_pages[1]
2024-05-18 04:17:24.865 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:0x7f1d50035178 appname:disql ip:::1) [INS] insert into test1 values('LIUQINGYAN'); EXECTIME: 0(ms) ROWCOUNT: 1(rows).
2024-05-18 04:17:27.457 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:0x7f1d50035178 appname:disql ip:::1) [ORA]: commit;
2024-05-18 04:17:27.457 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:0x7f1d50035178 appname:disql ip:::1) [DML] commit;
2024-05-18 04:17:27.457 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:NULL appname:disql) TRX: COMMIT
2024-05-18 04:17:27.457 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22079 stmt:NULL appname:disql) trx[22079]: pseg_page_free_for_insert_only_trx free pseg page (0, 1311), page_lsn = 55074
2024-05-18 04:17:27.460 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:0 stmt:NULL appname:disql) TRX: COMMIT LSN[55073]
2024-05-18 04:17:27.460 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:0 stmt:0x7f1d50035178 appname:disql ip:::1) [DML] commit; EXECTIME: 3(ms).
2024-05-18 04:17:32.464 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:0 stmt:0x7f1d50035178 appname:disql ip:::1) [ORA]: select trx_id from v$sessions where sess_id=sessid;
2024-05-18 04:17:32.464 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:NULL appname:disql) TRX: START
2024-05-18 04:17:32.464 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:0x7f1d50035178 appname:disql ip:::1) [SEL] select trx_id from v$sessions where sess_id=sessid; EXECTIME: 0(ms) ROWCOUNT: 1(rows).
2024-05-18 04:17:50.981 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:0x7f1d50035178 appname:disql ip:::1) [ORA]: update test1 set a='LIUQINGYAN1';
2024-05-18 04:17:50.981 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:0x7f1d50035178 appname:disql ip:::1) [UPD] update test1 set a='LIUQINGYAN1';
2024-05-18 04:17:50.982 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:NULL appname:disql) trx[22080] alloc pseg page[0, 1311], page_lsn[55083], n_pages[1]
2024-05-18 04:17:50.982 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:0x7f1d50035178 appname:disql ip:::1) [UPD] update test1 set a='LIUQINGYAN1'; EXECTIME: 0(ms) ROWCOUNT: 1(rows).
2024-05-18 04:17:52.612 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:0x7f1d50035178 appname:disql ip:::1) [ORA]: commit;
2024-05-18 04:17:52.612 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:0x7f1d50035178 appname:disql ip:::1) [DML] commit;
2024-05-18 04:17:52.612 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:22080 stmt:NULL appname:disql) TRX: COMMIT
2024-05-18 04:17:52.615 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:0 stmt:NULL appname:disql) TRX: COMMIT LSN[55086]
2024-05-18 04:17:52.615 (EP[0] sess:0x7f1d50011978 thrd:14617 user:SYSDBA trxid:0 stmt:0x7f1d50035178 appname:disql ip:::1) [DML] commit; EXECTIME: 3(ms).

update test1 set a='LIUQINGYAN'语句开启了一个新事务,事务号:22080。系统为该事务在回滚段分配了1311号页面用于保存前映像,以保证万一rollback时可以回到事务开始前的状态。

日志分析

dmlcvt F_TYPE=2 F_PATH=/home/dmdba/arch/ARCHIVE_LOCAL1_0x61299DA6_EP0_2024-05-18_01-49-37.log rec_level=2 rec_data=1 out_path=/home/dmdba/rec ts_id=1 file_id=0
#ts_id=1   回滚段表空间
#file_id=0 表空间内第0号文件
#out_path  日志分析结果目录

日志分析节选如下:

#在ROLL.DBF文件为该事务分配1311号页面
PAGE_INIT:      (29, 1, 0, 1311)
WORD:   (1, 0, 1311, 8, 2, 65535)
DWORD:  (1, 0, 1311, 10, 4, 4294967295)
WORD:   (1, 0, 1311, 14, 2, 65535)
DWORD:  (1, 0, 1311, 16, 4, 4294967295)

#1311号页面用于保存22080事务的前映像(修改前的数据)
TRXID_H0:       (1, 0, 1311, 36, 4, 22080)
BYTE:   (1, 0, 1311, 42, 1, 0)
WORD:   (1, 0, 1311, 43, 2, 55)
WORD:   (1, 0, 1311, 45, 2, 55)
LINT64: (1, 0, 1311, 47, 8, 0)
PAGE_INIT:      (36, 1, 0, 528)
WORD:   (1, 0, 528, 8, 2, 65535)
DWORD:  (1, 0, 528, 10, 4, 4294967295)
WORD:   (1, 0, 528, 14, 2, 65535)
DWORD:  (1, 0, 528, 16, 4, 4294967295)
WORD:   (1, 0, 528, 36, 2, 248)
WORD:   (1, 0, 528, 38, 2, 0)
BYTE:   (1, 0, 528, 8153, 1, 0)
BYTE:   (1, 0, 528, 8154, 1, 0)
BYTE:   (1, 0, 528, 8155, 1, 0)
BYTE:   (1, 0, 528, 8156, 1, 0)
BYTE:   (1, 0, 528, 8157, 1, 0)
BYTE:   (1, 0, 528, 8158, 1, 0)
BYTE:   (1, 0, 528, 8162, 1, 0)
BYTE:   (1, 0, 528, 8163, 1, 0)
BYTE:   (1, 0, 528, 8164, 1, 0)
BYTE:   (1, 0, 528, 8165, 1, 0)
BYTE:   (1, 0, 528, 8166, 1, 0)
BYTE:   (1, 0, 528, 8167, 1, 0)
BYTE:   (1, 0, 528, 8168, 1, 0)
BYTE:   (1, 0, 528, 8169, 1, 0)
BYTE:   (1, 0, 528, 8170, 1, 0)
BYTE:   (1, 0, 528, 8171, 1, 0)
BYTE:   (1, 0, 528, 8172, 1, 0)
BYTE:   (1, 0, 528, 8173, 1, 0)
BYTE:   (1, 0, 528, 8174, 1, 0)
BYTE:   (1, 0, 528, 8175, 1, 0)
BYTE:   (1, 0, 528, 8176, 1, 0)
BYTE:   (1, 0, 528, 8177, 1, 0)
BYTE:   (1, 0, 528, 8178, 1, 0)
BYTE:   (1, 0, 528, 8179, 1, 0)
BYTE:   (1, 0, 528, 8180, 1, 0)
BYTE:   (1, 0, 528, 8181, 1, 0)
BYTE:   (1, 0, 528, 8182, 1, 0)
BYTE:   (1, 0, 528, 8183, 1, 0)
BYTE:   (1, 0, 528, 8153, 1, 128)
WORD:   (1, 0, 528, 38, 2, 1)
ANY:    (1, 0, 528, 40, 32, 0x40560000000000001F0500000000000000000000000000000000000000000000)
ANY:    (1, 0, 1311, 55, 64, 0x40000203040000003F560000000000000000000026040000FFFFFFFFFFFFFFFF7FFFFF0100000000000000010000000A004C495551494E4759414E0000003700)

#上一个事务(22079)写入的0x426表的数据:LIUQINGYAN
        UREC_UPD:       (seq:4, nrec_tid:22079, tabid:0x426(), rowid:1, n_keys:0)
                (id:0, 0x4C495551494E4759414E, [LIUQINGYAN])
WORD:   (1, 0, 1311, 45, 2, 119)

pkg_ver=1, pkg_type=0, use_hash=0, n_ep=1, dsc_seqno=0, db_magic=1630117286, p_db_magic=0, term_id=0, prev_term_id=0, c_seqno=10012, c_lsn=55084, l_seqno=10013, g_seqno=10013, prev_lsn=55084
min_lsn=55085, max_lsn=55086, pkg_len=512, data_off=256, real_file_off=196608, n_dps=0, n_pll=1, use_hash=0
BYTE:   (1, 0, 1311, 42, 1, 1)
ANY:    (1, 0, 1311, 119, 37, 0x25001202060000004056000000000000640000000000008002000000260400006800447700)

#22080事务描述结束
        UREC_TRX_END:   (seq:6, trxid:22080)

由上可见:

事务号(TRXID)22080

分配(PAGE_INIT)回滚页面  1311

22080事务修改前的数据:22079事务写入的‘LIUQINGYAN’。与dmsql日志中吻合。

注:tabid:0x426是表的十六进制对象号,转换成十进制是1062。

下面我们读一下ROLL.DBF文件

由上可见回滚文件中确实存在LIUQINGYAN。将1311号页面dd出来也可以找到LIUQINGYAN,而其他页面不存在。与日志分析结果吻合。

继续测试

录入数据

#更新数据
SQL> update test1 set a='LIUQINGTAO';
affect rows 1
used time: 6.593(ms). Execute id is 500.
SQL> commit;
executed successfully
used time: 3.684(ms). Execute id is 501.
SQL> alter system switch logfile;
executed successfully
#切归档
SQL> alter system switch logfile;
executed successfully
used time: 14.133(ms). Execute id is 0.

查看dmlog日志

2024-05-18 05:37:44.797 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:0 stmt:0x7fa81c035178 appname:disql ip:::1) [ORA]: update test1 set a='LIUQINGTAO';
2024-05-18 05:37:44.798 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:26091 stmt:NULL appname:disql) TRX: START
2024-05-18 05:37:44.799 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:26091 stmt:0x7fa81c035178 appname:disql ip:::1) [UPD] update test1 set a='LIUQINGTAO';
2024-05-18 05:37:44.800 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:26091 stmt:NULL appname:disql) trx[26091] alloc pseg page[0, 1311], page_lsn[59648], n_pages[1]
2024-05-18 05:37:44.801 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:26091 stmt:0x7fa81c035178 appname:disql ip:::1) [UPD] update test1 set a='LIUQINGTAO'; EXECTIME: 1(ms) ROWCOUNT: 1(rows).
2024-05-18 05:37:46.554 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:26091 stmt:0x7fa81c035178 appname:disql ip:::1) [ORA]: commit;
2024-05-18 05:37:46.554 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:26091 stmt:0x7fa81c035178 appname:disql ip:::1) [DML] commit;
2024-05-18 05:37:46.554 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:26091 stmt:NULL appname:disql) TRX: COMMIT
2024-05-18 05:37:46.557 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:0 stmt:NULL appname:disql) TRX: COMMIT LSN[59651]
2024-05-18 05:37:46.557 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:0 stmt:0x7fa81c035178 appname:disql ip:::1) [DML] commit; EXECTIME: 3(ms).
:38:59.187 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:0 stmt:0x7fa81c035178 appname:disql ip:::1) [ORA]: alter system switch logfile;
2024-05-18 05:39:13.932 (EP[0] sess:0x7fa81c011978 thrd:19497 user:SYSDBA trxid:0 stmt:NULL appname:disql) FREE SESSION
2024-05-18 05:39:16.743 (EP[0] sess:NULL thrd:NULL user:NULL trxid:NULL stmt:NULL)  trx[26091]: purg2_page free pseg page (0, 1311), page_lsn = 59682

update test1 set a='LIUQINGTAO'语句开启了一个新事务,事务号:26091。值得注意的是系统为该事务重用了1311号回滚页面用于保存前映像

日志分析

dmlcvt F_TYPE=2 F_PATH=/home/dmdba/arch/ARCHIVE_LOCAL1_0x61299DA6_EP0_2024-05-18_05-37-19.log rec_level=2 rec_data=1 out_path=/home/dmdba/rec ts_id=1 file_id=0

日志分析结果

PAGE_INIT:      (29, 1, 0, 1311)
WORD:   (1, 0, 1311, 8, 2, 65535)
DWORD:  (1, 0, 1311, 10, 4, 4294967295)
WORD:   (1, 0, 1311, 14, 2, 65535)
DWORD:  (1, 0, 1311, 16, 4, 4294967295)
TRXID_H0:       (1, 0, 1311, 36, 4, 26091)
BYTE:   (1, 0, 1311, 42, 1, 0)
WORD:   (1, 0, 1311, 43, 2, 55)
WORD:   (1, 0, 1311, 45, 2, 55)
LINT64: (1, 0, 1311, 47, 8, 0)
PAGE_INIT:      (36, 1, 0, 528)
WORD:   (1, 0, 528, 8, 2, 65535)
DWORD:  (1, 0, 528, 10, 4, 4294967295)
WORD:   (1, 0, 528, 14, 2, 65535)
DWORD:  (1, 0, 528, 16, 4, 4294967295)
WORD:   (1, 0, 528, 36, 2, 248)
WORD:   (1, 0, 528, 38, 2, 0)
BYTE:   (1, 0, 528, 8153, 1, 0)
BYTE:   (1, 0, 528, 8154, 1, 0)
BYTE:   (1, 0, 528, 8155, 1, 0)
BYTE:   (1, 0, 528, 8156, 1, 0)
BYTE:   (1, 0, 528, 8157, 1, 0)
BYTE:   (1, 0, 528, 8158, 1, 0)
BYTE:   (1, 0, 528, 8159, 1, 0)
BYTE:   (1, 0, 528, 8160, 1, 0)
BYTE:   (1, 0, 528, 8161, 1, 0)
BYTE:   (1, 0, 528, 8162, 1, 0)
BYTE:   (1, 0, 528, 8163, 1, 0)
BYTE:   (1, 0, 528, 8164, 1, 0)
BYTE:   (1, 0, 528, 8165, 1, 0)            
BYTE:   (1, 0, 528, 8180, 1, 0)
BYTE:   (1, 0, 528, 8181, 1, 0)
BYTE:   (1, 0, 528, 8182, 1, 0)
BYTE:   (1, 0, 528, 8183, 1, 0)
BYTE:   (1, 0, 528, 8153, 1, 128)
WORD:   (1, 0, 528, 38, 2, 1)
ANY:    (1, 0, 528, 40, 32, 0xEB650000000000001F0500000000000000000000000000000000000000000000)
ANY:    (1, 0, 1311, 55, 65, 0x410002030300000040560000000000000000000026040000FFFFFFFF001F05000037000100000000000000010000000B004C495551494E4759414E310000003700)
        UREC_UPD:       (seq:3, nrec_tid:22080, tabid:0x426(), rowid:1, n_keys:0)
                (id:0, 0x4C495551494E4759414E31, [LIUQINGYAN1])
WORD:   (1, 0, 1311, 45, 2, 120)

pkg_ver=1, pkg_type=0, use_hash=0, n_ep=1, dsc_seqno=0, db_magic=1630117286, p_db_magic=0, term_id=0, prev_term_id=0, c_seqno=11622, c_lsn=59649, l_seqno=11623, g_seqno=11623, prev_lsn=59649
min_lsn=59650, max_lsn=59651, pkg_len=512, data_off=256, real_file_off=162816, n_dps=0, n_pll=1, use_hash=0
BYTE:   (1, 0, 1311, 42, 1, 1)
ANY:    (1, 0, 1311, 120, 37, 0x2500120205000000EB65000000000000000000000000000000000000000000000000007800)
        UREC_TRX_END:   (seq:5, trxid:26091)

由上可见:

事务号(TRXID)26091

分配(PAGE_INIT)回滚页面  1311

26091事务修改前的数据:22080事务写入的‘LIUQINGYAN1’。与dmsql日志中吻合。

既然是重用1311页面,那么上一份数据肯定被覆盖了。

下面检查得到了验证

回滚文件里记录的数据变成了LIUQINGYAN1

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes之prometheus kube-controller-manager。 scheduler报错问题

项目场景: prometheus scheduler及kube-controller-manager监控报错 问题描述 kubeadm搭建完kube-prometheus 会有这个报错 原因分析: rootmaster2:~# kubectl describe servicemonitor -n kube-system kube-controller-manager通过以上图片我们发现 k…

东哥一句兄弟,你还当真了?

关注卢松松,会经常给你分享一些我的经验和观点。 你还真把自己当刘强东兄弟了?谁跟你是兄弟了?你在国外的房子又不给我住,你出去旅游也不带上我!都成人年了,东哥一句客套话,别当真! 今天,东哥在高管会上直言&…

从零训练yolov8

1.收集数据 2.数据标注 pip install labelimg3.划分数据集 0.2的验证机0.8的训练集 import os from shutil import copyfile from sys import exit import randomsource r"D:\Data\imgs\screenc" \\ target_train r"D:\Data\imgs\datasets\mydata\images\t…

生产制造边角料核算说明及ODOO演示

今天群里有伙伴提到边角料的处理问题,我们梳理了一下,在生产过程中,如果产生了边角料,核算产成品的投料成本时需要考虑边角料的价值,以确保成本核算的准确性。以下是注意的几点: 一、边角料的入账价值 在生…

ROS学习记录:用C++实现IMU航向锁定

前言 获取IMU数据的C节点 在了解了如何获取到IMU的姿态信息(链接在上面)后,接下来尝试实现让一个节点在订阅IMU数据的时候,还能发布运动控制指令,使机器人能对姿态变化做出反应,达到一个航向锁定的效果。 …

自己手写一个单向链表【C风格】

//单链表 #include <iostream> #define MAX_SIZE 20 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0typedef int ElemType;//元素的类型 typedef int Status;//返回状态typedef struct Node {ElemType data;//链表中保存的数据struct Node* next;//指向下…

从零开始学逆向,js逆向启蒙:有道翻译

语言&#xff1a;js、python 工具&#xff1a;pycharm、chrome浏览器F12调试、chatgpt&#xff08;补充js第三方库&#xff0c;转python&#xff09;、node.js(js运行)&#xff08;必须&#xff09; 目标&#xff1a;学习掌握基本js逆向知识。 对象&#xff1a; 有道翻译 &a…

使用C/C++ API接口操作 Zookeeper 数据

ZooKeeper 支持 Java 和 C 的API接口。本文将介绍使用 C/C 语言客户端库的编译安装和使用入门。 一、编译安装 PS&#xff1a;就在上一篇文章还觉得安装和配置 jdk 、maven 麻烦&#xff0c;所以当时选择 apache-zookeeper-[version]-bin.tar.gz 的版本。然而&#xff0c;本文…

K8S认证|CKA题库+答案| 12. 查看Pod日志

12、查看Pod日志 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node k8s master …

企业ov代码签名证书1300

我们在下载一些软件代码时&#xff0c;有时候操作系统会出现未知软件拦截&#xff0c;各个杀毒软件也会因为软件身份不明拦截软件下载。而代码签名证书可以对软件进行数字签名&#xff0c;以验证软件的身份和完整性。这种数字签名机制确保了软件在传输和安装过程中没有被篡改或…

1小时从0开始搭建自己的直播平台(详细步骤)

本文讲述了如何从0开始&#xff0c;利用腾讯云的平台&#xff0c;快速搭建一个直播平台的过程。 文章目录 效果图详细步骤准备工作第一步&#xff1a;添加域名并检验cname配置1.先填加一个推流域名2. 点击完下一步&#xff0c;得到一个cname地址3. 将cname地址&#xff0c;配置…

哥白尼哨兵系列卫星数据不能下载的解决方法

自2023年1月24日起&#xff0c;一个新的哥白尼数据空间生态系统已经启动&#xff0c;为所有哨兵数据&#xff08;Sentinel-1, Sentinel-2, Sentinel-3 and Sentinel-5P&#xff09;提供可视化和数据处理&#xff0c;地址为&#xff1a;https://dataspace.copernicus.eu/。详细介…

重构2:重构的原则之笔记

最近在看重构2&#xff1a;改善既有代码的设计这本书&#xff0c;对于代码重构指导非常有帮助&#xff0c;然后也是做个笔记记录下&#xff0c;以下是我阅读本书的前两章的时候整理的思维导图&#xff1a;

若依框架对于后端返回异常后怎么处理?

1、后端返回自定义异常serviceException 2、触发该异常后返回json数据 因为若依对请求和响应都封装了&#xff0c;所以根据返回值response获取不到Code值但若依提供了一个catch方法用来捕获返回异常的数据 3、处理的方法

Golang的基本使用

目录 变量的声明 Golang常用容器 defer 有趣的多态 结构体标签和reflect 反射 Golang最强的协程 channel go可能造成的内存泄露 变量的声明 方法 1:有类型,有var,不赋值 在Golang中默认值为0 方法 2:无类型,有var,赋值 方法 3:无类型,无var,赋值 多变量声明 多变…

Volatile的内存语义

1、volatile的特性 可见性&#xff1a;对一个volatile变量的读&#xff0c;总能够看到任意一个线程对这个volatile变量的写入。 原子性&#xff1a;对任意单个volatile变量的读/写具有原子性&#xff0c;但类似于volatile这种复合操作不具有原子性。 接下来我们用程序验证。…

Springboot开发 -- Postman 调试类型详解

引言 在 Spring Boot 应用开发过程中&#xff0c;接口测试是必不可少的一环。Postman 作为一款强大的 API 开发和测试工具&#xff0c;可以帮助开发者轻松构建、测试和管理 HTTP 请求。本文将为大家介绍如何在 Spring Boot 开发中使用 Postman 进行接口测试。 一、准备工作 安…

3D透视图转的时候模型闪动怎么解决?---模大狮模型网

在3D建模与渲染的世界中&#xff0c;透视图是我们观察和操作模型的重要窗口。然而&#xff0c;有时候在旋转透视图时&#xff0c;模型会出现闪动的现象&#xff0c;这不仅影响了我们的工作效率&#xff0c;还可能对最终的渲染效果产生负面影响。本文将探讨这一问题的成因&#…

魔众文库系统v6.6.0分销功能,后台日志重构,文档转换优化

分销功能&#xff0c;后台日志重构&#xff0c;文档转换优化 [新功能] 升级支持支付宝授权登录最新方式 [新功能] 后台左上角标题支持自定义&#xff0c;修改 modstart.php 中 admin.title 配置 [新功能] 日志界面重构&#xff0c;全新日志查看体验 [新功能] 链接选择弹窗增…

C++:vector的介绍及使用

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 文章目录 前言 一、vector的介绍 二、vector的使用 2.1.构造和赋值重载&#xff08;Member functions&#xff09; 2.2 vector iterator 的使用 2.3 vector 空间增长问题 2.4 vector 增删查改 三 sort 四 v…