達夢數據庫使用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表的數據:LIUQINGYANUREC_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.pswp.cn/web/15393.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15393.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15393.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數組序號Spinner

使用Spnner代替編輯框&#xff0c;只能選擇已有的&#xff0c;不會越界&#xff0c;大大簡化了代碼。 String[] SA new String[list.size()]; for (int i0; i<SA.length; i) {SA[i] String.valueOf(i); } ArrayAdapter<String> adapter1 new ArrayAdapter<>(…

[國產大模型簡單使用介紹] 開源與免費API

個人博客:Sekyoro的博客小屋 個人網站:Proanimer的個人網站 隨著大模型技術蓬勃發展和開源社區越來越活躍,國內的大模型也如雨后春筍一般.這時,一些就會問了,有了llama3,Mistral還有Gemma等等,國外大廠接連發力,一些開源社區也會有一些不錯的模型,國內怎么比?對一個人使用,oll…

下雨!大水蟻引發的水文!看比賽咯,曼聯VS曼城——早讀(逆天打工人爬取熱門微信文章解讀)

嘮嘮嗑 水一水 引言Python 代碼結尾 引言 今天星期六 大小周 一個等了很久的雙休 昨天晚上真的是嚇到我了 漫天的小飛蟲 我一開始還以為是一兩只 沒想到那些小飛蟲 從陽臺不斷飛進來 在山卡拉下面租房子 也是太恐怖了 來個特寫 他們也就一個晚上的時間 成蟲 天氣合適 長翅…

大語言模型發展歷史

大語言模型的發展歷史可以追溯到自然語言處理&#xff08;NLP&#xff09;和機器學習早期的探索&#xff0c;但真正快速發展起來是在深度學習技術興起之后。以下是大語言模型發展的一個簡要歷史概述&#xff1a; 早期階段&#xff08;20世紀50-90年代&#xff09;&#xff1a; …

網絡拓撲—DNS服務搭建

文章目錄 DNS服務搭建網絡拓撲配置網絡DNSPC 安裝DNS服務配置DNS服務創建正向查找區域創建反向查找區域創建子域名 PC機DNS域名解析 DNS服務搭建 網絡拓撲 為了節省我的U盤空間&#xff0c;沒有用路由器&#xff0c;所以搭建的環境只要在同網段即可。 //交換機不用考慮 DNS&a…

MiniCPM-Llama3-V-2_5-int4

MiniCPM-Llama3-V-2_5-int4大模型部署使用環境&#xff1a; python3.8cuda11.8其它要求&#xff0c;按照安裝文檔要求下載即可 我是在算力平臺用4090跑的&#xff0c; GPU 顯存&#xff08;8GB&#xff09;可以部署推理 int4 量化版本&#xff0c;如果推理非量化版本需要更高顯…

云部署最簡單python web

最近在玩云主機&#xff0c;考慮將簡單的web應用裝上去&#xff0c;通過廣域網訪問一下&#xff0c;代碼很簡單&#xff0c;所以新手幾乎不會碰到什么問題。 from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, World!app.route(/gree…

2024洗地機哪個牌子好?洗地機十大品牌

洗地機在不同家庭環境中都能發揮其獨特的優勢&#xff0c;無論是大面積的地板還是狹小的角落&#xff0c;都能輕松應對。 對于有孩子或寵物的家庭&#xff0c;地面上經常會有各種雜物和污漬&#xff0c;洗地機強大的吸力和深度清潔功能&#xff0c;可以迅速清理掉這些臟東西&a…

數理邏輯:1、預備知識

17.1 命題和聯結詞 ? 命題&#xff1a;可以判定真假的陳述句。&#xff08;則悖論&#xff0c;祈使句&#xff0c;疑問句都不是命題&#xff09; ? 原子命題&#xff1a;不能被分割為更小的命題的命題 例如&#xff1a; 2既是素數又是偶數 可以由$p: 2 是素數&#xff0c;…

DNS的服務與部署(2)

1、dns的安裝及開啟 dnf install bind.x86_64 -y #安裝 #Berkeley Internet Name Domain (BIND) systemctl enable --now named #啟用dns服務&#xff0c;服務名稱叫named firewall-cmd --permanent --add-servicedns #火墻設置 firewall-cmd --reload …

基于SSH的母嬰用品銷售管理系統帶萬字文檔

文章目錄 母嬰商城系統一、項目演示二、項目介紹三、系統部分功能截圖四、萬字論文參考五、部分代碼展示六、底部獲取項目源碼和萬字論文參考&#xff08;9.9&#xffe5;帶走&#xff09; 母嬰商城系統 一、項目演示 母嬰商城系統 二、項目介紹 基于SSH的母嬰商城系統 系統…

Tina-Linux -- 3. LVGL測試

參考韋東山 – Tina_Linux_圖形系統_開發指南 Tina-linux lvgl 配置 環境配置 進入Tina-SDK根目錄 source build/envsetup.sh lunch XXX平臺名稱 make menuconfigLVGL Gui --->Littlevgl --->< > lv_demo<*> lv_examples &#xff08;lvgl官方demo&#…

【區塊鏈】fisco節點運維 更新ing

基于已完成的區塊鏈系統與管理平臺搭建工作&#xff0c;開展區塊鏈節點的加入與退出運維工作&#xff0c;具體內容如下 以下只是舉例子講 如果有其他修改沒舉例出來可以留言 私信 主要以比賽出題的形式講 區塊鏈節點輸出等級為警告級&#xff0c;并設置日志存儲閾值為100MB并…

主機與VMware虛擬機共享文件夾

虛擬機M --> 設置 --> 選項 --> 共享文件夾 虛擬機里的共享文件夾需要掛載 sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other from 主機與VMware虛擬機共享文件夾&#xff1a;解決虛擬機找不到共享文件夾問題 - 知乎

C++實現的代碼行數統計器

代碼在GitHubMaolinYe/CodeCounter: C20實現的代碼統計器&#xff0c;代碼量小于100行&#xff0c;可以統計目錄下所有代碼文件的行數 (github.com) 前段時間到處面試找實習&#xff0c;有技術負責人的負責人問我C寫過多少行&#xff0c;5萬還是10萬&#xff0c;用來評估熟練度…

Capture One Studio for Mac:打造完美影像的利器

對于攝影師而言&#xff0c;每一次按下快門都是一次對完美影像的追求。而Capture One Studio for Mac正是這樣一款能夠幫助你實現這一追求的利器。 Capture One Studio for Mac v16.4.2.1中文直裝版下載 首先&#xff0c;Capture One Studio for Mac擁有出色的圖像處理能力。它…

從零起航,Python編程全攻略

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、Python入門之旅 二、Python進階之道 三、Python爬蟲實戰 四、Python數據分析利器 五…

kind: Telemetry

訪問日志 訪問日志提供了一種從單個工作負載實例的角度監控和理解行為的方法。 Istio 能夠以一組可配置的格式為服務流量生成訪問日志&#xff0c; 使操作員可以完全控制日志記錄的方式、內容、時間和地點。 有關更多信息&#xff0c;請參閱獲取 Envoy 的訪問日志。 https:/…

TS+elementUI的表格做form校驗寫法(手機/郵箱號驗證)

1.form表單寫法 <template><div style"height:100%;width:100%;position:relative"><el-dialog title"編輯" :visible.sync"dialogVisible" width15% :close-on-click-modalfalse><el-form :model"form" :rule…

模塊化程序設計(函數的定義、調用、參數傳遞、局部變量、全局變量)

函數的引入&#xff1a; 我們曾經學習了程序設計中的三種基本控制結構&#xff08;順序、分支、循環&#xff09;。用它們可以組成任何程序。但在應用中&#xff0c;還經常用到子程序結構。 通常&#xff0c;在程序設計中&#xff0c;我們會發現一些程序段在程序的不同地方反復…