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

news2024/11/25 4:36:39

在生产系统上不小心修改了表数据后最快的方法是用闪回查询找回。但时间不能超过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

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

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

相关文章

DotNetty ByteBuffer

DotNetty是一个高性能的.NET网络通信框架,基于Netty,支持TCP、UDP、HTTP、WebSocket等协议。适用于高并发、低延迟场景,如实时通信、游戏服务器、IoT应用及大型分布式系统,通过异步I/O、零拷贝等技术提升性能,具备易用…

eNSP小练习一枚

问答看到的,随便敲了敲,希望各路大佬不吝赐教~ 话说现在的问答全是ai,乌烟瘴气的 首先配置全互通,ip vlan 端口隔离 ospf啥的 SWA # vlan batch 10 20 30 99 # interface Vlanif1ip address 10.1.1.2 255.255.255.0 # interf…

【ETAS CP AUTOSAR工具链】ARXML文件详解

本篇文章首先对ARXML这种文件格式做了一个概述,叙述了这种标签语言的基本语法(如果您用HTML做过网页,那么这种格式您一定不会陌生),然后对ARXML文件都会包含的一些基本信息做了详细的解读,最后基于使用ISOL…

[数据集][目标检测]吸烟检测数据集VOC+YOLO格式1449张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1449 标注数量(xml文件个数):1449 标注数量(txt文件个数):1449 标注…

鸿蒙开发配置官方地图

一共需要配置 p12 p7b cer csr 四个文件 p12文件配置 注意创建文件名必须是.p12 到AGC创建项目 AppGallery Connect 添加自己的项目名称 我没有开启 暂时不需要 看个人需求 下载刚创建的cer证书 回到我的项目中 点击刚创建的项目 点击这里 四个文件齐全了 "metadata&qu…

近临算法(个人总结版)

背景 近邻算法(Nearest Neighbor Algorithm)是一种基本但非常有效的分类和回归方法。最早由Fix和Hodges在1951年提出,经过几十年的发展和改进,已成为数据挖掘、模式识别和机器学习领域的重要工具。近邻算法基于相似性原则&#x…

DVWA登录页面空白问题解决

问题: 创建完成后打开登录页面,发现打不开,一片空白 解决: php版本不对,更换版本即可

VueHooks Plus:Vue 3 Hooks 的全面解决方案

VueHooks Plus:Vue 3 Hooks 的全面解决方案 文章目录 VueHooks Plus:Vue 3 Hooks 的全面解决方案〇、元信息一、概述快速开始TypeScript 支持交互式 Demo 演示服务器端渲染(SSR)支持基于插件模式的请求函数按需加载安全性和测试 二…

PHP生成二维码+二维码包含logo图片展示

composer require chillerlan/php-qrcode 用到的扩展自己安装(注:只生成二维码只要开gd扩展就行) 仅生成二维码看这个: use chillerlan\QRCode\QRCode;public function QRCode(){$qrcode new QRCode();$url "http://ww…

如何利用51建模网,实现3D模型线上展示和应用?

按照下面的步骤,在51建模网上传3D模型,并编辑完成后,接下来就是如何让这些3D模型得到更好的展示、传播和应用。 一、3D内容快速分享与传播 3D模型在51建模网上传发布后,即可获得一个可分享的链接和二维码,直接分享给客…

jenkins插件之Warnings

Warnings插件,收集静态分析工具报告的编译器警告或问题,并将结果可视化。它内置了对许多编译器的支持(cpp,clang,java等)和工具(spotbugs,pmd,checkstyle,esl…

力扣226. 翻转二叉树(DFS的两种思路)

Problem: 226. 翻转二叉树 文章目录 题目描述思路复杂度Code 题目描述 思路 涉及二叉树的递归解法时往往需要考虑两种思路: 1.在递归遍历时执行题目需要的具体要求; 2.将一个大问题分解为多个小子问题 具体到本体: 思路1:遍历 先…

作业-day-240521

多点思维导图 面试题 1、项目中如何实现TCP的并发 1)、一般的TCP服务器通信,只能完成一个客户端的操作。要实现多客户端的通信,可使服务器端循环创建并收发客户端的通信。 2)、但仅循环服务器使用的情况,由于accept…

股指期权和股指期货的区别

今天期权懂带你了解股指期权和股指期货的区别。在金融衍生品市场,既有股指期货又有股指期权,期货与期权是两种不同的资产。 股指期权和股指期货的区别 权利与义务: 股指期货是一种协议,买卖双方都有义务在合约到期时按照约定的价…

CSS demo演示 20240524

说明&#xff1a;不修改父盒子的样式&#xff0c;只在子盒子上设置定位&#xff0c;让子盒子定位在父盒子右侧。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>…

CGAN|生成手势图像|可控制生成

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;TensorFlow入门实战&#xff5c;第3周&#xff1a;天气识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 CGAN&#xff08;条件生成对抗网络&#xf…

项目十二:简单的python基础爬虫训练

许久未见&#xff0c;甚是想念&#xff0c;今日好运&#xff0c;为你带好运。ok&#xff0c;废话不多说&#xff0c;希望这门案例能带你直接快速了解并运用。&#x1f381;&#x1f496; 基础流程 第一步&#xff1a;安装需要用到的requests库&#xff0c;命令如下 pip inst…

Vue3实战笔记(41)—自己封装一个计时器Hooks

文章目录 前言计时器钩子总结 前言 在Vue项目中&#xff0c;封装一个计时器挂钩&#xff08;Hook&#xff09;是一种实用的技术&#xff0c;它允许你在组件中方便地管理定时任务&#xff0c;如倒计时、计时器等&#xff0c;而无需在每个使用场景重复编写相同的逻辑代码。 计时…

uniapp如何使用自定义的图标

http://t.csdnimg.cn/8KenC 以上是原文章,下面内容是从这篇文章转发的 一、导入 1.在官方&#xff08;iconfont-阿里巴巴矢量图标库&#xff09;选择自己想要的图标&#xff0c;加入购物车 2. 在点击购物车下载代码 3.解压文件夹 并更改名字 4.将文件夹&#xff08;iconfont&…

Xline社区会议Call Up|在 CURP 算法中实现联合共识的安全性

为了更全面地向大家介绍Xline的进展&#xff0c;同时促进Xline社区的发展&#xff0c;我们将于2024年5月31日北京时间11:00 p.m.召开Xline社区会议。 欢迎您届时登陆zoom观看直播&#xff0c;或点击“阅读原文”链接加入会议&#xff1a; 会议号: 832 1086 6737 密码: 41125…