<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>勇敢DBA不怕困难</title><description>数据库运维实战笔记</description><link>https://blog.newworld.help/</link><language>zh_CN</language><item><title>MongoDB常用命令</title><link>https://blog.newworld.help/posts/mongodb%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mongodb%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</guid><description>mongodump -h dbhost -d dbname -o dbdirectory</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mongodb备份与恢复：
mongodump -h dbhost -d dbname -o dbdirectory
mongorestore -h dbhost -d dbname --directoryperdb dbdirectory&lt;/p&gt;
&lt;p&gt;rs.stepDown() -主从节点切换
rs.printSlaveReplicationInfo()-查看同步是否延迟
show  dba  //查看所有数据库
use  数据库名   //进入对应的数据库
show  users   //查看当前db用户以及附属角色权限
show collections   //查看所有collection
db.collection.count()   //查看该collection下所有数据（没有条件）
db.collection.find( {a:1} )  //查看该collection下数据（有条件，属性为a.值为1）
db.collection.findOne()   //查看collection结果信息
db.adminCommand({&quot;flushrouterconfig&quot;:1}) // 刷新元数据信息
db.yest.createIndex({&quot;_id:1&quot;},{background:true})     //创建test 集合下索引
db.adminCommand({getCmdLineOpts:1})   // 获取当前db配置信息&lt;/p&gt;
&lt;p&gt;//将指定db下数据查询结果输出到本地，一般不知道db用户密码情况下使用
mongo  --authenticationDatabase  admin -uroot  -p**** localhost:27017/baaoeder  --eval &apos;db.test.find()&apos; &amp;gt;test.txt&lt;/p&gt;
&lt;p&gt;//执行js脚本有两种方式，一种执行执行，但是对于find语句如下案例写法：db.test.find().forEach(printjson);第二种直接使用load(&apos;&apos;/home/mongod/teat.js)进行执行
mongo  --authenticationDatabase  admin   -uroot  -p**** localhost:27017/bssorder  --quiet   test.js &amp;gt;text.txt&lt;/p&gt;
&lt;p&gt;导数&apos;&apos;
//-d 表示对应实例名，-c表示对应集合， -o表示输出目录， -readPreference 表示从节点导出，不加默认从主节点导
mongodump  -h  localhost:27017  -uroot   -p****  -d test  -c  test01  --rreadPreference=secondary  --authenticationDatabase=admin -o /pabank/imp&lt;/p&gt;
&lt;p&gt;//movechunk操作
sh.moveChunk(&quot;test.fundProductInfo&quot;, { &quot;_id&quot; : &quot;test.fundProductInfo-_id_ObjectId(&apos;5ea8ed37abea9012e312c542&apos;)&quot;},&quot;repl&quot;)&lt;/p&gt;
&lt;p&gt;db.settings.update({_id:&quot;balancer&quot;},{$set:{activeWindow:{start:&quot;23:00&quot;,stop:&quot;6:00&quot;}}},true)   //调整balancer窗口，config实例下执行
db.adminCommand({replSetResizeOplog:1,size:51200})  //在线修改oplog大小，单位M&lt;/p&gt;
&lt;p&gt;时间戳转换
MongoDB  Enterprise  repl:PRIMARY&amp;gt; new  Date(1627831113000)
ISODate(&quot;2021-08-01T15:18:33Z&quot;)&lt;/p&gt;
</content:encoded></item><item><title>装库脚本笔记</title><link>https://blog.newworld.help/posts/%E8%A3%85%E5%BA%93%E8%84%9A%E6%9C%AC%E7%AC%94%E8%AE%B0/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E8%A3%85%E5%BA%93%E8%84%9A%E6%9C%AC%E7%AC%94%E8%AE%B0/</guid><description>DMShellInstall-master 压缩包</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;脚本下载：
https://gitee.com/hnyuanzj/DMShellInstall&lt;/p&gt;
&lt;p&gt;###############################笔记日期：2025年8月18日
1.脚本使用
#只支持最新版的达梦8、9
DMShellInstall-master 压缩包
装老版本需要删除（参数是拼接字符串，注释无效）：RLOG_POSTFIX_NAME=$rlog_postfix_name \&lt;/p&gt;
&lt;p&gt;#支持2022.09.27版本达梦8
soft 压缩包&lt;/p&gt;
&lt;p&gt;2.参数注意
-hn  demo &lt;code&gt;# 只写一个主机名，其他会加序号递增 node01,node02&lt;/code&gt;
-iso n &lt;code&gt;# yum源已经配置好,设置n&lt;/code&gt; &lt;br /&gt;
-dbg y &lt;code&gt;# 报错信息调试,设置y&lt;/code&gt;
-sp  demo &lt;code&gt;# 不用写特殊字符，会识别不了&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;3.许可证注意
使用脚本跑完后不要直接按重启，先换dm.key,再y重启
#查看数据库版本
Select build_version from v$instance;
#数据库更新授权,检查
sp_load_lic_info();
select EXPIRED_DATE from V$LICEESE;&lt;/p&gt;
&lt;p&gt;4.重启后手动拉起进程
启动数据库
启动主库实例:/dm8/bin/DmService_rural_01 start
启动备库实例:/dm8/bin/DmService_rural_02 start
启动主库守护:/dm8/bin/DmWatcherService_rural_01 start
启动备库守护:/dm8/bin/DmWatcherService_rural_02 start
启动主监视器:/dm8/bin/DmMonitorServiceDMMONITOR_rural_P start
启动备监视器:/dm8/bin/DmMonitorServiceDMMONITOR_rural_S start&lt;/p&gt;
&lt;p&gt;停止数据库
关闭顺序：监控器、守护、实例
停止备监视器:/dm8/bin/DmMonitorServiceDMMONITOR_rural_S stop
停止主监视器:/dm8/bin/DmMonitorServiceDMMONITOR_rural_P stop
停止备库守护:/dm8/bin/DmWatcherService_rural_02 stop
停止主库守护:/dm8/bin/DmWatcherService_rural_01 stop
停止主库实例:/dm8/bin/DmService_rural_01 stop
停止备库实例:/dm8/bin/DmService_rural_02 stop&lt;/p&gt;
</content:encoded></item><item><title>SQL_LOADER</title><link>https://blog.newworld.help/posts/sql_loader/</link><guid isPermaLink="true">https://blog.newworld.help/posts/sql_loader/</guid><description>参考：https://blog.csdn.net/yk10010/article/details/88978522</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;参考：https://blog.csdn.net/yk10010/article/details/88978522&lt;/p&gt;
&lt;p&gt;#########################################################
注意事项：
表名和列名不要用中文，ctl文件写起来很麻烦
尽量不要空空格分隔符，内容里有空格就会报错
不要写注释在ctl文件中，可能会识别不了&lt;/p&gt;
&lt;p&gt;#########################################################
OPTIONS (skip=1,rows=128)     -- skip=1 用来跳过数据中的第一行
LOAD DATA
CHARACTERSET UTF8             -- 必加，不然容易乱码
INFILE &apos;/path/to/data.csv&apos;    -- 数据文件路径
APPEND                        -- 加载模式（APPEND/REPLACE/INSERT）
INTO TABLE your_table         -- 目标表
FIELDS TERMINATED BY &apos;,&apos;      -- 字段分隔符（如逗号、制表符X&apos;09&apos;）
OPTIONALLY ENCLOSED BY &apos;&quot;&apos;    -- 数据中每个字段用 &apos;&quot;&apos; 框起，比如字段中有 &quot;,&quot; 分隔符时（可选）
TRAILING NULLCOLS 			  --表的字段没有对应的值时允许为空
(
col1 CHAR,                 -- 列定义及数据类型(数据类型可以不写)
col2 INTEGER EXTERNAL,
col3 DATE &quot;YYYY-MM-DD&quot;
)&lt;/p&gt;
&lt;p&gt;sqlldr oracle/oracle control=/home/demo.ctl  data=/home/demo.txt  direct=true;&lt;/p&gt;
&lt;p&gt;Direct导入可以跳过数据库的相关逻辑(DIRECT=TRUE)，而直接将数据导入到数据文件中，可以提高导入数据的性能。
在很多情况下，不能使用此参数(如果主键重复的话会使索引的状态变成UNUSABLE!)。&lt;/p&gt;
</content:encoded></item><item><title>Oracle常见参数文件报错</title><link>https://blog.newworld.help/posts/oracle%E5%B8%B8%E8%A7%81%E5%8F%82%E6%95%B0%E6%96%87%E4%BB%B6%E6%8A%A5%E9%94%99/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle%E5%B8%B8%E8%A7%81%E5%8F%82%E6%95%B0%E6%96%87%E4%BB%B6%E6%8A%A5%E9%94%99/</guid><description>ORA-09925: Unable to create audit trail file</description><pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;########################################################################################
ORA-09925: Unable to create audit trail file&lt;/p&gt;
&lt;p&gt;Linux-x86_64 Error: 2: No such file or directory&lt;/p&gt;
&lt;p&gt;Additional information: 9925&lt;/p&gt;
&lt;p&gt;ORA-01075: you are currently logged on&lt;/p&gt;
&lt;p&gt;修改pfile文件
*.audit_file_dest=&apos;$ORACLE_BASE/admin/dbname/adunmp&apos;
确定有这个路径
ls $ORACLE_BASE/admin/dbname/adunmp&lt;/p&gt;
&lt;p&gt;########################################################################################
ORA-00205: error in identifying control file, check alert log for more info&lt;/p&gt;
&lt;p&gt;检查pfile中control路径,是否和实际路径相同&lt;/p&gt;
&lt;p&gt;########################################################################################
PERFUTF1&amp;gt; startup
ORA-00823: Specified value of sga_target greater than sga_max_size
ORA-01078: failure in processing system parameters&lt;/p&gt;
&lt;p&gt;症状：sga_target大于sga_max_size,由于内存大于数据库限制最大内存导致数据库无法正常启动&lt;/p&gt;
&lt;p&gt;原因：执行升级脚本，导致参数文件被修改（并不确定，可能之前这个库的参数文件被人改了，具体原因未知）&lt;/p&gt;
&lt;p&gt;处理方案：
1.查看spfile文件位置(oracle,grid)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;srvctl config database -d PERFUTF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2.查看系统内存大小(任一用户)&lt;/p&gt;
&lt;p&gt;aix：topas
linux:free -m&lt;/p&gt;
&lt;p&gt;3.进到任意实例创建pfile文件(oracle sqlplus)&lt;/p&gt;
&lt;p&gt;create file=&apos;/tmp/xxxpfile.ora&apos; from spfile=&apos;+DATADG/PERFUTF/PARAMETERFILE/spfile.267.1106323705&apos;&lt;/p&gt;
&lt;p&gt;4.修改pfile(任一用户)&lt;/p&gt;
&lt;p&gt;vim /tmp/xxxpfile.ora
这里修改sga_max_size，系统内存是100g
（100-系统运行需要的内存-日常脚本需要的内存）80%=sga+pga
根据不同业务设定sga大小，这里看到pga只占了20g，每个实例都单独设置了最大sga大小，根据业务调整&lt;/p&gt;
&lt;p&gt;5.启动数据库（oracle sqlplus）
startup file=&apos;/tmp/pfiletest.ora&apos;&lt;/p&gt;
&lt;p&gt;6.创建spfile文件(oracle sqlplus)
create spfile from file=&apos;/tmp/xxxpfile.ora&apos;&lt;/p&gt;
&lt;p&gt;7.进到asmcmd查看spfile名称(grid asmcmd)&lt;/p&gt;
&lt;p&gt;cd +DATADG/PERFUTF/PARAMETERFILE/&lt;/p&gt;
&lt;p&gt;8.修改spfile默认路径(oracle,grid)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;srvctl modify database -d PERFUTF -spfile=&apos;+DATADG/PERFUTF/PARAMETERFILE/spfile.365.1106323705&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;9.重启数据库(oracle,grid)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;srvctl stop database -d PERFUTF
srvctl start database -d PERFUTF
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;crsctl status res -t
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>mysql存过临时汇总计数</title><link>https://blog.newworld.help/posts/mysql%E5%AD%98%E8%BF%87%E4%B8%B4%E6%97%B6%E6%B1%87%E6%80%BB%E8%AE%A1%E6%95%B0/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mysql%E5%AD%98%E8%BF%87%E4%B8%B4%E6%97%B6%E6%B1%87%E6%80%BB%E8%AE%A1%E6%95%B0/</guid><description>create table db_sqltext_temp_all (table_name varchar(36),</description><pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;--创建汇总表
create table db_sqltext_temp_all (table_name varchar(36),
gmt_create varchar(12),
sql_fulltext mediumtext);&lt;/p&gt;
&lt;p&gt;-- 如果存储过程存在，先删除存储过程
DROP PROCEDURE IF EXISTS proc_sqltext_temp_all;
-- 定义存储过程
CREATE PROCEDURE proc_sqltext_temp_all()
BEGIN
-- 定义变量记录循环处理是否完成
DECLARE done BOOLEAN DEFAULT FALSE;
-- 定义变量传递表名
DECLARE v_tablename BIGINT(12);
-- 定义游标,将需要查询的表取出
DECLARE cursor_student CURSOR FOR select substr(table_name,12) from information_schema.tables
where table_name like &apos;db_sqltext_%&apos;
and substr(table_name,12) regexp &apos;^[0-9]&apos;;
-- 定义CONTINUE HANDLER，当循环结束时 done=true
DECLARE CONTINUE HANDLER FOR SQLSTATE &apos;02000&apos; SET done=TRUE;
-- 打开游标
OPEN cursor_student;
-- 重复遍历
REPEAT
-- 每次读取一次游标
FETCH cursor_student INTO v_tablename;
-- 汇总表
set @sql_run1= concat(&apos;insert into db_sqltext_temp_all select &apos;,v_tablename,&apos; ,DATE_FORMAT(gmt_create,&apos;&apos;%Y&apos;&apos;) ,sql_fulltext
from db_sqltext_&apos;,v_tablename,&apos;
where (sql_fulltext like &apos;&apos;%temp_%&apos;&apos; or sql_fulltext like &apos;&apos;%_temp%&apos;&apos;
or  sql_fulltext like &apos;&apos;%tmp_%&apos;&apos; or sql_fulltext like &apos;&apos;%_tmp%&apos;&apos;
or  sql_fulltext like &apos;&apos;%test_%&apos;&apos; or sql_fulltext like &apos;&apos;%_test%&apos;&apos;)&apos;);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;prepare stmt1 from @sql_run1;

execute stmt1;

deallocate prepare stmt1;

-- 结束循环，意思是等到done=true时，结束循环REPEAT
UNTIL done END REPEAT;
-- 查询结果，仅会展示查出的最后一条
SELECT v_tablename;
-- 关闭游标
CLOSE cursor_student;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;END;&lt;/p&gt;
&lt;p&gt;-- 执行存储过程
CALL proc_sqltext_temp_all();&lt;/p&gt;
</content:encoded></item><item><title>获取DDL执行语句</title><link>https://blog.newworld.help/posts/%E8%8E%B7%E5%8F%96ddl%E6%89%A7%E8%A1%8C%E8%AF%AD%E5%8F%A5/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E8%8E%B7%E5%8F%96ddl%E6%89%A7%E8%A1%8C%E8%AF%AD%E5%8F%A5/</guid><description>参考https://www.cnblogs.com/smyx/p/13743076.html</description><pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;参考https://www.cnblogs.com/smyx/p/13743076.html&lt;/p&gt;
&lt;p&gt;注意如果使用sqlplus需要进行下列格式化，特别需要对long进行设置，否则无法显示完整的SQL&lt;/p&gt;
&lt;p&gt;set linesize 180
set pages 999
set long 90000&lt;/p&gt;
&lt;p&gt;1.查看序列定义的SQL语句
select dbms_metadata.get_ddl(&apos;SEQUENCE&apos;,&apos;SEQ_ID&apos;) from dual;&lt;/p&gt;
&lt;p&gt;2.查看表的定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;TABLE&apos;,&apos;TABLENAME&apos;,&apos;USERNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;3.查看用户的约束定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;CONSTRAINT&apos;,&apos;CONSTRAINTNAME&apos;,&apos;USERNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;4.查看外键定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;REF_CONSTRAINT&apos;,&apos;REF_CONSTRAINTNAME&apos;,&apos;USERNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;5.查看视图sql语句的定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;VIEW&apos;,&apos;VIEWNAME&apos;,&apos;USERNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;6.查看用户定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;USER&apos;,&apos;USERNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;7.查看表空间定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;TABLESPACE&apos;,&apos;TABLESPACENAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;8.查看物化视图定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;MATERIALIZED VIEW&apos;,&apos;MVNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;9.查看DB_LINK语句定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;DB_LINK&apos;,&apos;DBLINKNAME&apos;,&apos;USERNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;10.查看用户触发器定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;TRIGGER&apos;,&apos;TRIGGERNAME&apos;,&apos;USERNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;11.查看函数语句定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;FUNCTION&apos;,&apos;FUNCTIONNAME&apos;,&apos;USERNAME&apos;) from dual;&lt;/p&gt;
&lt;p&gt;12.查看包定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;PACKAGE&apos;,&apos;PACKAGENAME&apos;,&apos;USERNAME&apos;) from dual&lt;/p&gt;
&lt;p&gt;13.查看存储过程定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;PROCEDURE&apos;,&apos;PROCEDURENAME&apos;,&apos;USERNAME&apos;) from dual&lt;/p&gt;
&lt;p&gt;14.查看权限的定义&lt;/p&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;ROLE_GRANT&apos;,&apos;rolename&apos;) from dual;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查看系统权限的定义&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;SYSTEM_GRANT&apos;,&apos;rolename&apos;) from dual;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;查看对像权限的定义&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;select dbms_metadata.get_ddl(&apos;OBJECT_GRANT&apos;,&apos;角色名&apos;) from dual;&lt;/p&gt;
&lt;p&gt;17.查看db_link定义&lt;/p&gt;
&lt;p&gt;SELECT to_char(dbms_metadata.get_ddl(&apos;DB_LINK&apos;,&apos;SRP1.COM&apos;,&apos;PUBLIC&apos;)) FROM dual;&lt;/p&gt;
&lt;p&gt;查看当前用户表的SQL
select dbms_metadata.get_ddl(&apos;TABLE&apos;,&apos;EMPLOYEES&apos;) from dual;
查看其他用表或索引的SQL&lt;/p&gt;
&lt;p&gt;SELECT DBMS_METADATA.GET_DDL(&apos;TABLE&apos;,&apos;DEPT&apos;,&apos;SCOTT&apos;) FROM DUAL;&lt;/p&gt;
&lt;p&gt;查看创建用户索引的SQL
查看所需表的索引&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; select INDEX_NAME, INDEX_TYPE, TABLE_NAME from user_indexes WHERE table_name=&apos;EMP&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看当前用户索引的SQL
select dbms_metadata.get_ddl(&apos;INDEX&apos;,&apos;PK_DEPT&apos;) from dual;&lt;/p&gt;
&lt;p&gt;查看其他用户索引的SQL
select dbms_metadata.get_ddl(&apos;INDEX&apos;,&apos;PK_DEPT&apos;,&apos;SCOTT‘) from dual;
查看创建主键的SQL
查看所需表的约束&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; select owner, table_name, constraint_name, constraint_type from user_constraints where table_name=&apos;EMP&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看创建主键的SQL
SELECT DBMS_METADATA.GET_DDL(&apos;CONSTRAINT&apos;,&apos;EMP_PK&apos;) FROM DUAL;
查看创建外键的SQL&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SELECT DBMS_METADATA.GET_DDL(&apos;REF_CONSTRAINT&apos;,&apos;EMP_FK_DEPT&apos;) FROM DUAL;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看创建VIEW的语句
查看当前用户视图的SQL&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SELECT dbms_metadata.get_ddl(&apos;VIEW&apos;, &apos;MY_TABLES&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看其他用户视图的SQL&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SELECT dbms_metadata.get_ddl(&apos;VIEW&apos;, &apos;MY_TABLES&apos;,&apos;SCOTT‘) FROM DUAL;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看创建视图的SQL也可以&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; select text from user_views where view_name=upper(&apos;&amp;amp;view_name&apos;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DBMS_METADATA.GET_DDL的一些使用技巧
1、得到一个用户下的所有表，索引，存储过程，函数的ddl
SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)
FROM USER_OBJECTS u
where U.OBJECT_TYPE IN (&apos;TABLE&apos;,&apos;INDEX&apos;,&apos;PROCEDURE&apos;,&apos;FUNCTION‘);
2、得到所有表空间的ddl语句
SELECT DBMS_METADATA.GET_DDL(&apos;TABLESPACE&apos;, TS.tablespace_name)
FROM DBA_TABLESPACES TS;
3、得到所有创建用户的ddl
SELECT DBMS_METADATA.GET_DDL(&apos;USER&apos;,U.username)
FROM DBA_USERS U;
4、去除storage等多余参数
EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,&apos;STORAGE&apos;,false);&lt;/p&gt;
&lt;p&gt;--所支持的45个OBJECT TYPE：&lt;/p&gt;
&lt;p&gt;Type Name Meaning
　　------------------------------ ------------------------------
　　AUDIT_OBJ audits of schema objects
　　AUDIT audits of SQL statements
　　ASSOCIATION associate statistics
　　CLUSTER clusters
　　COMMENT comments
　　CONSTRAINT constraints
　　CONTEXT application contexts
　　DB_LINK database links
　　DEFAULT_ROLE default roles
　　DIMENSION dimensions
　　DIRECTORY directories
　　FUNCTION stored functions
　　INDEX indexes
　　INDEXTYPE indextypes
　　JAVA_SOURCE Java sources
　　LIBRARY external procedure libraries
　　MATERIALIZED_VIEW materialized views
　　MATERIALIZED_VIEW_LOG materialized view logs
　　OBJECT_GRANT object grants
　　OPERATOR operators
　　OUTLINE stored outlines
　　PACKAGE stored packages
　　PACKAGE_SPEC package specifications
　　PACKAGE_BODY package bodies
　　PROCEDURE stored procedures
　　PROFILE profiles
　　PROXY proxy authentications
　　REF_CONSTRAINT referential constraint
　　ROLE roles
　　ROLE_GRANT role grants
　　ROLLBACK_SEGMENT rollback segments
　　SEQUENCE sequences
　　SYNONYM synonyms
　　SYSTEM_GRANT system privilege grants
　　TABLE tables
　　TABLESPACE tablespaces
　　TABLESPACE_QUOTA tablespace quotas
　　TRIGGER triggers
　　TRUSTED_DB_LINK trusted links
　　TYPE user-defined types
　　TYPE_SPEC type specifications
　　TYPE_BODY type bodies
　　USER users
　　VIEW views
　　XMLSCHEMA XML schema&lt;/p&gt;
</content:encoded></item><item><title>Oracle进程介绍</title><link>https://blog.newworld.help/posts/oracle%E8%BF%9B%E7%A8%8B%E4%BB%8B%E7%BB%8D/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle%E8%BF%9B%E7%A8%8B%E4%BB%8B%E7%BB%8D/</guid><description>Oracle数据库中的主要后台进程包括:</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;https://www.cnblogs.com/suixingc/p/17585435.html&lt;/p&gt;
&lt;p&gt;Oracle数据库中的主要后台进程包括:&lt;/p&gt;
&lt;p&gt;SMON - 系统监控进程,负责实例和数据库恢复。&lt;/p&gt;
&lt;p&gt;PMON - 进程监控进程,负责进程控制和故障转移。&lt;/p&gt;
&lt;p&gt;DBWn - 数据库写进程,负责将缓冲区数据刷新到数据文件。&lt;/p&gt;
&lt;p&gt;LGWR - 日志写进程,负责将日志缓冲区数据写入日志文件。&lt;/p&gt;
&lt;p&gt;CKPT - 检查点进程,负责进行数据文件和控制文件的检查点更新。&lt;/p&gt;
&lt;p&gt;MMON - 内存监控进程,负责监控和优化SGA内存。&lt;/p&gt;
&lt;p&gt;ARCn - 归档进程,负责存档和备份填满的日志文件。&lt;/p&gt;
&lt;p&gt;RECO - 恢复进程,负责控制和协调数据库恢复操作。&lt;/p&gt;
&lt;p&gt;MMAN - 内存管理进程,管理数据库内存结构。&lt;/p&gt;
&lt;p&gt;MMNL - 共享服务器监视进程,管理共享服务器进程。&lt;/p&gt;
&lt;p&gt;这些关键进程对于维护Oracle数据库的可靠性、性能和高可用性起着非常重要的作用。&lt;/p&gt;
&lt;p&gt;SMON
smon(System Monitor)是Oracle数据库中的一个重要后台进程,主要负责进行数据库恢复和实例恢复相关的工作。&lt;/p&gt;
&lt;p&gt;smon进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;进行闪回数据库的恢复 - 如果数据库发生故障,smon会根据存档日志文件中的信息恢复数据库。&lt;/p&gt;
&lt;p&gt;进行介质(Media)恢复 - 如果数据文件损坏或丢失,smon可以用备份文件进行恢复。&lt;/p&gt;
&lt;p&gt;进行实例恢复 - 如果实例异常关闭,smon会重新启动实例。&lt;/p&gt;
&lt;p&gt;清理数据库文件 - smon会自动清理不再使用的回滚段、临时段等数据库文件。&lt;/p&gt;
&lt;p&gt;管理表空间 - smon负责监控表空间的使用情况。&lt;/p&gt;
&lt;p&gt;空闲空间回收 - smon会自动回收对象删除后产生的空闲空间。&lt;/p&gt;
&lt;p&gt;字典管理 - smon会监控数据字典的一致性。&lt;/p&gt;
&lt;p&gt;smon进程对保证Oracle数据库的高可用性非常重要,需要持续运行并周期性地执行上述恢复和清理任务。&lt;/p&gt;
&lt;p&gt;PMON
pmon(Process Monitor)是Oracle数据库中的后台进程,主要负责进程控制和恢复相关的工作。&lt;/p&gt;
&lt;p&gt;pmon进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;进程控制 - 负责启动和结束所有Oracle后台进程,以及进程故障转移。&lt;/p&gt;
&lt;p&gt;进程恢复 - 如果有进程异常终止,pmon负责重新启动该进程。&lt;/p&gt;
&lt;p&gt;清理进程产生的临时文件 - pmon会定期清理因进程运行而产生的临时文件。&lt;/p&gt;
&lt;p&gt;跟踪和记录警告 - pmon会跟踪和记录各种警告信息,如参数文件错误等。&lt;/p&gt;
&lt;p&gt;监控进程状态 - pmon定期监控检查所有Oracle进程的状态。&lt;/p&gt;
&lt;p&gt;执行进程故障转移 - 当实例失败时,pmon负责将进程转移到另一个实例。&lt;/p&gt;
&lt;p&gt;执行原始磁盘恢复 - pmon负责根据存档日志执行数据库恢复。&lt;/p&gt;
&lt;p&gt;管理和监控属性文件 - 监视属性文件的参数设置。&lt;/p&gt;
&lt;p&gt;pmon对于保证Oracle实例和数据库的正常运行非常重要,需要持续运行并进行各种监控、恢复和故障转移的工作。&lt;/p&gt;
&lt;p&gt;DBWn
DBWn(Database Writer)是Oracle数据库中的后台进程,主要负责将数据从SGA(System Global Area,系统全局区域)刷新到数据文件中的工作。&lt;/p&gt;
&lt;p&gt;DBWn进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;将脏数据块刷新到数据文件 - 当一个数据块在SGA中被修改后,DBWn将其写回磁盘。&lt;/p&gt;
&lt;p&gt;编写整表扫描的数据块 - 当全表扫描读取数据块时,DBWn会及时将扫描过的数据块写回磁盘。&lt;/p&gt;
&lt;p&gt;日志写操作 - DBWn按需执行Redo日志文件块的写入。&lt;/p&gt;
&lt;p&gt;数据文件异步IO - DBWn根据需要进行数据文件异步IO操作。&lt;/p&gt;
&lt;p&gt;保证写一致性 - 如果写操作出现故障,DBWn会负责重做写操作。&lt;/p&gt;
&lt;p&gt;执行检查点操作 - DBWn定期执行检查点,将脏数据块刷新到数据文件。&lt;/p&gt;
&lt;p&gt;空闲空间回收 - DBWn会将Drop操作释放的空间标记为空闲以供重用。&lt;/p&gt;
&lt;p&gt;DBWn对于提高数据库性能非常重要,合理配置DBWn进程可以减少IO瓶颈,改善 OLTP系统的响应时间。&lt;/p&gt;
&lt;p&gt;LGWR
LGWR(Log Writer)是Oracle数据库中的后台进程,负责管理重做日志缓冲区并将其内容刷新到联机重做日志文件中。&lt;/p&gt;
&lt;p&gt;LGWR进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;将日志缓冲区的日志记录刷新到重做日志文件。&lt;/p&gt;
&lt;p&gt;执行日志文件的切换操作。当当前重做日志文件填满时,LGWR会切换到下一个日志文件。&lt;/p&gt;
&lt;p&gt;保证事务日志记录写入磁盘。LGWR会确保事务提交前将相关的日志记录刷新到磁盘中。&lt;/p&gt;
&lt;p&gt;执行日志文件的ARCHIVE操作。LGWR会在日志切换时,将已存档的日志文件拷贝到存档目录中。&lt;/p&gt;
&lt;p&gt;在实例恢复时应用存档日志文件来重做变更操作。&lt;/p&gt;
&lt;p&gt;管理存储系统中的日志文件。如添加、删除重做日志文件的文件管理工作。&lt;/p&gt;
&lt;p&gt;跟踪当前使用的日志文件和存档日志文件。&lt;/p&gt;
&lt;p&gt;LGWR对保证Oracle数据库的事务和恢复机制至关重要。合理配置LGWR可以优化日志写入性能,减少数据丢失的风险。&lt;/p&gt;
&lt;p&gt;CKPT
CKPT(CheckPoint)是Oracle数据库中的一个后台进程,主要负责执行检查点来更新数据文件头和控制文件中的信息。&lt;/p&gt;
&lt;p&gt;CKPT进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;定期执行检查点 - 在日志切换或满足一定条件时,CKPT会创建一个检查点,将相关信息写入数据文件头和控制文件。&lt;/p&gt;
&lt;p&gt;记录SCN - 在检查点时,CKPT会保存当前的系统变更号(SCN),用于恢复。&lt;/p&gt;
&lt;p&gt;写入datafile文件头 - 在检查点时,CKPT会保存datafile文件的相关信息,如文件序号、块数量等。&lt;/p&gt;
&lt;p&gt;写入控制文件 - CKPT会保存检查点创建时间、SCN号、数据文件信息等 metadata 到控制文件。&lt;/p&gt;
&lt;p&gt;支持实例恢复 - 如果实例失败,可以根据控制文件中的信息进行实例恢复。&lt;/p&gt;
&lt;p&gt;跟踪表空间使用 - CKPT会跟踪表空间的空闲空间信息。&lt;/p&gt;
&lt;p&gt;管理存档日志 - CKPT负责标记存档日志是否可被覆写。&lt;/p&gt;
&lt;p&gt;CKPT进程对保证数据库可以恢复至最近的一致性检查点非常重要。合理配置CKPT可以减少故障恢复时间。&lt;/p&gt;
&lt;p&gt;MMON
MMON(Memory Monitor) 是Oracle数据库中的后台进程,主要负责监控和调节SGA(System Global Area)的内存使用情况。&lt;/p&gt;
&lt;p&gt;MMON进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;监控SGA组件的内存使用 - 跟踪共享池、缓冲区高速缓存等SGA组件的内存分配和使用情况。&lt;/p&gt;
&lt;p&gt;调节共享池的大小 - 根据内存使用情况,自动调整共享池大小以释放或申请更多SGA内存。&lt;/p&gt;
&lt;p&gt;跟踪缓冲区缓存的使用情况 - 监控缓冲区缓存中脏块的数量,并发出写回请求。&lt;/p&gt;
&lt;p&gt;优化内存的分配和使用 - 将未使用的内存重新分配给需要的SGA组件。&lt;/p&gt;
&lt;p&gt;生成内存监控报告 - 收集内存使用情况并生成相关报告。&lt;/p&gt;
&lt;p&gt;跟踪共享池锁等待 - 找出导致共享池争用的SQL语句。&lt;/p&gt;
&lt;p&gt;优化执行SQL语句的内存 - 分析SQL语句的内存需求并优化内存分配。&lt;/p&gt;
&lt;p&gt;MMON通过主动监控和调节SGA的使用,从而优化Oracle数据库的内存性能,防止不必要的内存争用。&lt;/p&gt;
&lt;p&gt;MMNL
MMNL(Shared Server Monitor Light)是Oracle数据库中负责共享服务器连接管理和监控的后台进程。&lt;/p&gt;
&lt;p&gt;MMNL进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;监控共享服务器进程的连接和会话 - 跟踪每个服务器进程处理的用户连接和会话数量。&lt;/p&gt;
&lt;p&gt;均衡调度会话请求 - 根据服务器进程的负载情况,将新的用户会话请求分配给负载较轻的进程。&lt;/p&gt;
&lt;p&gt;监控服务器进程状态 - 检测和报告服务器进程的异常终止等问题。&lt;/p&gt;
&lt;p&gt;共享服务器进程管理 - 在需要时启动或终止服务器进程。&lt;/p&gt;
&lt;p&gt;参数和规则管理 - 根据配置和规则动态调整共享服务器的相关参数。&lt;/p&gt;
&lt;p&gt;性能统计 - 收集服务器进程的性能和统计数据。&lt;/p&gt;
&lt;p&gt;问题诊断 - 分析并报告共享服务器相关的性能或故障问题。&lt;/p&gt;
&lt;p&gt;共享池管理 - 与MMON协同,管理共享池的内存使用情况。&lt;/p&gt;
&lt;p&gt;MMNL使得共享服务器模式可以灵活管理和优化资源使用情况,更好地支持多用户连接。&lt;/p&gt;
&lt;p&gt;MMAN
MMAN(Memory Manager)是Oracle数据库中的后台进程,主要负责数据库内存管理和分配的工作。&lt;/p&gt;
&lt;p&gt;MMAN进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;大内存分配 - 负责分配大于1M的大内存,比如共享池、数据缓冲区等。&lt;/p&gt;
&lt;p&gt;SGA内存管理 - 管理系统全局区(SGA)的内存结构和分配。&lt;/p&gt;
&lt;p&gt;跟踪SGA组件内存使用 - 监控各个SGA组件如共享池、缓冲区的内存分配情况。&lt;/p&gt;
&lt;p&gt;动态SGA调整 - 根据总体内存使用情况,优化和调整SGA各组件的大小。&lt;/p&gt;
&lt;p&gt;大内存释放 - 收回未使用的大内存给操作系统,避免浪费。&lt;/p&gt;
&lt;p&gt;内存碎片整理 - 通过整合释放空间减少内存碎片。&lt;/p&gt;
&lt;p&gt;内存分配策略 - 根据不同的内存分配需求采用不同的内存分配算法。&lt;/p&gt;
&lt;p&gt;Out of Memory监控 - 监控和报告内存不足的情况。&lt;/p&gt;
&lt;p&gt;MMAN通过主动内存管理和优化,使得Oracle数据库可以高效稳定地运行,避免不必要的内存开销。&lt;/p&gt;
&lt;p&gt;LREG
LREG(Listener Registration) 是Oracle数据库中的一个后台进程,主要负责管理监听器进程(Listener)的注册信息。&lt;/p&gt;
&lt;p&gt;LREG进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;维护监听器注册数据 - 在本地实例中维护哪些数据库服务可通过监听器访问。&lt;/p&gt;
&lt;p&gt;处理服务注册请求 - 将新启动的数据库实例服务注册到监听器中。&lt;/p&gt;
&lt;p&gt;服务下线通知 - 将数据库实例关闭时发出的服务下线通知传递给监听器。&lt;/p&gt;
&lt;p&gt;连接服务请求转发 - 将监听器收到的连接请求转发给相应的数据库实例。&lt;/p&gt;
&lt;p&gt;高可用性支持 - 在RAC环境下,管理多个实例对同一服务的注册。&lt;/p&gt;
&lt;p&gt;信息同步 - 在RAC中,同步集群中各节点的监听器注册信息。&lt;/p&gt;
&lt;p&gt;注册表管理 - 维护监听器的服务注册表,存储每个数据库服务的信息。&lt;/p&gt;
&lt;p&gt;安全管理 - 确保只有授权过的数据库实例可以注册服务。&lt;/p&gt;
&lt;p&gt;LREG使监听器能够动态感知数据库服务的运行状态,是Oracle数据库跟监听器集成的关键组件。&lt;/p&gt;
&lt;p&gt;ARCn
ARCn(Archiver Process)是Oracle数据库中的后台进程,主要负责存档重做日志文件。&lt;/p&gt;
&lt;p&gt;ARC进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;归档重做日志 - 当日志文件切换时,将填满的日志文件存档到指定的存档目录中。&lt;/p&gt;
&lt;p&gt;验证存档 - 验证重做日志是否正确写入到存档文件中。&lt;/p&gt;
&lt;p&gt;优化归档操作 - 根据重做日志大小,调整存档的参数,以优化性能。&lt;/p&gt;
&lt;p&gt;异步存档模式 - 支持重做日志的异步归档。&lt;/p&gt;
&lt;p&gt;跟踪存档状态 - 记录存档进程的状态,是否遇到错误等。&lt;/p&gt;
&lt;p&gt;删除过期存档 - 在存档成功后,可以删除源重做日志文件释放空间。&lt;/p&gt;
&lt;p&gt;满足恢复需求 - 确保所有需要的存档日志都可用于恢复。&lt;/p&gt;
&lt;p&gt;故障转移支持 - 在RAC环境下,进行存档操作的容错和转移。&lt;/p&gt;
&lt;p&gt;ARC进程对于保证重做日志的完整性以支持恢复至关重要。合理配置可以大幅优化存档过程中的性能。&lt;/p&gt;
&lt;p&gt;RECO
RECO(Recoverer Process)是Oracle数据库中的一个后台恢复进程,主要负责处理恢复相关的操作。&lt;/p&gt;
&lt;p&gt;RECO进程的主要功能包括:&lt;/p&gt;
&lt;p&gt;协调恢复操作 - 协调并行恢复多个数据块的操作。&lt;/p&gt;
&lt;p&gt;应用重做日志 - 根据存档的重做日志应用变更来恢复数据库。&lt;/p&gt;
&lt;p&gt;跟踪恢复进度 - 记录数据库对象的恢复进度和状态。&lt;/p&gt;
&lt;p&gt;介质恢复 - 使用备份文件来恢复因介质故障导致的数据丢失。&lt;/p&gt;
&lt;p&gt;数据库完全恢复 - 将数据库恢复到指定时间点或系统变更号(SCN)。&lt;/p&gt;
&lt;p&gt;阻塞回滚 - 在特定情况下阻止事务回滚的恢复操作。&lt;/p&gt;
&lt;p&gt;跟踪Bad Block - 记录数据库恢复过程中发现的坏块。&lt;/p&gt;
&lt;p&gt;收集统计信息 - 收集有关恢复操作的统计和性能指标。&lt;/p&gt;
&lt;p&gt;RECO进程对于保证Oracle数据库可以可靠地进行数据恢复至关重要。&lt;/p&gt;
</content:encoded></item><item><title>数据库学习资源汇总</title><link>https://blog.newworld.help/posts/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB/</guid><description>========================================</description><pubDate>Mon, 15 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;========================================
数据库 Skills&lt;/h1&gt;
&lt;p&gt;Oracle：https://github.com/krisrice/oracle-db-skills
功能：100+ 篇实用指南，覆盖 SQL/PL/SQL 开发、性能调优、安全、管理、监控、架构、DevOps、迁移、SQLcl、ORDS 等 14 个领域，含 19c/26ai 版本兼容说明
备注：【官方】Kris Rice 是 Oracle 资深工程师，仓库原在其个人账号下，现已迁移至 Oracle 官方组织 oracle/skills（478 stars）&lt;/p&gt;
&lt;p&gt;OceanBase：https://github.com/oceanbase/oceanbase-skills
功能：OceanBase 集群部署与运维（OBD），覆盖集群生命周期、租户管理、备份恢复、SeekDB、OCP 接管、监控、基准测试，后续计划增加内核调优、SQL 诊断、迁移等
备注：【官方】OceanBase 蚂蚁集团官方组织维护，npm 可直接安装 oceanbase-deploy&lt;/p&gt;
&lt;p&gt;OceanBase SeekDB：https://github.com/oceanbase/seekdb-ecology-plugins/tree/main/agent-skills
功能：SeekDB AI 原生搜索数据库相关 Agent Skills，增强 Claude Code 等 AI 在 seekdb 场景下的能力
备注：【官方】OceanBase 官方生态插件仓库&lt;/p&gt;
&lt;p&gt;TiDB：https://github.com/pingcap/agent-rules
功能：12 个 skill 覆盖 TiDB Cloud 生命周期管理、Serverless Driver、Kysely、Prisma、Next.js、mysql2 驱动、PyTiDB、SQL 编写排错、查询调优、MySQL 兼容等
备注：【官方】PingCAP 官方组织维护，12 个 skill 内容丰富&lt;/p&gt;
&lt;p&gt;MySQL + PostgreSQL：https://github.com/planetscale/database-skills
功能：mysql skill 覆盖 MySQL/InnoDB schema 设计、索引优化、查询调优、事务、复制；postgres skill 覆盖 PostgreSQL 最佳实践、MVCC/VACUUM、WAL 调优、复制、连接池、监控；另有 vitess 和 neki skill
备注：【官方】PlanetScale 官方组织维护，同时覆盖 MySQL 和 PostgreSQL&lt;/p&gt;
&lt;p&gt;PostgreSQL (Supabase)：https://github.com/supabase/agent-skills
功能：supabase-p******-best-p****** skill 覆盖查询性能、连接管理、Schema 设计、并发锁、RLS 安全、数据访问模式、监控诊断等 8 个分类
备注：【官方】Supabase 官方组织维护，兼容 18+ AI Agent&lt;/p&gt;
&lt;p&gt;达梦、金仓、GaussDB 目前仍是空白，暂未收录。&lt;/p&gt;
&lt;h1&gt;========================================
操作系统 / Linux Skills&lt;/h1&gt;
&lt;p&gt;Linux 系统管理：https://github.com/lodetomasi/agents-claude-code/blob/main/linux-admin.md
功能：Linux 系统管理与自动化，覆盖性能调优、安全加固、故障排查、服务器管理
备注：【社区】个人开发者 lodetomasi 整理&lt;/p&gt;
&lt;p&gt;Linux 系统管理（MCPMarket）：https://mcpmarket.com/tools/skills/linux-system-management
功能：管理 Linux 包、服务、用户，自动化系统管理任务，加固服务器环境
备注：【第三方平台】MCPMarket 是第三方 skill 交易平台&lt;/p&gt;
&lt;h1&gt;========================================
运维 / DevOps / SRE Skills&lt;/h1&gt;
&lt;p&gt;DevOps SRE Runbook：https://github.com/bregman-arie/devops-sre-skills
功能：Agent 就绪的 SKILL.md 库，安全默认只读，覆盖 Kubernetes、AWS、Terraform、ArgoCD、Incident 等分类，含验证和回滚指引
备注：【社区】Arie Bregman（知名 DevOps 作者，《DevOps Interview Questions》作者）维护，Apache-2.0 开源&lt;/p&gt;
&lt;p&gt;服务器资源监控：https://juejin.cn/post/7617333072934649902
功能：system-resource-monitor skill，AI 自动监控集群各节点 CPU、内存、磁盘、网络状态，资源异常时主动告警和处理
备注：【社区】稀土掘金平台上的中文教程，介绍 system-resource-monitor skill 的安装配置&lt;/p&gt;
&lt;p&gt;Docker + Kubernetes + 基础设施：https://github.com/VoltAgent/awesome-claude-code-subagents
功能：专用 Agent 覆盖 Docker 镜像构建优化与安全、K8s 集群部署与排错、Nginx 配置等基础设施场景
备注：【社区】VoltAgent 团队整理的子代理合集，含 Docker Expert、Kubernetes Specialist 等&lt;/p&gt;
&lt;p&gt;Docker + Kubernetes + CI/CD + Terraform：https://agent-skills.cc/claude-skills/devops
功能：DevOps 基础设施 skills，含自动激活、hooks、agents，来自 6 个月真实项目经验
备注：【社区】agent-skills.cc 第三方 skill 分享平台&lt;/p&gt;
&lt;p&gt;多代理系统（Docker/Proxmox/Linux）：https://github.com/r2d2helm/claude-code-system
功能：10 个 skill、112 个命令、29 个向导，覆盖 Windows、Linux、Proxmox、Docker、Obsidian、文件管理
备注：【社区】个人开发者 r2d2helm 维护&lt;/p&gt;
&lt;p&gt;终端 + K8s 系统管理：https://github.com/chaterm/terminal-skills
功能：为 Claude 提供系统管理、DevOps、云运维等领域的专业知识和命令集合
备注：【社区】chaterm 团队维护&lt;/p&gt;
&lt;p&gt;OpenTelemetry 可观测性：https://dash0.com/guides/teach-your-ai-coding-agent-opentelemetry
功能：教 AI 编码助手使用 OpenTelemetry，包含 tracing、监控、安全评估等 skill
备注：【第三方公司】Dash0 公司（可观测性 SaaS 厂商）维护&lt;/p&gt;
&lt;p&gt;微软 Skills：https://github.com/microsoft/skills
功能：Skills + MCP Server + Custom Agents，含端到端追踪监控、OpenTelemetry GenAI traces、App Insights 集成、批量评估
备注：【官方】微软官方组织维护&lt;/p&gt;
&lt;p&gt;OpenSearch Agent Health：https://github.com/opensearch-p******/agent-health
功能：AI Agent 健康评估、监控和优化，提供实时监控和健康洞察，含自主 RCA Agent
备注：【官方】OpenSearch 项目（AWS 支持）官方维护&lt;/p&gt;
&lt;h1&gt;========================================
综合 Skills 仓库（可搜索各类 skill）&lt;/h1&gt;
&lt;p&gt;VoltAgent/awesome-agent-skills：https://github.com/VoltAgent/awesome-agent-skills
功能：1000+ Agent Skills 精选合集，兼容 Claude Code、Codex、Gemini CLI、Cursor 等，按分类浏览
备注：【社区】VoltAgent 团队维护，目前最大的 skill 聚合仓库&lt;/p&gt;
&lt;p&gt;alirezarezvani/claude-skills：https://github.com/alirezarezvani/claude-skills
功能：235+ 生产就绪的 Claude Code skills 和 agent 插件，覆盖工程、运维、产品、合规等
备注：【社区】个人开发者 alirezarezvani 维护&lt;/p&gt;
&lt;p&gt;Agent Skills Directory：https://github.com/dmgrok/agent_skills_directory
功能：Skills 搜索引擎，从 40+ 官方供应商中查找、安装、管理 skills，含智能推荐 skillsdir suggest
备注：【社区】dmgrok 团队维护，skillsdir CLI 工具&lt;/p&gt;
&lt;p&gt;高价值 Skills 合集：https://github.com/seaworld008/Commonly-used-high-value-skills
功能：覆盖开发工程、DevOps、产品设计、运营、办公自动化、金融投资、AI 平台与安全治理等高频场景
备注：【社区】个人开发者 seaworld008 整理&lt;/p&gt;
&lt;p&gt;135+ Agents 工具包：https://github.com/rohitg00/awesome-claude-code-toolkit
功能：135 个 agents、35 个 skills（+40 万 via SkillKit）、42 个命令、176+ 插件、20 个 hooks
备注：【社区】个人开发者 rohitg00 维护&lt;/p&gt;
&lt;h1&gt;========================================
安装方式&lt;/h1&gt;
&lt;p&gt;通用安装命令：
npx skills add &amp;lt;仓库地址&amp;gt;
npx skills add &amp;lt;仓库地址&amp;gt; --skill &amp;lt;skill名称&amp;gt;&lt;/p&gt;
&lt;p&gt;Claude Code 插件方式：
claude plugin marketplace add &amp;lt;组织&amp;gt;/&amp;lt;仓库&amp;gt;
claude plugin install &amp;lt;插件名&amp;gt;@&amp;lt;marketplace名&amp;gt;&lt;/p&gt;
&lt;p&gt;手动方式：
将 SKILL.md 内容复制到项目的 .claude/instructions.md 或 AGENTS.md 中&lt;/p&gt;
</content:encoded></item><item><title>ora根据连接串_创建用户</title><link>https://blog.newworld.help/posts/ora%E6%A0%B9%E6%8D%AE%E8%BF%9E%E6%8E%A5%E4%B8%B2_%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ora%E6%A0%B9%E6%8D%AE%E8%BF%9E%E6%8E%A5%E4%B8%B2_%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7/</guid><description>vi check_create_user.sh</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;vi check_create_user.sh&lt;/p&gt;
&lt;p&gt;ip.txt 存放连接串
create_btmon.sql 存放创建用户脚本&lt;/p&gt;
&lt;p&gt;报错TNS:listener 则排查数据库监听问题&lt;/p&gt;
&lt;p&gt;hang住
报错TNS:connection timed out可能是端口未开通
没反应不报错:连接的数据库存在性能问题,SELECT COUNT(*) FROM dba_users执行不出来&lt;/p&gt;
&lt;p&gt;#!/bin/bash&lt;/p&gt;
&lt;h1&gt;定义日志文件名，包含时间标识符&lt;/h1&gt;
&lt;p&gt;LOG_FILE=&quot;check_create_user_$(date +&apos;%F_%H%M%S&apos;)&quot;.log&lt;/p&gt;
&lt;h1&gt;输出操作日志&lt;/h1&gt;
&lt;p&gt;date &amp;gt;&amp;gt; ${LOG_FILE}
echo &quot;----------------------begin----------------------&quot; &amp;gt;&amp;gt; ${LOG_FILE}&lt;/p&gt;
&lt;h1&gt;读取ip.txt中的数据库连接串并分行存储到一个数组中&lt;/h1&gt;
&lt;p&gt;DB_CONNECTIONS=$(cat ip.txt)&lt;/p&gt;
&lt;h1&gt;循环处理每个数据库连接串&lt;/h1&gt;
&lt;p&gt;for DB_CONNECTION in &quot;${DB_CONNECTIONS[@]}&quot;; do
# 提取连接串地址
IP_STR=$(echo ${DB_CONNECTION} | awk -F&apos;@&apos; &apos;{print $NF}&apos;)
echo ${IP_STR} &amp;gt;&amp;gt; ${LOG_FILE}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 登录到Oracle数据库并查询btmon用户是否存在
USER_EXISTS=$(echo &quot;SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF;
                   SELECT COUNT(*) FROM dba_users WHERE username = &apos;BTMON&apos;;&quot; | sqlplus -S ${DB_CONNECTION} | awk &apos;{gsub(/[^0-9]/,&quot;&quot;,$1); print $1}&apos;)

# 执行查询结果的判断和相应的操作
if [[ ${USER_EXISTS} -eq 0 ]]; then
    # 在数据库中执行 create_btmon.sql 脚本，前提是脚本已经存在于数据库服务器上
    echo &quot;BTMON用户不存在，执行 create_btmon.sql 脚本&quot; &amp;gt;&amp;gt; ${LOG_FILE}
    echo &quot;@create_btmon.sql&quot; | sqlplus -S ${DB_CONNECTION} &amp;gt;&amp;gt; ${LOG_FILE}
else
    # 修改用户密码
    echo &quot;BTMON用户存在，执行alter user命令&quot; &amp;gt;&amp;gt; ${LOG_FILE}
    echo &quot;ALTER USER BTMON IDENTIFIED BY btmon123 ACCOUNT UNLOCK;&quot; | sqlplus -S ${DB_CONNECTION} &amp;gt;&amp;gt; ${LOG_FILE}
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;date &amp;gt;&amp;gt; ${LOG_FILE}&lt;/p&gt;
&lt;h1&gt;输出操作日志&lt;/h1&gt;
&lt;p&gt;done
date &amp;gt;&amp;gt; ${LOG_FILE}
echo &quot;----------------------end----------------------&quot; &amp;gt;&amp;gt; ${LOG_FILE}&lt;/p&gt;
&lt;p&gt;#############################################################################
AIX&lt;/p&gt;
&lt;p&gt;1.# 读取ip.txt中的数据库连接串并分行存储到一个数组中
DB_CONNECTIONS=$(cat ip.txt)
可以改成
DB_CONNECTIONS=/home/oracle/ora_sh/ip.txt&lt;/p&gt;
&lt;p&gt;2.# 循环处理每个数据库连接串
for DB_CONNECTION in &quot;${DB_CONNECTIONS[@]}&quot;; do
可以改成
for DB_CONNECTION in &lt;code&gt;cat $DB_CONNECTIONS&lt;/code&gt;
do&lt;/p&gt;
&lt;p&gt;3.需要执行的sql文件为匿名块,需要替换以下内容
echo &quot;@create_btmon.sql&quot; | sqlplus -S ${DB_CONNECTION} &amp;gt;&amp;gt; ${LOG_FILE}
替换成
sqlplus -S ${DB_CONNECTION} &amp;lt;&amp;lt; EOF &amp;gt;&amp;gt; ${LOG_FILE}
start create_btmon.sql
EOF&lt;/p&gt;
&lt;p&gt;#最后一个EOF要顶格写,后面只能是回车&lt;/p&gt;
</content:encoded></item><item><title>检查数据文件完整性及坏块</title><link>https://blog.newworld.help/posts/%E6%A3%80%E6%9F%A5%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E5%AE%8C%E6%95%B4%E6%80%A7%E5%8F%8A%E5%9D%8F%E5%9D%97/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%A3%80%E6%9F%A5%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E5%AE%8C%E6%95%B4%E6%80%A7%E5%8F%8A%E5%9D%8F%E5%9D%97/</guid><description>DBVERIFY: Release 11.2.0.4.0 - Production on Wed Jul 10 21:51:22 2024</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;######################################命令介绍######################################&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[oracle@oracle ~]$ dbv file=/u01/app/oracle/oradata/ogg/system01.dbf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DBVERIFY: Release 11.2.0.4.0 - Production on Wed Jul 10 21:51:22 2024&lt;/p&gt;
&lt;p&gt;Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.&lt;/p&gt;
&lt;p&gt;DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/ogg/system01.dbf&lt;/p&gt;
&lt;p&gt;DBVERIFY - Verification complete&lt;/p&gt;
&lt;p&gt;Total Pages Examined         : 89600
Total Pages Processed (Data) : 16037
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 4922
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 57028
Total Pages Processed (Seg)  : 1
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 11613
Total Pages Marked Corrupt   : 0
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 13380081 (0.13380081)&lt;/p&gt;
&lt;p&gt;运行时间：2024年7月10日，星期三，21:51:22
文件名：/u01/app/oracle/oradata/ogg/system01.dbf
工具版本：DBVERIFY 11.2.0.4.0
检查结果：
总页数：89600
数据页数：16037
有故障的数据页数：0
索引页数：4922
有故障的索引页数：0
其他页数：57028
段页数：1
有故障的段页数：0
空页数：11613
标记为损坏的页面数：0
涌入页数：0
加密页数：0
最高块的SCN（系统改变编号）：13380081 (0.13380081)
主要结论：
检查结果显示文件 /u01/app/oracle/oradata/ogg/system01.dbf 没有发现任何物理损坏。
数据页、索引页和段页均无故障，未标记为损坏的页面也为0。&lt;/p&gt;
&lt;p&gt;######################################坏块显示处理######################################
https://mp.weixin.qq.com/s/DM6dj2QBzcTppVwakaWsjw
1.检查坏块
dbv file=&apos;+DATAC1/DBM/DATAFILE/tbs_bffl_0566.dbf&apos;&lt;/p&gt;
&lt;p&gt;orrupt block relative dba: 0xb44d4a4c
(file 721,block 870988)&lt;/p&gt;
&lt;p&gt;orrupt block relative dba: 0xb44d4b28
(file 721,block 871208)&lt;/p&gt;
&lt;p&gt;Total Pages Marked Corrupt   : 2
这里就代表2个坏块&lt;/p&gt;
&lt;p&gt;2.检查发现存在 870988 和 871208 两个坏块，
可以通过 Rman 继续查询坏块信息：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RMAN&amp;gt;backup validate datafile 721;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3.RMAN VALIDATE 后，错误信息会记录到 v$database_block_corruption 视图中
查询 v$database_block_corruption 视图：
select * from v$database_block_corruption;&lt;/p&gt;
&lt;p&gt;SELECT * FROM dba_extents
WHERE file_id = &amp;amp;AFN
and &amp;amp;BL between block_id AND block_id + blocks - 1;&lt;/p&gt;
</content:encoded></item><item><title>GBase8a误删恢复实战记录</title><link>https://blog.newworld.help/posts/gbase8a%E8%AF%AF%E5%88%A0%E6%81%A2%E5%A4%8D%E5%AE%9E%E6%88%98%E8%AE%B0%E5%BD%95/</link><guid isPermaLink="true">https://blog.newworld.help/posts/gbase8a%E8%AF%AF%E5%88%A0%E6%81%A2%E5%A4%8D%E5%AE%9E%E6%88%98%E8%AE%B0%E5%BD%95/</guid><description>GBase 8a MPP Cluster rm -rf 误删恢复实战记录</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;GBase 8a MPP Cluster rm -rf 误删恢复实战记录
日期: 2026-04-28
环境: 单节点集群，IP 192.168.1.12
系统: CentOS/RHEL on VMWare&lt;/p&gt;
&lt;p&gt;#########################################################################
一、事故背景
#########################################################################
#误操作
cd /gbase
rm -rf 192.168.1.12&lt;/p&gt;
&lt;p&gt;#此时 GBase 所有进程仍在运行：
#PID 24343: gbased (gnode 数据节点)
#PID 24345: gcware (集群状态管理)
#PID 25383: gcware_monit
#PID 25386: gcware_mmonit
#PID 25394: gc_sync_server (数据同步)
#PID 25405: gcmonit
#PID 25407: gcmmonit
#PID 25424: gclusterd (gcluster 协调节点)
#PID 25951: gcrecover&lt;/p&gt;
&lt;p&gt;#关键前提：
#- 进程还活着，持有被删文件的文件描述符（fd）
#- 没有备份&lt;/p&gt;
&lt;p&gt;#########################################################################
二、恢复原理
#########################################################################
Linux 下 rm 删除文件只是删除了目录项（文件名），如果进程仍持有该文件的 fd，
文件的实际数据仍存在于磁盘上，可以通过 /proc/PID/fd/ 访问。&lt;/p&gt;
&lt;p&gt;恢复思路：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在另一台服务器上安装 GBase，scp 到本机作为文件骨架（二进制、配置等）&lt;/li&gt;
&lt;li&gt;暂停进程，将骨架文件拷贝到数据库目录，进程运行时会一直在原目录创建文件目录&lt;/li&gt;
&lt;li&gt;恢复进程，通过 /proc/PID/fd/ 将进程持有的最新数据文件写回原位&lt;/li&gt;
&lt;li&gt;骨架文件提供程序和配置，fd 恢复的数据文件提供最新业务数据&lt;/li&gt;
&lt;li&gt;修复权限，重启服务&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;#########################################################################
三、恢复步骤
#########################################################################&lt;/p&gt;
&lt;p&gt;=== 步骤1：确认进程还活着，千万不能 kill ===
ps -ef | grep gbase | grep -v grep&lt;/p&gt;
&lt;p&gt;#如果进程还在，说明 fd 还没释放，还有救
#绝对不能做的操作：
#- kill 进程
#- 重启服务器
#- systemctl restart gbase
#- gcware_services all stop / gcluster_services all stop（会释放 fd）&lt;/p&gt;
&lt;p&gt;#########################################################################&lt;/p&gt;
&lt;p&gt;=== 步骤2：查看所有进程持有的已删除文件 ===&lt;/p&gt;
&lt;p&gt;#查看单个进程的已删除文件
ls -la /proc/PID/fd/ | grep deleted&lt;/p&gt;
&lt;p&gt;#统计所有进程的已删除文件数量
for pid in $(ps -ef | grep gbase | grep -v grep | awk &apos;{print $2}&apos;); do
n=$(ls -la /proc/$pid/fd/ 2&amp;gt;/dev/null | grep deleted | wc -l)
echo &quot;PID $pid: $n 个已删除文件&quot;
done&lt;/p&gt;
&lt;p&gt;#多个进程可能持有同一个文件的 fd，统计数量会偏多，这是正常的&lt;/p&gt;
&lt;p&gt;#########################################################################&lt;/p&gt;
&lt;p&gt;=== 步骤3：在另一台服务器上安装 GBase，提供文件骨架 ===&lt;/p&gt;
&lt;p&gt;#fd 只能恢复进程持有的文件（数据文件、日志等），以下文件不在 fd 中：
#- 二进制程序（gbased, gclusterd, gcware 等）
#- 配置文件（.cnf, .conf 等）
#- 库文件（.so 等）
#- 初始化脚本
#这些文件需要从另一台服务器补齐&lt;/p&gt;
&lt;p&gt;#3.1 在另一台同系统机器上安装 GBase&lt;/p&gt;
&lt;h1&gt;- installPrefix = /gbase&lt;/h1&gt;
&lt;h1&gt;- 用新机器自己的 IP 正常安装，不要填原机器 IP（否则安装过程会去连原机器导致失败）&lt;/h1&gt;
&lt;h1&gt;- 不能在原机上重装，因为 stop 服务会释放 fd，数据彻底丢失&lt;/h1&gt;
&lt;h1&gt;- 安装完停掉服务&lt;/h1&gt;
&lt;p&gt;su - gbase -c &quot;gcluster_services all stop; gcware_services all stop&quot;&lt;/p&gt;
&lt;p&gt;#3.2 把新装的完整目录 scp 到原机器的临时位置&lt;/p&gt;
&lt;h1&gt;假设新机器 IP 为 10.0.0.100，安装后目录为 /gbase/10.0.0.100&lt;/h1&gt;
&lt;h1&gt;scp 过来时直接重命名&lt;/h1&gt;
&lt;p&gt;scp -r root@10.0.0.100:/gbase/10.0.0.100 /gbase/192.168.1.12_new&lt;/p&gt;
&lt;p&gt;#3.3 查看哪些文件包含新机器 IP，确认 sed 替换范围：
grep -rl &quot;10.0.0.100&quot; /gbase/192.168.1.12_new/ | grep -v -E &quot;.MYD|.MYI|.frm|.GED|.csv|.log|.sock|.pid|REDOLOG&quot;&lt;/p&gt;
&lt;p&gt;#3.4 替换配置文件中的 IP（将新机器 IP 替换为原机器 IP）&lt;/p&gt;
&lt;h1&gt;例如将 10.0.0.100 替换为 192.168.1.12&lt;/h1&gt;
&lt;h1&gt;需要替换的文件：&lt;/h1&gt;
&lt;h1&gt;gcluster/config/*.cnf     - gcluster 配置&lt;/h1&gt;
&lt;h1&gt;gnode/config/*.cnf        - gnode 配置&lt;/h1&gt;
&lt;h1&gt;gcware/config/*.conf      - gcware 配置&lt;/h1&gt;
&lt;h1&gt;gbase_profile             - 环境变量&lt;/h1&gt;
&lt;h1&gt;gcware_profile            - 环境变量&lt;/h1&gt;
&lt;h1&gt;gcware/data/gcware/SNAPSHOT.*/** - gcware 集群状态数据（不在 fd 中，不会被覆盖）&lt;/h1&gt;
&lt;h1&gt;注意：gcware/data/ 下的 REDOLOG 文件在 fd 中，fd 恢复时会覆盖，不需要改&lt;/h1&gt;
&lt;p&gt;sed -i &apos;s/10.0.0.100/192.168.1.12/g&apos; /gbase/192.168.1.12_new/gcluster/config/*
sed -i &apos;s/10.0.0.100/192.168.1.12/g&apos; /gbase/192.168.1.12_new/gnode/config/*
sed -i &apos;s/10.0.0.100/192.168.1.12/g&apos; /gbase/192.168.1.12_new/gcware/config/*
sed -i &apos;s/10.0.0.100/192.168.1.12/g&apos; /gbase/192.168.1.12_new/gbase_profile
sed -i &apos;s/10.0.0.100/192.168.1.12/g&apos; /gbase/192.168.1.12_new/gcware_profile
find /gbase/192.168.1.12_new/gcware/data/gcware/ -type f ! -name &quot;REDOLOG*&quot; &lt;br /&gt;
-exec sed -i &apos;s/10.0.0.100/192.168.1.12/g&apos; {} +&lt;/p&gt;
&lt;p&gt;#验证：替换后不应有残留的新机器 IP
grep -rl &quot;10.0.0.100&quot; /gbase/192.168.1.12_new/ | grep -v -E &quot;.MYD|.MYI|.frm|.GED|.csv|.log|.sock|.pid|REDOLOG&quot;&lt;/p&gt;
&lt;p&gt;#########################################################################&lt;/p&gt;
&lt;p&gt;=== 步骤4：暂停进程，拷贝骨架文件 ===&lt;/p&gt;
&lt;p&gt;#4.1 暂停进程（冻结，不释放 fd，数据不丢失）&lt;/p&gt;
&lt;h1&gt;用步骤1中查到的 gbase 进程 PID，手动填写&lt;/h1&gt;
&lt;p&gt;kill -STOP 24343 24345 25383 25386 25394 25405 25407 25424 25951&lt;/p&gt;
&lt;p&gt;#4.2 把新装的文件拷贝到数据库目录&lt;/p&gt;
&lt;h1&gt;注意不能用 mv 直接覆盖已存在的目录，会变成子目录&lt;/h1&gt;
&lt;h1&gt;必须用 cp -rf&lt;/h1&gt;
&lt;p&gt;cp -rf /gbase/192.168.1.12_new/* /gbase/192.168.1.12/&lt;/p&gt;
&lt;p&gt;#4.3 恢复进程
kill -CONT 24343 24345 25383 25386 25394 25405 25407 25424 25951&lt;/p&gt;
&lt;p&gt;#注意：
#- kill -STOP 只是冻结进程，不释放 fd，数据不会丢
#- 必须先暂停再操作文件，否则进程持续写入会导致文件冲突
#- 暂停后要尽快完成文件拷贝，缩短暂停时间&lt;/p&gt;
&lt;p&gt;#########################################################################&lt;/p&gt;
&lt;p&gt;=== 步骤5：通过 fd 恢复最新数据文件 ===&lt;/p&gt;
&lt;p&gt;#进程恢复运行后，fd 仍然有效
#现在把 fd 指向的最新数据文件写回原位，覆盖骨架中的旧数据&lt;/p&gt;
&lt;p&gt;for pid in 24343 24345 25383 25386 25394 25405 25407 25424 25951; do
echo &quot;=== 恢复 PID $pid ===&quot;
for fd in /proc/$pid/fd/*; do
link=$(readlink &quot;$fd&quot; 2&amp;gt;/dev/null)
if echo &quot;$link&quot; | grep -q &quot;deleted&quot;; then
real_path=$(echo &quot;$link&quot; | sed &apos;s/ (deleted)$//&apos;)
if [ -f &quot;$fd&quot; ]; then
cat &quot;$fd&quot; &amp;gt; &quot;$real_path&quot; 2&amp;gt;/dev/null
echo &quot;OK: $real_path&quot;
fi
fi
done
done&lt;/p&gt;
&lt;p&gt;#说明：
#- fd 的 link 指向如 /gbase/192.168.1.12/.../db.MYD (deleted)
#- 去掉 (deleted) 后缀就是原始路径，直接 cat 写回原位
#- 骨架文件中的系统表数据（db.MYD 等）会被 fd 中的最新数据覆盖
#- 多个进程持有同一文件的 fd 会被重复恢复，不影响结果&lt;/p&gt;
&lt;p&gt;#########################################################################&lt;/p&gt;
&lt;p&gt;=== 步骤6：修复权限 ===
chown -R gbase:gbase /gbase/192.168.1.12
chmod -R 755 /gbase/192.168.1.12&lt;/p&gt;
&lt;p&gt;#########################################################################&lt;/p&gt;
&lt;p&gt;=== 步骤7：重启服务 ===&lt;/p&gt;
&lt;p&gt;#停服（按顺序）
gcware_services all stop
gcluster_services all stop&lt;/p&gt;
&lt;p&gt;#启服（按顺序）
gcware_services all start
gcluster_services all start&lt;/p&gt;
&lt;p&gt;#检查集群状态
gcadmin&lt;/p&gt;
&lt;p&gt;#正常状态应该是：
#gcware:    OPEN
#gcluster:  OPEN
#gnode:     OPEN&lt;/p&gt;
&lt;p&gt;#########################################################################&lt;/p&gt;
&lt;p&gt;=== 步骤8：验证数据完整性 ===&lt;/p&gt;
&lt;p&gt;#查看数据库列表
gccli -uroot -p&apos;密码&apos; -h192.195.159.91 -P5258 -e &quot;SHOW DATABASES;&quot;&lt;/p&gt;
&lt;p&gt;#查看表
gccli -uroot -p&apos;密码&apos; -h192.195.159.91 -P5258 -e &quot;USE 库名; SHOW TABLES;&quot;&lt;/p&gt;
&lt;p&gt;#查数据量
gccli -uroot -p&apos;密码&apos; -h192.195.159.91 -P5258 -e &quot;SELECT COUNT(*) FROM 库名.表名;&quot;&lt;/p&gt;
&lt;p&gt;#########################################################################
四、完整流程概览
#########################################################################&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确认进程还活着（ps -ef | grep gbase）&lt;/li&gt;
&lt;li&gt;查看 fd 中有哪些已删除文件（ls -la /proc/PID/fd/ | grep deleted）&lt;/li&gt;
&lt;li&gt;另一台服务器安装 GBase，scp 到本机临时目录（IP 不要求一致）&lt;/li&gt;
&lt;li&gt;kill -STOP 暂停进程&lt;/li&gt;
&lt;li&gt;cp -rf 把骨架文件拷贝到数据库目录&lt;/li&gt;
&lt;li&gt;kill -CONT 恢复进程&lt;/li&gt;
&lt;li&gt;从 fd 恢复最新数据文件到原位&lt;/li&gt;
&lt;li&gt;修复权限（chown -R gbase:gbase）&lt;/li&gt;
&lt;li&gt;重启服务（gcware_services + gcluster_services）&lt;/li&gt;
&lt;li&gt;验证数据完整性&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;#########################################################################
五、常见问题及解决
#########################################################################&lt;/p&gt;
&lt;h2&gt;问题1：mv 目录时目标已存在，变成子目录&lt;/h2&gt;
&lt;p&gt;现象：mv 192.168.1.12.bak 192.168.1.12
结果：192.168.1.12/192.168.1.12.bak/
解决：
mv /gbase/192.168.1.12/192.168.1.12.bak/* /gbase/192.168.1.12/
rmdir /gbase/192.168.1.12/192.168.1.12.bak
或者直接用 cp -rf 替代 mv&lt;/p&gt;
&lt;h2&gt;问题2：进程还在写日志文件，删了又出来&lt;/h2&gt;
&lt;p&gt;现象：rm 删掉 gcluster/gnode 目录后又出现了新文件
原因：进程还在运行，持续写日志
解决：
kill -STOP PID   #暂停进程（冻结，不释放fd）
kill -CONT PID   #恢复进程
#注意：CONT 后如果进程状态异常，可能需要 stop/start 重启服务&lt;/p&gt;
&lt;h2&gt;问题3：恢复文件数量统计偏多&lt;/h2&gt;
&lt;p&gt;原因：多个进程持有同一个文件的 fd，统计时重复计数
解决：只要关键数据文件都在就行，数量差异不影响&lt;/p&gt;
&lt;h2&gt;问题4：socket 文件被删，gccli 连不上&lt;/h2&gt;
&lt;p&gt;现象：ERROR 2002 (HY000): Can&apos;t connect through socket &apos;...gcluster_5258.sock&apos; (2)
原因：socket 文件被 rm 删了
解决：
方式一：走 TCP 连接（推荐）
gccli -uroot -p&apos;密码&apos; -h 127.0.0.1 -P5258
方式二：重启 gclusterd 会自动重建 socket 文件&lt;/p&gt;
&lt;h2&gt;问题5：SHOW DATABASES 只有系统库，看不到业务库&lt;/h2&gt;
&lt;p&gt;现象：只显示 information_schema、performance_schema
原因：db.MYD（数据库注册表）恢复后为空或被骨架文件覆盖
解决：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确认数据目录实际存在：
ls /gbase/192.168.1.12/gnode/userdata/gbase/
ls /gbase/192.168.1.12/gcluster/userdata/gcluster/&lt;/li&gt;
&lt;li&gt;重新从 fd 恢复 db.MYD 和 db.MYI：
ls -la /proc/gclusterd的PID/fd/ | grep &quot;db.MY&quot; | grep deleted
cp /proc/PID/fd/编号 /gbase/192.168.1.12/gcluster/userdata/gcluster/gbase/db.MYI
cp /proc/PID/fd/编号 /gbase/192.168.1.12/gcluster/userdata/gcluster/gbase/db.MYD&lt;/li&gt;
&lt;li&gt;重启服务后库可能自动恢复&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;问题6：gcluster/gnode 状态为 CLOSE&lt;/h2&gt;
&lt;p&gt;现象：gcadmin 显示 gcluster=CLOSE, gnode=CLOSE
原因：进程被 kill -STOP 暂停后未恢复正常，或文件缺失导致服务异常
解决：
gcware_services all stop
gcluster_services all stop
gcware_services all start
gcluster_services all start
gcadmin  #确认全部 OPEN&lt;/p&gt;
&lt;h2&gt;问题7：CREATE DATABASE 报 &quot;All gcluster nodes is unValid&quot;&lt;/h2&gt;
&lt;p&gt;原因：gcluster 节点状态为 CLOSE，无法执行 DDL
解决：先修复集群状态（见问题6），再操作数据库&lt;/p&gt;
&lt;p&gt;#########################################################################
六、恢复后必须做的事：逻辑备份
#########################################################################
#恢复后第一时间做逻辑备份，物理文件已经出过事了&lt;/p&gt;
&lt;p&gt;#1.导出表结构
gcdump -uroot -p&apos;密码&apos; -hIP -P5258 --all-databases &amp;gt; /gbase/backup/all_schema.sql&lt;/p&gt;
&lt;p&gt;#2.导出表数据
mkdir -p /gbase/backup/data
for db in 库名1 库名2 库名3; do
gccli -uroot -p&apos;密码&apos; -hIP -P5258 -N -e &quot;SHOW TABLES FROM $db;&quot; | while read tbl; do
gccli -uroot -p&apos;密码&apos; -hIP -P5258 -N -e &quot;SELECT * INTO OUTFILE &apos;/gbase/backup/data/${db}.${tbl}.csv&apos; FIELDS TERMINATED BY &apos;|&apos; LINES TERMINATED BY &apos;\n&apos; FROM $db.$tbl;&quot;
done
done&lt;/p&gt;
&lt;p&gt;#3.SELECT INTO OUTFILE 每个表会导出为一个目录（不是文件），这是正常的&lt;/p&gt;
&lt;h1&gt;目录内包含实际数据文件&lt;/h1&gt;
&lt;p&gt;#########################################################################
七、关键经验总结
#########################################################################&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;进程还活着 = 还有救，千万不要 kill 进程或重启服务器&lt;/li&gt;
&lt;li&gt;不能在原机上 stop 服务或重装，会释放 fd，数据彻底丢失&lt;/li&gt;
&lt;li&gt;fd 恢复只能恢复进程持有的文件（数据文件），二进制和配置文件需要从另一台服务器补齐&lt;/li&gt;
&lt;li&gt;正确流程：scp 骨架文件 → kill -STOP 暂停 → cp 骨架到数据库目录 → kill -CONT 恢复 → fd 恢复数据&lt;/li&gt;
&lt;li&gt;kill -STOP 只冻结进程不释放 fd，数据不会丢&lt;/li&gt;
&lt;li&gt;必须先暂停进程再操作文件，否则进程持续写入会导致文件冲突&lt;/li&gt;
&lt;li&gt;/gbase/192.168.1.12 目录名是安装时根据节点 IP 自动生成的，不能改&lt;/li&gt;
&lt;li&gt;另一台服务器 IP 不要求一致，scp 过来后重命名为原目录名即可&lt;/li&gt;
&lt;li&gt;恢复后第一时间做逻辑备份（gcdump + SELECT INTO OUTFILE）&lt;/li&gt;
&lt;li&gt;连不上 socket 时走 TCP 连接（gccli -h 127.0.0.1 -P5258）&lt;/li&gt;
&lt;li&gt;以后每次重大操作前先做逻辑备份，不要依赖物理文件&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>其他分析工具</title><link>https://blog.newworld.help/posts/%E5%85%B6%E4%BB%96%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%85%B6%E4%BB%96%E5%88%86%E6%9E%90%E5%B7%A5%E5%85%B7/</guid><description>参考：https://blog.csdn.net/jctian000/article/details/80695747</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;参考：https://blog.csdn.net/jctian000/article/details/80695747&lt;/p&gt;
&lt;p&gt;工具名称     性能影响    主要功能                                            典型应用场景
gcore        中          为正在运行的进程生成core dump文件                   程序“卡死”但未崩溃时，保存现场用于后续分析；生产环境抓取问题瞬间状态
gdb          大          交互式调试或分析core文件                            分析程序崩溃原因（结合core文件）；单步调试逻辑bug；调试多线程程序
pstack       中          快速打印正在运行的进程所有线程的调用栈快照          快速定位进程卡死或高CPU占用原因；初步判断死锁
strace       中  ​        跟踪进程执行的系统调用（如文件、网络操作）和信号    诊断程序启动失败；分析文件、网络I/O问题；排查程序异常行为
perf         小          性能分析工具，分析CPU使用率、函数热点、调用链等     定位CPU性能热点；分析内存访问模式；生成火焰图进行可视化分析
valgrind     大          主要用于检测内存泄漏、内存越界等内存错误            检查程序的内存使用问题，如内存泄漏、非法内存访问
#################################################################################&lt;/p&gt;
&lt;p&gt;##############################################gcore##############################################
https://blog.csdn.net/qq_42382539/article/details/119139506&lt;/p&gt;
&lt;p&gt;1.查看进程id
ps -ef |grep oracle&lt;/p&gt;
&lt;p&gt;2.设置core文件大小为无限制
ulimit -c             #查看,0是关闭
ulimit -c unlimited   #启用,unlimited是启用
ulimit -c 0           #关闭&lt;/p&gt;
&lt;p&gt;3.设置生成路径
echo &quot;/cmdb/core-%e-%p-%t&quot; &amp;gt; /proc/sys/kernel/core_pattern&lt;/p&gt;
&lt;p&gt;参数	含义	                    示例
%e	    程序名（被截断到15字符）	mate-indicators
%p	    进程 PID	                3930199
%t	    Unix 时间戳（秒）	        1772078457
%u	    用户 ID（UID）	            0 (root)
%g	    组 ID（GID）	            0
%s	    导致崩溃的信号编号	        11 (SIGSEGV)
%h	    主机名	                    ocp
%c	    Core 文件大小限制	        unlimited
%d	    Dump 模式	                1
%E	    程序完整路径（/ 转为 !）	!usr!bin!ls
%I	    线程 ID (TID)	            12345
%%	    输出一个 % 字符	            %&lt;/p&gt;
&lt;p&gt;#恢复到默认值
echo &quot;core&quot; &amp;gt; /proc/sys/kernel/core_pattern&lt;/p&gt;
&lt;p&gt;#恢复到 systemd 的默认处理（如果系统使用 systemd）
echo &quot;|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h&quot; &amp;gt; /proc/sys/kernel/core_pattern&lt;/p&gt;
&lt;p&gt;4.手动生成文件
gcore -o core.2914 2914
#gcore -o 文件名 进程pid
#生成的 core 文件大小基本等于目标进程当时占用的物理内存大小&lt;/p&gt;
&lt;p&gt;5.定位可执行文件路径
ll /proc/2914/exe&lt;/p&gt;
&lt;p&gt;6.不干扰进程的情况下分析核心转储文件
gdb /proc/2914/exe core.2914&lt;/p&gt;
&lt;p&gt;##############################################gdb##############################################&lt;/p&gt;
&lt;p&gt;1.进入gdb，加载符号表
gdb -p $(pidof observer)
file /ob_soft/oceanbase/bin/observer&lt;/p&gt;
&lt;p&gt;有符号表	                    无符号表
可以用函数名打断点：b ob_start	只能用地址打断点：b *0x123456
显示变量名：print server_status	只能看到寄存器值
可读的调用栈：显示函数名和行号	调用栈只显示原始地址
查看源代码：list	            无法查看源代码&lt;/p&gt;
&lt;p&gt;2.常用命令
break xx
info breakpoints           #显示所有断点
delete breakpoints         #删除所有断点
continue                   #恢复程序运行，不被断点劫持，简写c
quit                       #退出&lt;/p&gt;
&lt;p&gt;backtrace 或 bt             #显示调用栈&lt;/p&gt;
&lt;p&gt;3.命令行执行gdb，删除所有断点
gdb -batch -p 705101 -ex &quot;delete breakpoints&quot; -ex &quot;detach&quot; -ex &quot;quit&quot; 2&amp;gt;/dev/null 命令解析
-batch                     #批处理模式，执行完命令后自动退出，不进入交互界面
-ex &quot;detach&quot;               #与目标进程分离，让进程继续执行&lt;/p&gt;
&lt;p&gt;##############################################strace##############################################&lt;/p&gt;
&lt;p&gt;#用 strace 追踪程序最后做了什么：
1.先找到进程PID（如果程序还在运行）                                                                                     ps aux | grep server-manager
ps aux | grep server-manager&lt;/p&gt;
&lt;p&gt;2.或者下次启动时用strace追踪
strace -o /tmp/strace.log -ff -T -p &amp;lt;PID&amp;gt;
#o /tmp/strace.log：输出到这个文件
#ff：每个线程一个文件（因为程序是多线程的）
#p 14842：附加到这个进程
#-T 显示每个系统调用的耗时时间&lt;/p&gt;
&lt;p&gt;#起来就挂的场景
strace -o startup_trace.log -f -tt -T sqlplus / as sysdba &amp;lt;&amp;lt;EOF
startup
exit
EOF&lt;/p&gt;
&lt;p&gt;#其他场景，快速定位卡主命令（如：硬盘命令卡主）
strace -t df -h&lt;/p&gt;
&lt;p&gt;3.找到问题日志&lt;/p&gt;
&lt;h1&gt;搜 panic&lt;/h1&gt;
&lt;p&gt;grep -r &quot;panic&quot; /tmp/strace.log.*&lt;/p&gt;
&lt;h1&gt;搜 error&lt;/h1&gt;
&lt;p&gt;grep -r &quot;error|ERROR&quot; /tmp/strace.log.*&lt;/p&gt;
&lt;h1&gt;搜所有异常退出&lt;/h1&gt;
&lt;p&gt;grep -r &quot;exited&quot; /tmp/strace.log.*&lt;/p&gt;
&lt;h1&gt;按大小排序，看前5-10个&lt;/h1&gt;
&lt;p&gt;ls -laS /tmp/strace.log.* | head -10&lt;/p&gt;
&lt;p&gt;##############################################perf##############################################
1.采集
perf record -g -p 705101 -o /tmp/perf.data --call-graph dwarf
record	            #采集性能数据
-g	                #启用调用链记录（call graph），记录函数，记录谁调用了它
-p                  #附加到 PID 为 705101 的进程（observer）
-o                  #把记录的数据保存到这个文件
--call-graph dwarf	#使用 DWARF 调试信息获取更详细的调用栈（更准确但开销稍大）&lt;/p&gt;
&lt;p&gt;2.查看
perf report -i /tmp/perf.data --stdio --no-children | head -50
-i /tmp/perf.data	#指定输入文件
--stdio	            #用文本格式输出（不是交互界面）
--no-children	    #不展开子函数的调用（只显示直接调用的函数）&lt;/p&gt;
</content:encoded></item><item><title>tpcc-tpch</title><link>https://blog.newworld.help/posts/tpcc-tpch/</link><guid isPermaLink="true">https://blog.newworld.help/posts/tpcc-tpch/</guid><description>&lt;&lt;&lt;#———————————————————————————#———————————————————————————#——————————</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;lt;&amp;lt;&amp;lt;#———————————————————————————#———————————————————————————#———————————————————————————&amp;gt;&amp;gt;&amp;gt;
一、tpcc
&amp;lt;&amp;lt;&amp;lt;#———————————————————————————#———————————————————————————#———————————————————————————&amp;gt;&amp;gt;&amp;gt;
工具:benchmarksql-5.0
/xxx/xxx/benchmarksql-5.0/run/probs.ob
建表:TPC-C脚本
参数:4.2.1TPCC-cs.md
https://www.oceanbase.com/docs/community-tutorials-cn-10000000000012261
&amp;lt;&amp;lt;&amp;lt;#———————————————————————————#———————————————————————————#&amp;gt;&amp;gt;&amp;gt;
1、准备工具
解压benchmarksql-5.0
修改probs.ob文件
warehouses=xxx									多少仓数据,1000仓=100g,但是ob有数据压缩
loadWorkers=									(案例写的20)
terminals=100									并发
runMins=60										时间
osCollectorDevices=net_xxx blk_sda				网络相关
--xxx = ip addr 当前ip的网卡名
2、造数
./runLoader.sh probs.ob
然后select count(&lt;em&gt;) 各表
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_config
select /&lt;em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_warehouse;
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_district;
select /&lt;em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_customer;
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_history;
select /&lt;em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_new_order;
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_oorder;
select /&lt;em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_order_line;
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_item;
select /*+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from bmsql_stock;&lt;/p&gt;
&lt;p&gt;3、查看到ob的大小
select svr_ip,sum(data_size)/1024/1024/1024 from  dba_ob_tablet_replicas group by svr_ip;&lt;/p&gt;
&lt;p&gt;4、执行
./runBenchmark.sh probs.ob&lt;/p&gt;
&lt;p&gt;&amp;lt;&amp;lt;&amp;lt;#———————————————————————————#———————————————————————————#———————————————————————————&amp;gt;&amp;gt;&amp;gt;
二、tpch
&amp;lt;&amp;lt;&amp;lt;#———————————————————————————#———————————————————————————#———————————————————————————&amp;gt;&amp;gt;&amp;gt;
工具:TPC-H_Tools_v3.0.0
/xxx/TPC-H_Tools_v3.0.0/dbgen
建表:TPC-H脚本
参数:README
:4.2.1TPCC-cs.md
--这俩都参考一下吧
sql:D:\zcj\自我笔记\ob\qt\任务\TPCC+H\tpch\sql&lt;br /&gt;
https://www.oceanbase.com/docs/community-tutorials-cn-10000000000012262
&amp;lt;&amp;lt;&amp;lt;#———————————————————————————#———————————————————————————#&amp;gt;&amp;gt;&amp;gt;
1、准备工具
cd /xxx/TPC-H_Tools_v3.0.0/dbgen
cp makefile.suite makefile
vi makefile
CC=gcc
DATABASE=ORACLE
MARCHINE=LINUX
WORKLOAD=TPCH
make -f makefile
2、
(选做,如果你是mysql,你需要在这里面加新的一条)
/xxx/TPC-H_Tools_v3.0.0/dbgen/tpcd.h
#ifdef MYSQL
#define GEN_QUERY_PLAN &quot;&quot;
#define START_TRAN &quot;START TRANSACTION&quot;
#define END_TRAN &quot;COMMIT&quot;
#define SET_OUTPUT &quot;&quot;
#define SET_ROWCOUNT &quot;limit %d;\n&quot;
#define SET_DBASE &quot;use %s;\n&quot;
#endif&lt;/p&gt;
&lt;p&gt;3、准备数据
mkdir /obbackup/db1
cp dists.dss /obbackup/db1
cp dbgen /obbackup/db1&lt;/p&gt;
&lt;p&gt;./dbgen -s 100 -f
-s 100代表100g -f代表覆盖&lt;/p&gt;
&lt;p&gt;--选做(如果你想3个节点一起跑,这样造数快,需要后续脚本配置)
3、①
mkdir /obbackup/db2
cp dists.dss /obbackup/db2
cp dbgen /obbackup/db2&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir /obbackup/db3
cp dists.dss /obbackup/db3
cp dbgen /obbackup/db3

3、②vi gen_data.sh
	--也是三份
split=1
END_SPLIT=100
while [ $split -le $END_SPLIT]
do
 ./dbgen -f -s xxxx -C300 -S $split 2&amp;gt;&amp;amp;1 &amp;amp;
 split =$[ split + 1]
done

split=101
END_SPLIT=200
while [ $split -le $END_SPLIT]
do
 ./dbgen -f -s xxxx -C300 -S $split 2&amp;gt;&amp;amp;1 &amp;amp;
 split =$[ split + 1]
done

split=201
END_SPLIT=300
while [ $split -le $END_SPLIT]
do
 ./dbgen -f -s xxxx -C300 -S $split 2&amp;gt;&amp;amp;1 &amp;amp;
 split =$[ split + 1]
done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4、准备库:
create user tpch identified by aaAA11__;
grant dba to tpch;&lt;/p&gt;
&lt;p&gt;执行TPC-H脚本的内容,
(选做:清理↓)
alter table lineitem  set tablegroup &apos;&apos;;
alter table orders    set tablegroup &apos;&apos;;
alter table partsupp  set tablegroup &apos;&apos;;
alter table part      set tablegroup &apos;&apos;;
alter table customer  set tablegroup &apos;&apos;;
alter table supplier  set tablegroup &apos;&apos;;
alter table nation    set tablegroup &apos;&apos;;
alter table region    set tablegroup &apos;&apos;;&lt;/p&gt;
&lt;p&gt;drop table group tpch_tg_1000g_lineitem_order_group;
drop table group tpch_tg_1000g_partsupp_part;&lt;/p&gt;
&lt;p&gt;5、配置路径权限:
obclient -S /home/admin/oceanbase/run/sql.sock -utpch@ -p&apos;aaAA11__&apos;
select * from sys.tenant_virtual_global_variable where variable_name like &apos;%secure%&apos;;
set global secure_file_priv=&apos;/obbackup/db1/&apos;&lt;/p&gt;
&lt;p&gt;6、加载数据
set @@session.ob_query_timeout = 7200 000000;&lt;/p&gt;
&lt;p&gt;load data /&lt;em&gt;+ load_batch_size(1000) parallel(64)&lt;/em&gt;/ infile &apos;/obbackup/db1/customer.tbl&apos; into table customer fields terminated by &apos;|&apos;;
load data /&lt;em&gt;+ load_batch_size(1000) parallel(64)&lt;/em&gt;/ infile &apos;/obbackup/db1/lineitem.tbl&apos; into table lineitem fields terminated by &apos;|&apos;;
load data /&lt;em&gt;+ load_batch_size(1000) parallel(64)&lt;/em&gt;/ infile &apos;/obbackup/db1/nation.tbl&apos;   into table nation fields terminated by &apos;|&apos;;
load data /&lt;em&gt;+ load_batch_size(1000) parallel(64)&lt;/em&gt;/ infile &apos;/obbackup/db1/orders.tbl&apos;   into table orders fields terminated by &apos;|&apos;;
load data /&lt;em&gt;+ load_batch_size(1000) parallel(64)&lt;/em&gt;/ infile &apos;/obbackup/db1/partsupp.tbl&apos; into table partsupp fields terminated by &apos;|&apos;;
load data /&lt;em&gt;+ load_batch_size(1000) parallel(64)&lt;/em&gt;/ infile &apos;/obbackup/db1/part.tbl&apos;     into table part fields terminated by &apos;|&apos;;
load data /&lt;em&gt;+ load_batch_size(1000) parallel(64)&lt;/em&gt;/ infile &apos;/obbackup/db1/region.tbl&apos;   into table region fields terminated by &apos;|&apos;;
load data /&lt;em&gt;+ load_batch_size(1000) parallel(64)&lt;/em&gt;/ infile &apos;/obbackup/db1/supplier.tbl&apos; into table supplier fields terminated by &apos;|&apos;;&lt;/p&gt;
&lt;p&gt;select /&lt;em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from lineitem  ;
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from orders    ;
select /&lt;em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from partsupp  ;
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from part      ;
select /&lt;em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from customer  ;
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from supplier  ;
select /&lt;em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from nation    ;
select /&lt;/em&gt;+ parallel(32) &lt;em&gt;/ count(&lt;/em&gt;) from region    ;&lt;/p&gt;
&lt;p&gt;6、执行22个sql并记录
D:\zcj\自我笔记\ob\qt\任务\TPCC+H\tpch\sql\&lt;/p&gt;
</content:encoded></item><item><title>MySQL配置文件参考</title><link>https://blog.newworld.help/posts/mysql%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%8F%82%E8%80%83/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mysql%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%8F%82%E8%80%83/</guid><description>datadir=C:/ProgramData/MySQL/MySQL Server 8.0Data</description><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Other default tuning values&lt;/h1&gt;
&lt;h1&gt;MySQL Server Instance Configuration File&lt;/h1&gt;
&lt;h1&gt;----------------------------------------------------------------------&lt;/h1&gt;
&lt;h1&gt;Generated by the MySQL Server Instance Configuration Wizard&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;Installation Instructions&lt;/h1&gt;
&lt;h1&gt;----------------------------------------------------------------------&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;On Linux you can copy this file to /etc/my.cnf to set global options,&lt;/h1&gt;
&lt;h1&gt;mysql-data-dir/my.cnf to set server-specific options&lt;/h1&gt;
&lt;h1&gt;(@localstatedir@ for this installation) or to&lt;/h1&gt;
&lt;h1&gt;~/.my.cnf to set user-specific options.&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;On Windows you should keep this file in the installation directory&lt;/h1&gt;
&lt;h1&gt;of your server (e.g. C:\Program Files\MySQL\MySQL Server X.Y). To&lt;/h1&gt;
&lt;h1&gt;make sure the server reads the config file use the startup option&lt;/h1&gt;
&lt;h1&gt;&quot;--defaults-file&quot;.&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;To run the server from the command line, execute this in a&lt;/h1&gt;
&lt;h1&gt;command line shell, e.g.&lt;/h1&gt;
&lt;h1&gt;mysqld --defaults-file=&quot;C:\Program Files\MySQL\MySQL Server X.Y\my.ini&quot;&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;To install the server as a Windows service manually, execute this in a&lt;/h1&gt;
&lt;h1&gt;command line shell, e.g.&lt;/h1&gt;
&lt;h1&gt;mysqld --install MySQLXY --defaults-file=&quot;C:\Program Files\MySQL\MySQL Server X.Y\my.ini&quot;&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;And then execute this in a command line shell to start the server, e.g.&lt;/h1&gt;
&lt;h1&gt;net start MySQLXY&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;Guidelines for editing this file&lt;/h1&gt;
&lt;h1&gt;----------------------------------------------------------------------&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;In this file, you can use all long options that the program supports.&lt;/h1&gt;
&lt;h1&gt;If you want to know the options a program supports, start the program&lt;/h1&gt;
&lt;h1&gt;with the &quot;--help&quot; option.&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;More detailed information about the individual options can also be&lt;/h1&gt;
&lt;h1&gt;found in the manual.&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;For advice on how to change settings please see&lt;/h1&gt;
&lt;h1&gt;https://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;CLIENT SECTION&lt;/h1&gt;
&lt;h1&gt;----------------------------------------------------------------------&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;The following options will be read by MySQL client applications.&lt;/h1&gt;
&lt;h1&gt;Note that only client applications shipped by MySQL are guaranteed&lt;/h1&gt;
&lt;h1&gt;to read this section. If you want your own MySQL client program to&lt;/h1&gt;
&lt;h1&gt;honor these values, you need to specify it as an option during the&lt;/h1&gt;
&lt;h1&gt;MySQL client library initialization.&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;p&gt;[client]&lt;/p&gt;
&lt;h1&gt;pipe=&lt;/h1&gt;
&lt;h1&gt;socket=MYSQL&lt;/h1&gt;
&lt;p&gt;port=3306&lt;/p&gt;
&lt;p&gt;[mysql]
no-beep&lt;/p&gt;
&lt;h1&gt;default-character-set=&lt;/h1&gt;
&lt;h1&gt;SERVER SECTION&lt;/h1&gt;
&lt;h1&gt;----------------------------------------------------------------------&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;The following options will be read by the MySQL Server. Make sure that&lt;/h1&gt;
&lt;h1&gt;you have installed the server correctly (see above) so it reads this&lt;/h1&gt;
&lt;h1&gt;file.&lt;/h1&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;h1&gt;server_type=3&lt;/h1&gt;
&lt;p&gt;[mysqld]&lt;/p&gt;
&lt;h1&gt;The next three options are mutually exclusive to SERVER_PORT below.&lt;/h1&gt;
&lt;h1&gt;skip-networking&lt;/h1&gt;
&lt;h1&gt;enable-named-pipe&lt;/h1&gt;
&lt;h1&gt;shared-memory&lt;/h1&gt;
&lt;h1&gt;shared-memory-base-name=MYSQL&lt;/h1&gt;
&lt;h1&gt;The Pipe the MySQL Server will use&lt;/h1&gt;
&lt;h1&gt;socket=MYSQL&lt;/h1&gt;
&lt;h1&gt;The TCP/IP Port the MySQL Server will listen on&lt;/h1&gt;
&lt;p&gt;port=3306&lt;/p&gt;
&lt;h1&gt;Path to installation directory. All paths are usually resolved relative to this.&lt;/h1&gt;
&lt;h1&gt;basedir=&quot;C:/Program Files/MySQL/MySQL Server 8.0/&quot;&lt;/h1&gt;
&lt;h1&gt;Path to the database root&lt;/h1&gt;
&lt;p&gt;datadir=C:/ProgramData/MySQL/MySQL Server 8.0\Data&lt;/p&gt;
&lt;h1&gt;The default character set that will be used when a new schema or table is&lt;/h1&gt;
&lt;h1&gt;created and no character set is defined&lt;/h1&gt;
&lt;h1&gt;character-set-server=&lt;/h1&gt;
&lt;h1&gt;The default authentication plugin to be used when connecting to the server&lt;/h1&gt;
&lt;h1&gt;The default storage engine that will be used when create new tables when&lt;/h1&gt;
&lt;p&gt;default-storage-engine=INNODB&lt;/p&gt;
&lt;h1&gt;Set the SQL mode to strict&lt;/h1&gt;
&lt;p&gt;sql-mode=&quot;STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION&quot;&lt;/p&gt;
&lt;h1&gt;General and Slow logging.&lt;/h1&gt;
&lt;p&gt;log-output=FILE&lt;/p&gt;
&lt;p&gt;general-log=0&lt;/p&gt;
&lt;p&gt;general_log_file=&quot;LAPTOP-LRAT6QCM.log&quot;&lt;/p&gt;
&lt;p&gt;slow-query-log=1&lt;/p&gt;
&lt;p&gt;slow_query_log_file=&quot;LAPTOP-LRAT6QCM-slow.log&quot;&lt;/p&gt;
&lt;p&gt;long_query_time=10&lt;/p&gt;
&lt;h1&gt;Error Logging.&lt;/h1&gt;
&lt;p&gt;log-error=&quot;LAPTOP-LRAT6QCM.err&quot;&lt;/p&gt;
&lt;h1&gt;***** Group Replication Related *****&lt;/h1&gt;
&lt;h1&gt;Specifies the base name to use for binary log files. With binary logging&lt;/h1&gt;
&lt;h1&gt;enabled, the server logs all statements that change data to the binary&lt;/h1&gt;
&lt;h1&gt;log, which is used for backup and replication.&lt;/h1&gt;
&lt;p&gt;log-bin=&quot;LAPTOP-LRAT6QCM-bin&quot;&lt;/p&gt;
&lt;h1&gt;***** Group Replication Related *****&lt;/h1&gt;
&lt;h1&gt;Specifies the server ID. For servers that are used in a replication topology,&lt;/h1&gt;
&lt;h1&gt;you must specify a unique server ID for each replication server, in the&lt;/h1&gt;
&lt;h1&gt;range from 1 to 2^32 − 1. “Unique” means that each ID must be different&lt;/h1&gt;
&lt;h1&gt;from every other ID in use by any other source or replica.&lt;/h1&gt;
&lt;p&gt;server-id=1&lt;/p&gt;
&lt;h1&gt;NOTE: Modify this value after Server initialization won&apos;t take effect.&lt;/h1&gt;
&lt;p&gt;lower_case_table_names=1&lt;/p&gt;
&lt;h1&gt;Secure File Priv.&lt;/h1&gt;
&lt;p&gt;secure-file-priv=&quot;&quot;
#&quot;C:/ProgramData/MySQL/MySQL Server 8.0/Uploads&quot;&lt;/p&gt;
&lt;h1&gt;The maximum amount of concurrent sessions the MySQL server will&lt;/h1&gt;
&lt;h1&gt;allow. One of these connections will be reserved for a user with&lt;/h1&gt;
&lt;h1&gt;SUPER privileges to allow the administrator to login even if the&lt;/h1&gt;
&lt;h1&gt;connection limit has been reached.&lt;/h1&gt;
&lt;p&gt;max_connections=151&lt;/p&gt;
&lt;h1&gt;The number of open tables for all threads. Increasing this value&lt;/h1&gt;
&lt;h1&gt;increases the number of file descriptors that mysqld requires.&lt;/h1&gt;
&lt;h1&gt;Therefore you have to make sure to set the amount of open files&lt;/h1&gt;
&lt;h1&gt;allowed to at least 4096 in the variable &quot;open-files-limit&quot; in&lt;/h1&gt;
&lt;h1&gt;section [mysqld_safe]&lt;/h1&gt;
&lt;p&gt;table_open_cache=2000&lt;/p&gt;
&lt;h1&gt;Maximum size for internal (in-memory) temporary tables. If a table&lt;/h1&gt;
&lt;h1&gt;grows larger than this value, it is automatically converted to disk&lt;/h1&gt;
&lt;h1&gt;based table This limitation is for a single table. There can be many&lt;/h1&gt;
&lt;h1&gt;of them.&lt;/h1&gt;
&lt;p&gt;tmp_table_size=14M&lt;/p&gt;
&lt;h1&gt;How many threads we should keep in a cache for reuse. When a client&lt;/h1&gt;
&lt;h1&gt;disconnects, the client&apos;s threads are put in the cache if there aren&apos;t&lt;/h1&gt;
&lt;h1&gt;more than thread_cache_size threads from before.  This greatly reduces&lt;/h1&gt;
&lt;h1&gt;the amount of thread creations needed if you have a lot of new&lt;/h1&gt;
&lt;h1&gt;connections. (Normally this doesn&apos;t give a notable performance&lt;/h1&gt;
&lt;h1&gt;improvement if you have a good thread implementation.)&lt;/h1&gt;
&lt;p&gt;thread_cache_size=10&lt;/p&gt;
&lt;p&gt;#*** MyISAM Specific options&lt;/p&gt;
&lt;h1&gt;The maximum size of the temporary file MySQL is allowed to use while&lt;/h1&gt;
&lt;h1&gt;recreating the index (during REPAIR, ALTER TABLE or LOAD DATA INFILE.&lt;/h1&gt;
&lt;h1&gt;If the file-size would be bigger than this, the index will be created&lt;/h1&gt;
&lt;h1&gt;through the key cache (which is slower).&lt;/h1&gt;
&lt;p&gt;myisam_max_sort_file_size=100G&lt;/p&gt;
&lt;h1&gt;The size of the buffer that is allocated when sorting MyISAM indexes&lt;/h1&gt;
&lt;h1&gt;during a REPAIR TABLE or when creating indexes with CREATE INDEX&lt;/h1&gt;
&lt;h1&gt;or ALTER TABLE.&lt;/h1&gt;
&lt;p&gt;myisam_sort_buffer_size=19M&lt;/p&gt;
&lt;h1&gt;Size of the Key Buffer, used to cache index blocks for MyISAM tables.&lt;/h1&gt;
&lt;h1&gt;Do not set it larger than 30% of your available memory, as some memory&lt;/h1&gt;
&lt;h1&gt;is also required by the OS to cache rows. Even if you&apos;re not using&lt;/h1&gt;
&lt;h1&gt;MyISAM tables, you should still set it to 8-64M as it will also be&lt;/h1&gt;
&lt;h1&gt;used for internal temporary disk tables.&lt;/h1&gt;
&lt;p&gt;key_buffer_size=8M&lt;/p&gt;
&lt;h1&gt;Size of the buffer used for doing full table scans of MyISAM tables.&lt;/h1&gt;
&lt;h1&gt;Allocated per thread, if a full scan is needed.&lt;/h1&gt;
&lt;p&gt;read_buffer_size=37K&lt;/p&gt;
&lt;p&gt;read_rnd_buffer_size=256K&lt;/p&gt;
&lt;p&gt;#*** INNODB Specific options ***&lt;/p&gt;
&lt;h1&gt;innodb_data_home_dir=&lt;/h1&gt;
&lt;h1&gt;Use this option if you have a MySQL server with InnoDB support enabled&lt;/h1&gt;
&lt;h1&gt;but you do not plan to use it. This will save memory and disk space&lt;/h1&gt;
&lt;h1&gt;and speed up some things.&lt;/h1&gt;
&lt;h1&gt;skip-innodb&lt;/h1&gt;
&lt;h1&gt;If set to 1, InnoDB will flush (fsync) the transaction logs to the&lt;/h1&gt;
&lt;h1&gt;disk at each commit, which offers full ACID behavior. If you are&lt;/h1&gt;
&lt;h1&gt;willing to compromise this safety, and you are running small&lt;/h1&gt;
&lt;h1&gt;transactions, you may set this to 0 or 2 to reduce disk I/O to the&lt;/h1&gt;
&lt;h1&gt;logs. Value 0 means that the log is only written to the log file and&lt;/h1&gt;
&lt;h1&gt;the log file flushed to disk approximately once per second. Value 2&lt;/h1&gt;
&lt;h1&gt;means the log is written to the log file at each commit, but the log&lt;/h1&gt;
&lt;h1&gt;file is only flushed to disk approximately once per second.&lt;/h1&gt;
&lt;p&gt;innodb_flush_log_at_trx_commit=1&lt;/p&gt;
&lt;h1&gt;The size of the buffer InnoDB uses for buffering log data. As soon as&lt;/h1&gt;
&lt;h1&gt;it is full, InnoDB will have to flush it to disk. As it is flushed&lt;/h1&gt;
&lt;h1&gt;once per second anyway, it does not make sense to have it very large&lt;/h1&gt;
&lt;h1&gt;(even with long transactions).&lt;/h1&gt;
&lt;p&gt;innodb_log_buffer_size=1M&lt;/p&gt;
&lt;h1&gt;InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and&lt;/h1&gt;
&lt;h1&gt;row data. The bigger you set this the less disk I/O is needed to&lt;/h1&gt;
&lt;h1&gt;access data in tables. On a dedicated database server you may set this&lt;/h1&gt;
&lt;h1&gt;parameter up to 80% of the machine physical memory size. Do not set it&lt;/h1&gt;
&lt;h1&gt;too large, though, because competition of the physical memory may&lt;/h1&gt;
&lt;h1&gt;cause paging in the operating system.  Note that on 32bit systems you&lt;/h1&gt;
&lt;h1&gt;might be limited to 2-3.5G of user level memory per process, so do not&lt;/h1&gt;
&lt;h1&gt;set it too high.&lt;/h1&gt;
&lt;p&gt;innodb_buffer_pool_size=8M&lt;/p&gt;
&lt;h1&gt;Size of each log file in a log group. You should set the combined size&lt;/h1&gt;
&lt;h1&gt;of log files to about 25%-100% of your buffer pool size to avoid&lt;/h1&gt;
&lt;h1&gt;unneeded buffer pool flush activity on log file overwrite. However,&lt;/h1&gt;
&lt;h1&gt;note that a larger logfile size will increase the time needed for the&lt;/h1&gt;
&lt;h1&gt;recovery process.&lt;/h1&gt;
&lt;p&gt;innodb_log_file_size=48M&lt;/p&gt;
&lt;h1&gt;Number of threads allowed inside the InnoDB kernel. The optimal value&lt;/h1&gt;
&lt;h1&gt;depends highly on the application, hardware as well as the OS&lt;/h1&gt;
&lt;h1&gt;scheduler properties. A too high value may lead to thread thrashing.&lt;/h1&gt;
&lt;p&gt;innodb_thread_concurrency=17&lt;/p&gt;
&lt;h1&gt;The increment size (in MB) for extending the size of an auto-extend InnoDB system tablespace file when it becomes full.&lt;/h1&gt;
&lt;p&gt;innodb_autoextend_increment=64&lt;/p&gt;
&lt;h1&gt;The number of regions that the InnoDB buffer pool is divided into.&lt;/h1&gt;
&lt;h1&gt;For systems with buffer pools in the multi-gigabyte range, dividing the buffer pool into separate instances can improve concurrency,&lt;/h1&gt;
&lt;h1&gt;by reducing contention as different threads read and write to cached pages.&lt;/h1&gt;
&lt;p&gt;innodb_buffer_pool_instances=8&lt;/p&gt;
&lt;h1&gt;Determines the number of threads that can enter InnoDB concurrently.&lt;/h1&gt;
&lt;p&gt;innodb_concurrency_tickets=5000&lt;/p&gt;
&lt;h1&gt;Specifies how long in milliseconds (ms) a block inserted into the old sublist must stay there after its first access before&lt;/h1&gt;
&lt;h1&gt;it can be moved to the new sublist.&lt;/h1&gt;
&lt;p&gt;innodb_old_blocks_time=1000&lt;/p&gt;
&lt;h1&gt;When this variable is enabled, InnoDB updates statistics during metadata statements.&lt;/h1&gt;
&lt;p&gt;innodb_stats_on_metadata=0&lt;/p&gt;
&lt;h1&gt;When innodb_file_per_table is enabled (the default in 5.6.6 and higher), InnoDB stores the data and indexes for each newly created table&lt;/h1&gt;
&lt;h1&gt;in a separate .ibd file, rather than in the system tablespace.&lt;/h1&gt;
&lt;p&gt;innodb_file_per_table=1&lt;/p&gt;
&lt;h1&gt;Use the following list of values: 0 for crc32, 1 for strict_crc32, 2 for innodb, 3 for strict_innodb, 4 for none, 5 for strict_none.&lt;/h1&gt;
&lt;p&gt;innodb_checksum_algorithm=0&lt;/p&gt;
&lt;h1&gt;The number of outstanding connection requests MySQL can have.&lt;/h1&gt;
&lt;h1&gt;This option is useful when the main MySQL thread gets many connection requests in a very short time.&lt;/h1&gt;
&lt;h1&gt;It then takes some time (although very little) for the main thread to check the connection and start a new thread.&lt;/h1&gt;
&lt;h1&gt;The back_log value indicates how many requests can be stacked during this short time before MySQL momentarily&lt;/h1&gt;
&lt;h1&gt;stops answering new requests.&lt;/h1&gt;
&lt;h1&gt;You need to increase this only if you expect a large number of connections in a short period of time.&lt;/h1&gt;
&lt;p&gt;back_log=80&lt;/p&gt;
&lt;h1&gt;If this is set to a nonzero value, all tables are closed every flush_time seconds to free up resources and&lt;/h1&gt;
&lt;h1&gt;synchronize unflushed data to disk.&lt;/h1&gt;
&lt;h1&gt;This option is best used only on systems with minimal resources.&lt;/h1&gt;
&lt;p&gt;flush_time=0&lt;/p&gt;
&lt;h1&gt;The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use&lt;/h1&gt;
&lt;h1&gt;indexes and thus perform full table scans.&lt;/h1&gt;
&lt;p&gt;join_buffer_size=256K&lt;/p&gt;
&lt;h1&gt;The maximum size of one packet or any generated or intermediate string, or any parameter sent by the&lt;/h1&gt;
&lt;h1&gt;mysql_stmt_send_long_data() C API function.&lt;/h1&gt;
&lt;p&gt;max_allowed_packet=4M&lt;/p&gt;
&lt;h1&gt;If more than this many successive connection requests from a host are interrupted without a successful connection,&lt;/h1&gt;
&lt;h1&gt;the server blocks that host from performing further connections.&lt;/h1&gt;
&lt;p&gt;max_connect_errors=100&lt;/p&gt;
&lt;h1&gt;Changes the number of file descriptors available to mysqld.&lt;/h1&gt;
&lt;h1&gt;You should try increasing the value of this option if mysqld gives you the error &quot;Too many open files&quot;.&lt;/h1&gt;
&lt;p&gt;open_files_limit=4161&lt;/p&gt;
&lt;h1&gt;If you see many sort_merge_passes per second in SHOW GLOBAL STATUS output, you can consider increasing the&lt;/h1&gt;
&lt;h1&gt;sort_buffer_size value to speed up ORDER BY or GROUP BY operations that cannot be improved with query optimization&lt;/h1&gt;
&lt;h1&gt;or improved indexing.&lt;/h1&gt;
&lt;p&gt;sort_buffer_size=256K&lt;/p&gt;
&lt;h1&gt;The number of table definitions (from .frm files) that can be stored in the definition cache.&lt;/h1&gt;
&lt;h1&gt;If you use a large number of tables, you can create a large table definition cache to speed up opening of tables.&lt;/h1&gt;
&lt;h1&gt;The table definition cache takes less space and does not use file descriptors, unlike the normal table cache.&lt;/h1&gt;
&lt;h1&gt;The minimum and default values are both 400.&lt;/h1&gt;
&lt;p&gt;table_definition_cache=1400&lt;/p&gt;
&lt;h1&gt;Specify the maximum size of a row-based binary log event, in bytes.&lt;/h1&gt;
&lt;h1&gt;Rows are grouped into events smaller than this size if possible. The value should be a multiple of 256.&lt;/h1&gt;
&lt;p&gt;binlog_row_event_max_size=8K&lt;/p&gt;
&lt;h1&gt;If the value of this variable is greater than 0, a replica synchronizes its master.info file to disk.&lt;/h1&gt;
&lt;h1&gt;If the value of this variable is greater than 0, the MySQL server synchronizes its relay log to disk.&lt;/h1&gt;
&lt;h1&gt;(using fdatasync()) after every sync_relay_log writes to the relay log.&lt;/h1&gt;
&lt;p&gt;sync_relay_log=10000&lt;/p&gt;
&lt;h1&gt;If the value of this variable is greater than 0, a replica synchronizes its relay-log.info file to disk.&lt;/h1&gt;
&lt;h1&gt;(using fdatasync()) after every sync_relay_log_info transactions.&lt;/h1&gt;
&lt;p&gt;sync_relay_log_info=10000&lt;/p&gt;
&lt;h1&gt;Load mysql plugins at start.&quot;plugin_x ; plugin_y&quot;.&lt;/h1&gt;
&lt;h1&gt;plugin_load&lt;/h1&gt;
&lt;h1&gt;The TCP/IP Port the MySQL Server X Protocol will listen on.&lt;/h1&gt;
&lt;p&gt;loose_mysqlx_port=33060&lt;/p&gt;
</content:encoded></item><item><title>效率测试</title><link>https://blog.newworld.help/posts/%E6%95%88%E7%8E%87%E6%B5%8B%E8%AF%95/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%95%88%E7%8E%87%E6%B5%8B%E8%AF%95/</guid><description>create table EMPLOYEES2 as select * from hr.EMPLOYEES</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.新建EMPLOYEES表
create table EMPLOYEES2 as select * from hr.EMPLOYEES&lt;/p&gt;
&lt;p&gt;2.查看数据大小
SELECT segment_name,segment_type,SUM(bytes)--65536字节
FROM  user_segments
where segment_name=&apos;EMPLOYEES2&apos;
GROUP BY segment_name,segment_type&lt;/p&gt;
&lt;p&gt;3.将数据量插入到10g，记录插入次数，数据行数
declare
v_1 number:=0;
v_2 number:=0;
v_3 timestamp:=sysdate;
v_4 timestamp:=sysdate;
begin&lt;/p&gt;
&lt;p&gt;for i in 1 .. v_1 loop
SELECT 10/SUM(bytes/1024/1024/1024) into v_1
FROM  user_segments
where segment_name=&apos;EMPLOYEES2&apos;
GROUP BY segment_name,segment_type;&lt;/p&gt;
&lt;p&gt;dbms_output.put_line(&apos;执行次数：&apos;||v_2||&apos;     当前时间：&apos;||to_char(sysdate,&apos;yyyy-mm-dd hh24:mi:ss&apos;)||&apos;     上次执行sql用时：&apos;||to_char(v_4-v_3,&apos;yyyy-mm-dd hh24:mi:ss&apos;));
v_3:=sysdate;
INSERT INTO EMPLOYEES2  select * from hr.EMPLOYEES;
commit;
dbms_lock.sleep(1);
v_4:=sysdate;
v_2:=v_2+1;
end loop;
end;&lt;/p&gt;
&lt;p&gt;4.更新数据表，记录更新行数，更新时间
declare&lt;/p&gt;
&lt;p&gt;cursor cur_t1 is
select SALARY,
rowid row_id
from EMPLOYEES2 t1 ;&lt;/p&gt;
&lt;p&gt;v_2 number:=0;
v_3 timestamp:=system;
v_4 timestamp:=system;
begin
select
for i in cur_t1 loop&lt;/p&gt;
&lt;p&gt;dbms_output.put_line(&apos;执行次数：&apos;||v_2||&apos;     当前时间：&apos;||system||&apos;     上次执行sql用时：&apos;||v_4-v_3);
v_3:=system;
update EMPLOYEES2 set  SALARY =SALARY+500 where t1.rowid=i.row_id
commit;
dbms_lock.sleep(1);
v_4:=system;
v_2:=v_2+1;
end loop;
end;&lt;/p&gt;
&lt;p&gt;5.删除数据表，记录更新行数，更新时间
declare&lt;/p&gt;
&lt;p&gt;cursor cur_t1 is
select SALARY,
rowid row_id
from EMPLOYEES2 t1 ;&lt;/p&gt;
&lt;p&gt;v_2 number:=0;
v_3 timestamp:=system;
v_4 timestamp:=system;
begin
select
for i in cur_t1 loop&lt;/p&gt;
&lt;p&gt;dbms_output.put_line(&apos;执行次数：&apos;||v_2||&apos;     当前时间：&apos;||system||&apos;     上次执行sql用时：&apos;||v_4-v_3);
v_3:=system;
delete from EMPLOYEES2 where t1.rowid=i.row_id
commit;
dbms_lock.sleep(1);
v_4:=system;
v_2:=v_2+1;
end loop;
end;&lt;/p&gt;
</content:encoded></item><item><title>抓包cap</title><link>https://blog.newworld.help/posts/%E6%8A%93%E5%8C%85cap/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%8A%93%E5%8C%85cap/</guid><description>14:08:41.541888 IP (tos 0x0, ttl 64, id 49072, offset 0, flags [DF], p</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;14:08:41.541888 IP (tos 0x0, ttl 64, id 49072, offset 0, flags [DF], proto TCP (6), length 362) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6429 (incorrect (-&amp;gt; 0xa51d), 426050:426360(310) ack 73464 win 331 &amp;lt;nop,nop,timestamp 62216905 214418033&amp;gt;
14:08:41.542038 IP (tos 0x0, ttl 59, id 23583, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x1d66 (correct), 73464:73481(17) ack 426360 win 331 &amp;lt;nop,nop,timestamp 214418033 62216905&amp;gt;
14:08:41.542165 IP (tos 0x0, ttl 64, id 49073, offset 0, flags [DF], proto TCP (6), length 132) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6343 (incorrect (-&amp;gt; 0x57ee), 426360:426440(80) ack 73481 win 331 &amp;lt;nop,nop,timestamp 62216905 214418033&amp;gt;
14:08:41.542335 IP (tos 0x0, ttl 59, id 23584, offset 0, flags [DF], proto TCP (6), length 198) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x7292 (correct), 73481:73627(146) ack 426440 win 331 &amp;lt;nop,nop,timestamp 214418033 62216905&amp;gt;
14:08:41.542521 IP (tos 0x0, ttl 64, id 49074, offset 0, flags [DF], proto TCP (6), length 265) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63c8 (incorrect (-&amp;gt; 0x66db), 426440:426653(213) ack 73627 win 331 &amp;lt;nop,nop,timestamp 62216905 214418033&amp;gt;
14:08:41.542689 IP (tos 0x0, ttl 59, id 23585, offset 0, flags [DF], proto TCP (6), length 202) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xae20 (correct), 73627:73777(150) ack 426653 win 331 &amp;lt;nop,nop,timestamp 214418033 62216905&amp;gt;
14:08:41.542895 IP (tos 0x0, ttl 64, id 49075, offset 0, flags [DF], proto TCP (6), length 605) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x651c (incorrect (-&amp;gt; 0x4c16), 426653:427206(553) ack 73777 win 331 &amp;lt;nop,nop,timestamp 62216905 214418033&amp;gt;
14:08:41.543135 IP (tos 0x0, ttl 59, id 23586, offset 0, flags [DF], proto TCP (6), length 500) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6fab (correct), 73777:74225(448) ack 427206 win 331 &amp;lt;nop,nop,timestamp 214418034 62216905&amp;gt;
14:08:41.543435 IP (tos 0x0, ttl 64, id 49076, offset 0, flags [DF], proto TCP (6), length 238) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ad (incorrect (-&amp;gt; 0x6b2a), 427206:427392(186) ack 74225 win 331 &amp;lt;nop,nop,timestamp 62216905 214418034&amp;gt;
14:08:41.543621 IP (tos 0x0, ttl 59, id 23587, offset 0, flags [DF], proto TCP (6), length 483) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x2204 (correct), 74225:74656(431) ack 427392 win 331 &amp;lt;nop,nop,timestamp 214418034 62216905&amp;gt;
14:08:41.543898 IP (tos 0x0, ttl 64, id 49077, offset 0, flags [DF], proto TCP (6), length 238) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ad (incorrect (-&amp;gt; 0xb384), 427392:427578(186) ack 74656 win 331 &amp;lt;nop,nop,timestamp 62216905 214418034&amp;gt;
14:08:41.544076 IP (tos 0x0, ttl 59, id 23588, offset 0, flags [DF], proto TCP (6), length 322) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xf1e4 (correct), 74656:74926(270) ack 427578 win 331 &amp;lt;nop,nop,timestamp 214418034 62216905&amp;gt;
14:08:41.544268 IP (tos 0x0, ttl 64, id 49078, offset 0, flags [DF], proto TCP (6), length 253) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63bc (incorrect (-&amp;gt; 0x740a), 427578:427779(201) ack 74926 win 331 &amp;lt;nop,nop,timestamp 62216905 214418034&amp;gt;
14:08:41.544445 IP (tos 0x0, ttl 59, id 23589, offset 0, flags [DF], proto TCP (6), length 550) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xd06d (correct), 74926:75424(498) ack 427779 win 331 &amp;lt;nop,nop,timestamp 214418034 62216905&amp;gt;
14:08:41.544646 IP (tos 0x0, ttl 64, id 49079, offset 0, flags [DF], proto TCP (6), length 588) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x650b (incorrect (-&amp;gt; 0xde90), 427779:428315(536) ack 75424 win 331 &amp;lt;nop,nop,timestamp 62216905 214418034&amp;gt;
14:08:41.544856 IP (tos 0x0, ttl 59, id 23590, offset 0, flags [DF], proto TCP (6), length 306) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xb7f8 (correct), 75424:75678(254) ack 428315 win 331 &amp;lt;nop,nop,timestamp 214418034 62216905&amp;gt;
14:08:41.545056 IP (tos 0x0, ttl 64, id 49080, offset 0, flags [DF], proto TCP (6), length 341) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6414 (incorrect (-&amp;gt; 0xa127), 428315:428604(289) ack 75678 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.545224 IP (tos 0x0, ttl 59, id 23591, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xa73f (correct), 75678:75931(253) ack 428604 win 331 &amp;lt;nop,nop,timestamp 214418034 62216906&amp;gt;
14:08:41.545396 IP (tos 0x0, ttl 64, id 49081, offset 0, flags [DF], proto TCP (6), length 341) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6414 (incorrect (-&amp;gt; 0x9f05), 428604:428893(289) ack 75931 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.545572 IP (tos 0x0, ttl 59, id 23592, offset 0, flags [DF], proto TCP (6), length 304) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0846 (correct), 75931:76183(252) ack 428893 win 331 &amp;lt;nop,nop,timestamp 214418034 62216906&amp;gt;
14:08:41.545752 IP (tos 0x0, ttl 64, id 49082, offset 0, flags [DF], proto TCP (6), length 388) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6443 (incorrect (-&amp;gt; 0x4f0f), 428893:429229(336) ack 76183 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.545940 IP (tos 0x0, ttl 59, id 23593, offset 0, flags [DF], proto TCP (6), length 307) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x1e8b (correct), 76183:76438(255) ack 429229 win 331 &amp;lt;nop,nop,timestamp 214418034 62216906&amp;gt;
14:08:41.546122 IP (tos 0x0, ttl 64, id 49083, offset 0, flags [DF], proto TCP (6), length 391) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6446 (incorrect (-&amp;gt; 0x6458), 429229:429568(339) ack 76438 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.546297 IP (tos 0x0, ttl 59, id 23594, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x878f (correct), 76438:76691(253) ack 429568 win 331 &amp;lt;nop,nop,timestamp 214418034 62216906&amp;gt;
14:08:41.546470 IP (tos 0x0, ttl 64, id 49084, offset 0, flags [DF], proto TCP (6), length 389) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6444 (incorrect (-&amp;gt; 0xcf58), 429568:429905(337) ack 76691 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.546659 IP (tos 0x0, ttl 59, id 23595, offset 0, flags [DF], proto TCP (6), length 302) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x3bca (correct), 76691:76941(250) ack 429905 win 331 &amp;lt;nop,nop,timestamp 214418034 62216906&amp;gt;
14:08:41.546842 IP (tos 0x0, ttl 64, id 49085, offset 0, flags [DF], proto TCP (6), length 386) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6441 (incorrect (-&amp;gt; 0x888b), 429905:430239(334) ack 76941 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.547023 IP (tos 0x0, ttl 59, id 23596, offset 0, flags [DF], proto TCP (6), length 318) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x07dc (correct), 76941:77207(266) ack 430239 win 331 &amp;lt;nop,nop,timestamp 214418034 62216906&amp;gt;
14:08:41.547203 IP (tos 0x0, ttl 64, id 49086, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b8 (incorrect (-&amp;gt; 0xd600), 430239:430436(197) ack 77207 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.547365 IP (tos 0x0, ttl 59, id 23597, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x8912 (correct), 77207:77359(152) ack 430436 win 331 &amp;lt;nop,nop,timestamp 214418034 62216906&amp;gt;
14:08:41.547674 IP (tos 0x0, ttl 64, id 49087, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0xbcf2), 430436:436028(5592) ack 77359 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.547687 IP (tos 0x0, ttl 64, id 49091, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0x3d3e), 436028:436880(852) ack 77359 win 331 &amp;lt;nop,nop,timestamp 62216906 214418034&amp;gt;
14:08:41.548072 IP (tos 0x0, ttl 59, id 23598, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x4265 (correct), 77359:77359(0) ack 436880 win 331 &amp;lt;nop,nop,timestamp 214418035 62216906&amp;gt;
14:08:41.551959 IP (tos 0x0, ttl 59, id 23599, offset 0, flags [DF], proto TCP (6), length 639) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xe4af (correct), 77359:77946(587) ack 436880 win 331 &amp;lt;nop,nop,timestamp 214418036 62216906&amp;gt;
14:08:41.552349 IP (tos 0x0, ttl 64, id 49092, offset 0, flags [DF], proto TCP (6), length 572) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64fb (incorrect (-&amp;gt; 0xefdb), 436880:437400(520) ack 77946 win 331 &amp;lt;nop,nop,timestamp 62216907 214418036&amp;gt;
14:08:41.552647 IP (tos 0x0, ttl 59, id 23600, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x61ff (correct), 77946:78098(152) ack 437400 win 331 &amp;lt;nop,nop,timestamp 214418036 62216907&amp;gt;
14:08:41.552995 IP (tos 0x0, ttl 64, id 49093, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x9dde), 437400:442992(5592) ack 78098 win 331 &amp;lt;nop,nop,timestamp 62216908 214418036&amp;gt;
14:08:41.553015 IP (tos 0x0, ttl 64, id 49097, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0x2d28), 442992:443844(852) ack 78098 win 331 &amp;lt;nop,nop,timestamp 62216908 214418036&amp;gt;
14:08:41.554099 IP (tos 0x0, ttl 59, id 23601, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x244b (correct), 78098:78098(0) ack 443844 win 331 &amp;lt;nop,nop,timestamp 214418036 62216908&amp;gt;
14:08:41.558058 IP (tos 0x0, ttl 59, id 23602, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4439 (correct), 78098:78250(152) ack 443844 win 331 &amp;lt;nop,nop,timestamp 214418037 62216908&amp;gt;
14:08:41.558402 IP (tos 0x0, ttl 64, id 49098, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x8418), 443844:449436(5592) ack 78250 win 331 &amp;lt;nop,nop,timestamp 62216909 214418037&amp;gt;
14:08:41.558416 IP (tos 0x0, ttl 64, id 49102, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0x1160), 449436:450288(852) ack 78250 win 331 &amp;lt;nop,nop,timestamp 62216909 214418037&amp;gt;
14:08:41.558781 IP (tos 0x0, ttl 59, id 23603, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x0a85 (correct), 78250:78250(0) ack 450288 win 331 &amp;lt;nop,nop,timestamp 214418037 62216909&amp;gt;
14:08:41.562758 IP (tos 0x0, ttl 59, id 23604, offset 0, flags [DF], proto TCP (6), length 157) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xcbd6 (correct), 78250:78355(105) ack 450288 win 331 &amp;lt;nop,nop,timestamp 214418038 62216909&amp;gt;
14:08:41.562997 IP (tos 0x0, ttl 64, id 49103, offset 0, flags [DF], proto TCP (6), length 1000) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x66a7 (incorrect (-&amp;gt; 0x7efa), 450288:451236(948) ack 78355 win 331 &amp;lt;nop,nop,timestamp 62216910 214418038&amp;gt;
14:08:41.563301 IP (tos 0x0, ttl 59, id 23605, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x1e54 (correct), 78355:78507(152) ack 451236 win 331 &amp;lt;nop,nop,timestamp 214418039 62216910&amp;gt;
14:08:41.563620 IP (tos 0x0, ttl 64, id 49104, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x6634), 451236:456828(5592) ack 78507 win 331 &amp;lt;nop,nop,timestamp 62216910 214418039&amp;gt;
14:08:41.563635 IP (tos 0x0, ttl 64, id 49108, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0xef77), 456828:457680(852) ack 78507 win 331 &amp;lt;nop,nop,timestamp 62216910 214418039&amp;gt;
14:08:41.564495 IP (tos 0x0, ttl 59, id 23606, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xeca0 (correct), 78507:78507(0) ack 457680 win 331 &amp;lt;nop,nop,timestamp 214418039 62216910&amp;gt;
14:08:41.568362 IP (tos 0x0, ttl 59, id 23607, offset 0, flags [DF], proto TCP (6), length 197) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x3abf (correct), 78507:78652(145) ack 457680 win 331 &amp;lt;nop,nop,timestamp 214418040 62216910&amp;gt;
14:08:41.568675 IP (tos 0x0, ttl 64, id 49109, offset 0, flags [DF], proto TCP (6), length 1154) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6741 (incorrect (-&amp;gt; 0xa2ce), 457680:458782(1102) ack 78652 win 331 &amp;lt;nop,nop,timestamp 62216911 214418040&amp;gt;
14:08:41.569059 IP (tos 0x0, ttl 59, id 23608, offset 0, flags [DF], proto TCP (6), length 286) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xc2cd (correct), 78652:78886(234) ack 458782 win 331 &amp;lt;nop,nop,timestamp 214418040 62216911&amp;gt;
14:08:41.569350 IP (tos 0x0, ttl 64, id 49110, offset 0, flags [DF], proto TCP (6), length 710) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6585 (incorrect (-&amp;gt; 0x9fec), 458782:459440(658) ack 78886 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.569595 IP (tos 0x0, ttl 59, id 23609, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0291 (correct), 78886:79066(180) ack 459440 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.569936 IP (tos 0x0, ttl 64, id 49111, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0xf682), 459440:459812(372) ack 79066 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.570132 IP (tos 0x0, ttl 59, id 23610, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x57c9 (correct), 79066:79083(17) ack 459812 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.570323 IP (tos 0x0, ttl 64, id 49112, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0xd4a8), 459812:460059(247) ack 79083 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.570489 IP (tos 0x0, ttl 59, id 23611, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x55c1 (correct), 79083:79100(17) ack 460059 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.570701 IP (tos 0x0, ttl 64, id 49113, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0xd714), 460059:460315(256) ack 79100 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.570851 IP (tos 0x0, ttl 59, id 23612, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x53b0 (correct), 79100:79117(17) ack 460315 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.571019 IP (tos 0x0, ttl 64, id 49114, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0xeae9), 460315:460778(463) ack 79117 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.571168 IP (tos 0x0, ttl 59, id 23613, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x50d0 (correct), 79117:79134(17) ack 460778 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.571334 IP (tos 0x0, ttl 64, id 49115, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0x0a8e), 460778:461031(253) ack 79134 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.571482 IP (tos 0x0, ttl 59, id 23614, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4ec2 (correct), 79134:79151(17) ack 461031 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.571639 IP (tos 0x0, ttl 64, id 49116, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0x9fe2), 461031:461330(299) ack 79151 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.571790 IP (tos 0x0, ttl 59, id 23615, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4c86 (correct), 79151:79168(17) ack 461330 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.571941 IP (tos 0x0, ttl 64, id 49117, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0xeb92), 461330:461479(149) ack 79168 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.572132 IP (tos 0x0, ttl 59, id 23616, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xca5b (correct), 79168:79363(195) ack 461479 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.572425 IP (tos 0x0, ttl 64, id 49118, offset 0, flags [DF], proto TCP (6), length 1450) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x6869 (incorrect (-&amp;gt; 0x2cda), 461479:462877(1398) ack 79363 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.572442 IP (tos 0x0, ttl 64, id 49119, offset 0, flags [DF], proto TCP (6), length 86) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6315 (incorrect (-&amp;gt; 0x9134), 462877:462911(34) ack 79363 win 331 &amp;lt;nop,nop,timestamp 62216912 214418040&amp;gt;
14:08:41.572746 IP (tos 0x0, ttl 59, id 23617, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xd4d6 (correct), 79363:79363(0) ack 462911 win 331 &amp;lt;nop,nop,timestamp 214418040 62216912&amp;gt;
14:08:41.573027 IP (tos 0x0, ttl 59, id 23618, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xc2ff (correct), 79363:79558(195) ack 462911 win 331 &amp;lt;nop,nop,timestamp 214418041 62216912&amp;gt;
14:08:41.573328 IP (tos 0x0, ttl 64, id 49120, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0xc8b4), 462911:464219(1308) ack 79558 win 331 &amp;lt;nop,nop,timestamp 62216912 214418041&amp;gt;
14:08:41.573555 IP (tos 0x0, ttl 59, id 23619, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x75ca (correct), 79558:79755(197) ack 464219 win 331 &amp;lt;nop,nop,timestamp 214418041 62216912&amp;gt;
14:08:41.573840 IP (tos 0x0, ttl 64, id 49121, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0x3dd3), 464219:465527(1308) ack 79755 win 331 &amp;lt;nop,nop,timestamp 62216913 214418041&amp;gt;
14:08:41.574081 IP (tos 0x0, ttl 59, id 23620, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x464a (correct), 79755:80002(247) ack 465527 win 331 &amp;lt;nop,nop,timestamp 214418041 62216913&amp;gt;
14:08:41.574311 IP (tos 0x0, ttl 64, id 49122, offset 0, flags [DF], proto TCP (6), length 244) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b3 (incorrect (-&amp;gt; 0xd124), 465527:465719(192) ack 80002 win 331 &amp;lt;nop,nop,timestamp 62216913 214418041&amp;gt;
14:08:41.574487 IP (tos 0x0, ttl 59, id 23621, offset 0, flags [DF], proto TCP (6), length 277) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xb786 (correct), 80002:80227(225) ack 465719 win 331 &amp;lt;nop,nop,timestamp 214418041 62216913&amp;gt;
14:08:41.574692 IP (tos 0x0, ttl 64, id 49123, offset 0, flags [DF], proto TCP (6), length 583) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6506 (incorrect (-&amp;gt; 0xfbfe), 465719:466250(531) ack 80227 win 331 &amp;lt;nop,nop,timestamp 62216913 214418041&amp;gt;
14:08:41.574863 IP (tos 0x0, ttl 59, id 23622, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xa918 (correct), 80227:80244(17) ack 466250 win 331 &amp;lt;nop,nop,timestamp 214418041 62216913&amp;gt;
14:08:41.574982 IP (tos 0x0, ttl 64, id 49124, offset 0, flags [DF], proto TCP (6), length 386) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6441 (incorrect (-&amp;gt; 0x0a10), 466250:466584(334) ack 80244 win 331 &amp;lt;nop,nop,timestamp 62216913 214418041&amp;gt;
14:08:41.575165 IP (tos 0x0, ttl 59, id 23623, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xa6b8 (correct), 80244:80261(17) ack 466584 win 331 &amp;lt;nop,nop,timestamp 214418042 62216913&amp;gt;
14:08:41.575271 IP (tos 0x0, ttl 64, id 49125, offset 0, flags [DF], proto TCP (6), length 339) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6412 (incorrect (-&amp;gt; 0x0624), 466584:466871(287) ack 80261 win 331 &amp;lt;nop,nop,timestamp 62216913 214418042&amp;gt;
14:08:41.575455 IP (tos 0x0, ttl 59, id 23624, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xa488 (correct), 80261:80278(17) ack 466871 win 331 &amp;lt;nop,nop,timestamp 214418042 62216913&amp;gt;
14:08:41.575563 IP (tos 0x0, ttl 64, id 49126, offset 0, flags [DF], proto TCP (6), length 320) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ff (incorrect (-&amp;gt; 0x35a7), 466871:467139(268) ack 80278 win 331 &amp;lt;nop,nop,timestamp 62216913 214418042&amp;gt;
14:08:41.575786 IP (tos 0x0, ttl 59, id 23625, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xa0ac (correct), 80278:80430(152) ack 467139 win 331 &amp;lt;nop,nop,timestamp 214418042 62216913&amp;gt;
14:08:41.576095 IP (tos 0x0, ttl 64, id 49127, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x208c), 467139:472731(5592) ack 80430 win 331 &amp;lt;nop,nop,timestamp 62216913 214418042&amp;gt;
14:08:41.576111 IP (tos 0x0, ttl 64, id 49131, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0x0db5), 472731:473583(852) ack 80430 win 331 &amp;lt;nop,nop,timestamp 62216913 214418042&amp;gt;
14:08:41.577487 IP (tos 0x0, ttl 59, id 23626, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xa6f8 (correct), 80430:80430(0) ack 473583 win 331 &amp;lt;nop,nop,timestamp 214418042 62216913&amp;gt;
14:08:41.581406 IP (tos 0x0, ttl 59, id 23627, offset 0, flags [DF], proto TCP (6), length 316) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x8fef (correct), 80430:80694(264) ack 473583 win 331 &amp;lt;nop,nop,timestamp 214418043 62216913&amp;gt;
14:08:41.581627 IP (tos 0x0, ttl 64, id 49132, offset 0, flags [DF], proto TCP (6), length 320) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ff (incorrect (-&amp;gt; 0xedb4), 473583:473851(268) ack 80694 win 331 &amp;lt;nop,nop,timestamp 62216914 214418043&amp;gt;
14:08:41.581877 IP (tos 0x0, ttl 59, id 23628, offset 0, flags [DF], proto TCP (6), length 286) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x47ef (correct), 80694:80928(234) ack 473851 win 331 &amp;lt;nop,nop,timestamp 214418043 62216914&amp;gt;
14:08:41.582092 IP (tos 0x0, ttl 64, id 49133, offset 0, flags [DF], proto TCP (6), length 710) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6585 (incorrect (-&amp;gt; 0xc0e1), 473851:474509(658) ack 80928 win 331 &amp;lt;nop,nop,timestamp 62216915 214418043&amp;gt;
14:08:41.582332 IP (tos 0x0, ttl 59, id 23629, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x87b4 (correct), 80928:81108(180) ack 474509 win 331 &amp;lt;nop,nop,timestamp 214418043 62216915&amp;gt;
14:08:41.582563 IP (tos 0x0, ttl 64, id 49134, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0x178b), 474509:474881(372) ack 81108 win 331 &amp;lt;nop,nop,timestamp 62216915 214418043&amp;gt;
14:08:41.582723 IP (tos 0x0, ttl 59, id 23630, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x78ec (correct), 81108:81125(17) ack 474881 win 331 &amp;lt;nop,nop,timestamp 214418043 62216915&amp;gt;
14:08:41.582851 IP (tos 0x0, ttl 64, id 49135, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0xf5b0), 474881:475128(247) ack 81125 win 331 &amp;lt;nop,nop,timestamp 62216915 214418043&amp;gt;
14:08:41.583038 IP (tos 0x0, ttl 59, id 23631, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x76e4 (correct), 81125:81142(17) ack 475128 win 331 &amp;lt;nop,nop,timestamp 214418043 62216915&amp;gt;
14:08:41.583190 IP (tos 0x0, ttl 64, id 49136, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0x799b), 475128:475384(256) ack 81142 win 331 &amp;lt;nop,nop,timestamp 62216915 214418043&amp;gt;
14:08:41.583375 IP (tos 0x0, ttl 59, id 23632, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x74d3 (correct), 81142:81159(17) ack 475384 win 331 &amp;lt;nop,nop,timestamp 214418043 62216915&amp;gt;
14:08:41.583495 IP (tos 0x0, ttl 64, id 49137, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0x0bf2), 475384:475847(463) ack 81159 win 331 &amp;lt;nop,nop,timestamp 62216915 214418043&amp;gt;
14:08:41.583679 IP (tos 0x0, ttl 59, id 23633, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x71f2 (correct), 81159:81176(17) ack 475847 win 331 &amp;lt;nop,nop,timestamp 214418044 62216915&amp;gt;
14:08:41.583792 IP (tos 0x0, ttl 64, id 49138, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0x2b95), 475847:476100(253) ack 81176 win 331 &amp;lt;nop,nop,timestamp 62216915 214418044&amp;gt;
14:08:41.583978 IP (tos 0x0, ttl 59, id 23634, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6fe4 (correct), 81176:81193(17) ack 476100 win 331 &amp;lt;nop,nop,timestamp 214418044 62216915&amp;gt;
14:08:41.584096 IP (tos 0x0, ttl 64, id 49139, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0xc0e9), 476100:476399(299) ack 81193 win 331 &amp;lt;nop,nop,timestamp 62216915 214418044&amp;gt;
14:08:41.584249 IP (tos 0x0, ttl 59, id 23635, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6da8 (correct), 81193:81210(17) ack 476399 win 331 &amp;lt;nop,nop,timestamp 214418044 62216915&amp;gt;
14:08:41.584367 IP (tos 0x0, ttl 64, id 49140, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0x0c9a), 476399:476548(149) ack 81210 win 331 &amp;lt;nop,nop,timestamp 62216915 214418044&amp;gt;
14:08:41.584554 IP (tos 0x0, ttl 59, id 23636, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4f7e (correct), 81210:81405(195) ack 476548 win 331 &amp;lt;nop,nop,timestamp 214418044 62216915&amp;gt;
14:08:41.584838 IP (tos 0x0, ttl 64, id 49141, offset 0, flags [DF], proto TCP (6), length 1450) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x6869 (incorrect (-&amp;gt; 0xe9e0), 476548:477946(1398) ack 81405 win 331 &amp;lt;nop,nop,timestamp 62216915 214418044&amp;gt;
14:08:41.584855 IP (tos 0x0, ttl 64, id 49142, offset 0, flags [DF], proto TCP (6), length 86) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6315 (incorrect (-&amp;gt; 0xb256), 477946:477980(34) ack 81405 win 331 &amp;lt;nop,nop,timestamp 62216915 214418044&amp;gt;
14:08:41.585491 IP (tos 0x0, ttl 59, id 23637, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x91f8 (correct), 81405:81405(0) ack 477980 win 331 &amp;lt;nop,nop,timestamp 214418044 62216915&amp;gt;
14:08:41.585773 IP (tos 0x0, ttl 59, id 23638, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4823 (correct), 81405:81600(195) ack 477980 win 331 &amp;lt;nop,nop,timestamp 214418044 62216915&amp;gt;
14:08:41.586077 IP (tos 0x0, ttl 64, id 49143, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0xced7), 477980:479288(1308) ack 81600 win 331 &amp;lt;nop,nop,timestamp 62216915 214418044&amp;gt;
14:08:41.586302 IP (tos 0x0, ttl 59, id 23639, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xfcec (correct), 81600:81797(197) ack 479288 win 331 &amp;lt;nop,nop,timestamp 214418044 62216915&amp;gt;
14:08:41.586593 IP (tos 0x0, ttl 64, id 49144, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0xc4f5), 479288:480596(1308) ack 81797 win 331 &amp;lt;nop,nop,timestamp 62216916 214418044&amp;gt;
14:08:41.586823 IP (tos 0x0, ttl 59, id 23640, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xcd6c (correct), 81797:82044(247) ack 480596 win 331 &amp;lt;nop,nop,timestamp 214418044 62216916&amp;gt;
14:08:41.587055 IP (tos 0x0, ttl 64, id 49145, offset 0, flags [DF], proto TCP (6), length 244) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b3 (incorrect (-&amp;gt; 0x732c), 480596:480788(192) ack 82044 win 331 &amp;lt;nop,nop,timestamp 62216916 214418044&amp;gt;
14:08:41.587254 IP (tos 0x0, ttl 59, id 23641, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4ace (correct), 82044:82224(180) ack 480788 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.587548 IP (tos 0x0, ttl 64, id 49146, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0xea94), 480788:481160(372) ack 82224 win 331 &amp;lt;nop,nop,timestamp 62216916 214418045&amp;gt;
14:08:41.587711 IP (tos 0x0, ttl 59, id 23642, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4c06 (correct), 82224:82241(17) ack 481160 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.587862 IP (tos 0x0, ttl 64, id 49147, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0xc8ba), 481160:481407(247) ack 82241 win 331 &amp;lt;nop,nop,timestamp 62216916 214418045&amp;gt;
14:08:41.588020 IP (tos 0x0, ttl 59, id 23643, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x49fe (correct), 82241:82258(17) ack 481407 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.588205 IP (tos 0x0, ttl 64, id 49148, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0x4ca5), 481407:481663(256) ack 82258 win 331 &amp;lt;nop,nop,timestamp 62216916 214418045&amp;gt;
14:08:41.588351 IP (tos 0x0, ttl 59, id 23644, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x47ed (correct), 82258:82275(17) ack 481663 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.588499 IP (tos 0x0, ttl 64, id 49149, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0xdefb), 481663:482126(463) ack 82275 win 331 &amp;lt;nop,nop,timestamp 62216916 214418045&amp;gt;
14:08:41.588655 IP (tos 0x0, ttl 59, id 23645, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x450d (correct), 82275:82292(17) ack 482126 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.588797 IP (tos 0x0, ttl 64, id 49150, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0xfe9f), 482126:482379(253) ack 82292 win 331 &amp;lt;nop,nop,timestamp 62216916 214418045&amp;gt;
14:08:41.588942 IP (tos 0x0, ttl 59, id 23646, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x42ff (correct), 82292:82309(17) ack 482379 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.589089 IP (tos 0x0, ttl 64, id 49151, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0x93f4), 482379:482678(299) ack 82309 win 331 &amp;lt;nop,nop,timestamp 62216916 214418045&amp;gt;
14:08:41.589237 IP (tos 0x0, ttl 59, id 23647, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x40c3 (correct), 82309:82326(17) ack 482678 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.589386 IP (tos 0x0, ttl 64, id 49152, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0xdfa4), 482678:482827(149) ack 82326 win 331 &amp;lt;nop,nop,timestamp 62216916 214418045&amp;gt;
14:08:41.589573 IP (tos 0x0, ttl 59, id 23648, offset 0, flags [DF], proto TCP (6), length 198) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xb7aa (correct), 82326:82472(146) ack 482827 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.589803 IP (tos 0x0, ttl 64, id 49153, offset 0, flags [DF], proto TCP (6), length 265) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63c8 (incorrect (-&amp;gt; 0x0b15), 482827:483040(213) ack 82472 win 331 &amp;lt;nop,nop,timestamp 62216916 214418045&amp;gt;
14:08:41.589986 IP (tos 0x0, ttl 59, id 23649, offset 0, flags [DF], proto TCP (6), length 202) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xf338 (correct), 82472:82622(150) ack 483040 win 331 &amp;lt;nop,nop,timestamp 214418045 62216916&amp;gt;
14:08:41.590244 IP (tos 0x0, ttl 64, id 49154, offset 0, flags [DF], proto TCP (6), length 605) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x651c (incorrect (-&amp;gt; 0xf04e), 483040:483593(553) ack 82622 win 331 &amp;lt;nop,nop,timestamp 62216917 214418045&amp;gt;
14:08:41.590519 IP (tos 0x0, ttl 59, id 23650, offset 0, flags [DF], proto TCP (6), length 500) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xb3ca (correct), 82622:83070(448) ack 483593 win 331 &amp;lt;nop,nop,timestamp 214418045 62216917&amp;gt;
14:08:41.590968 IP (tos 0x0, ttl 64, id 49155, offset 0, flags [DF], proto TCP (6), length 238) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ad (incorrect (-&amp;gt; 0x3142), 483593:483779(186) ack 83070 win 331 &amp;lt;nop,nop,timestamp 62216917 214418045&amp;gt;
14:08:41.591163 IP (tos 0x0, ttl 59, id 23651, offset 0, flags [DF], proto TCP (6), length 483) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6e1b (correct), 83070:83501(431) ack 483779 win 331 &amp;lt;nop,nop,timestamp 214418045 62216917&amp;gt;
14:08:41.591548 IP (tos 0x0, ttl 64, id 49156, offset 0, flags [DF], proto TCP (6), length 238) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ad (incorrect (-&amp;gt; 0x799c), 483779:483965(186) ack 83501 win 331 &amp;lt;nop,nop,timestamp 62216917 214418045&amp;gt;
14:08:41.591729 IP (tos 0x0, ttl 59, id 23652, offset 0, flags [DF], proto TCP (6), length 322) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x3604 (correct), 83501:83771(270) ack 483965 win 331 &amp;lt;nop,nop,timestamp 214418045 62216917&amp;gt;
14:08:41.591987 IP (tos 0x0, ttl 64, id 49157, offset 0, flags [DF], proto TCP (6), length 253) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63bc (incorrect (-&amp;gt; 0x1844), 483965:484166(201) ack 83771 win 331 &amp;lt;nop,nop,timestamp 62216917 214418045&amp;gt;
14:08:41.592184 IP (tos 0x0, ttl 59, id 23653, offset 0, flags [DF], proto TCP (6), length 550) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x1c85 (correct), 83771:84269(498) ack 484166 win 331 &amp;lt;nop,nop,timestamp 214418045 62216917&amp;gt;
14:08:41.592460 IP (tos 0x0, ttl 64, id 49158, offset 0, flags [DF], proto TCP (6), length 588) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x650b (incorrect (-&amp;gt; 0x2677), 484166:484702(536) ack 84269 win 331 &amp;lt;nop,nop,timestamp 62216917 214418045&amp;gt;
14:08:41.592680 IP (tos 0x0, ttl 59, id 23654, offset 0, flags [DF], proto TCP (6), length 306) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xfc17 (correct), 84269:84523(254) ack 484702 win 331 &amp;lt;nop,nop,timestamp 214418045 62216917&amp;gt;
14:08:41.592931 IP (tos 0x0, ttl 64, id 49159, offset 0, flags [DF], proto TCP (6), length 341) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6414 (incorrect (-&amp;gt; 0xa205), 484702:484991(289) ack 84523 win 331 &amp;lt;nop,nop,timestamp 62216917 214418045&amp;gt;
14:08:41.593106 IP (tos 0x0, ttl 59, id 23655, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xeb5e (correct), 84523:84776(253) ack 484991 win 331 &amp;lt;nop,nop,timestamp 214418046 62216917&amp;gt;
14:08:41.593331 IP (tos 0x0, ttl 64, id 49160, offset 0, flags [DF], proto TCP (6), length 341) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6414 (incorrect (-&amp;gt; 0x9fe2), 484991:485280(289) ack 84776 win 331 &amp;lt;nop,nop,timestamp 62216917 214418046&amp;gt;
14:08:41.593505 IP (tos 0x0, ttl 59, id 23656, offset 0, flags [DF], proto TCP (6), length 304) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4c65 (correct), 84776:85028(252) ack 485280 win 331 &amp;lt;nop,nop,timestamp 214418046 62216917&amp;gt;
14:08:41.593736 IP (tos 0x0, ttl 64, id 49161, offset 0, flags [DF], proto TCP (6), length 388) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6443 (incorrect (-&amp;gt; 0x70d0), 485280:485616(336) ack 85028 win 331 &amp;lt;nop,nop,timestamp 62216918 214418046&amp;gt;
14:08:41.593932 IP (tos 0x0, ttl 59, id 23657, offset 0, flags [DF], proto TCP (6), length 307) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x62a9 (correct), 85028:85283(255) ack 485616 win 331 &amp;lt;nop,nop,timestamp 214418046 62216918&amp;gt;
14:08:41.594154 IP (tos 0x0, ttl 64, id 49162, offset 0, flags [DF], proto TCP (6), length 391) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6446 (incorrect (-&amp;gt; 0x0798), 485616:485955(339) ack 85283 win 331 &amp;lt;nop,nop,timestamp 62216918 214418046&amp;gt;
14:08:41.594378 IP (tos 0x0, ttl 59, id 23658, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xcbad (correct), 85283:85536(253) ack 485955 win 331 &amp;lt;nop,nop,timestamp 214418046 62216918&amp;gt;
14:08:41.594604 IP (tos 0x0, ttl 64, id 49163, offset 0, flags [DF], proto TCP (6), length 389) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6444 (incorrect (-&amp;gt; 0x7298), 485955:486292(337) ack 85536 win 331 &amp;lt;nop,nop,timestamp 62216918 214418046&amp;gt;
14:08:41.594799 IP (tos 0x0, ttl 59, id 23659, offset 0, flags [DF], proto TCP (6), length 302) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x7fe8 (correct), 85536:85786(250) ack 486292 win 331 &amp;lt;nop,nop,timestamp 214418046 62216918&amp;gt;
14:08:41.595025 IP (tos 0x0, ttl 64, id 49164, offset 0, flags [DF], proto TCP (6), length 386) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6441 (incorrect (-&amp;gt; 0xaa4c), 486292:486626(334) ack 85786 win 331 &amp;lt;nop,nop,timestamp 62216918 214418046&amp;gt;
14:08:41.595257 IP (tos 0x0, ttl 59, id 23660, offset 0, flags [DF], proto TCP (6), length 318) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4bfa (correct), 85786:86052(266) ack 486626 win 331 &amp;lt;nop,nop,timestamp 214418046 62216918&amp;gt;
14:08:41.595473 IP (tos 0x0, ttl 64, id 49165, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b8 (incorrect (-&amp;gt; 0x7a39), 486626:486823(197) ack 86052 win 331 &amp;lt;nop,nop,timestamp 62216918 214418046&amp;gt;
14:08:41.595649 IP (tos 0x0, ttl 59, id 23661, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xcd30 (correct), 86052:86204(152) ack 486823 win 331 &amp;lt;nop,nop,timestamp 214418046 62216918&amp;gt;
14:08:41.596108 IP (tos 0x0, ttl 64, id 49166, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0xbd10), 486823:492415(5592) ack 86204 win 331 &amp;lt;nop,nop,timestamp 62216918 214418046&amp;gt;
14:08:41.596129 IP (tos 0x0, ttl 64, id 49170, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0x7201), 492415:493267(852) ack 86204 win 331 &amp;lt;nop,nop,timestamp 62216918 214418046&amp;gt;
14:08:41.596335 IP (tos 0x0, ttl 59, id 23662, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x437d (correct), 86204:86204(0) ack 493267 win 331 &amp;lt;nop,nop,timestamp 214418046 62216918&amp;gt;
14:08:41.600273 IP (tos 0x0, ttl 59, id 23663, offset 0, flags [DF], proto TCP (6), length 639) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x30c7 (correct), 86204:86791(587) ack 493267 win 331 &amp;lt;nop,nop,timestamp 214418047 62216918&amp;gt;
14:08:41.600721 IP (tos 0x0, ttl 64, id 49171, offset 0, flags [DF], proto TCP (6), length 572) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64fb (incorrect (-&amp;gt; 0x1297), 493267:493787(520) ack 86791 win 331 &amp;lt;nop,nop,timestamp 62216919 214418047&amp;gt;
14:08:41.601043 IP (tos 0x0, ttl 59, id 23664, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xaa1c (correct), 86791:86943(152) ack 493787 win 331 &amp;lt;nop,nop,timestamp 214418048 62216919&amp;gt;
14:08:41.601382 IP (tos 0x0, ttl 64, id 49172, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0xa1fb), 493787:499379(5592) ack 86943 win 331 &amp;lt;nop,nop,timestamp 62216920 214418048&amp;gt;
14:08:41.601397 IP (tos 0x0, ttl 64, id 49176, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0x7d67), 499379:500231(852) ack 86943 win 331 &amp;lt;nop,nop,timestamp 62216920 214418048&amp;gt;
14:08:41.602003 IP (tos 0x0, ttl 59, id 23665, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x2562 (correct), 86943:86943(0) ack 500231 win 331 &amp;lt;nop,nop,timestamp 214418048 62216920&amp;gt;
14:08:41.606000 IP (tos 0x0, ttl 59, id 23666, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x8c56 (correct), 86943:87095(152) ack 500231 win 331 &amp;lt;nop,nop,timestamp 214418049 62216920&amp;gt;
14:08:41.606327 IP (tos 0x0, ttl 64, id 49177, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x8835), 500231:505823(5592) ack 87095 win 331 &amp;lt;nop,nop,timestamp 62216921 214418049&amp;gt;
14:08:41.606343 IP (tos 0x0, ttl 64, id 49181, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0x619f), 505823:506675(852) ack 87095 win 331 &amp;lt;nop,nop,timestamp 62216921 214418049&amp;gt;
14:08:41.606735 IP (tos 0x0, ttl 59, id 23667, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x0b9c (correct), 87095:87095(0) ack 506675 win 331 &amp;lt;nop,nop,timestamp 214418049 62216921&amp;gt;
14:08:41.610762 IP (tos 0x0, ttl 59, id 23668, offset 0, flags [DF], proto TCP (6), length 157) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x10ee (correct), 87095:87200(105) ack 506675 win 331 &amp;lt;nop,nop,timestamp 214418050 62216921&amp;gt;
14:08:41.610996 IP (tos 0x0, ttl 64, id 49182, offset 0, flags [DF], proto TCP (6), length 1000) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x66a7 (incorrect (-&amp;gt; 0xa1b4), 506675:507623(948) ack 87200 win 331 &amp;lt;nop,nop,timestamp 62216922 214418050&amp;gt;
14:08:41.611326 IP (tos 0x0, ttl 59, id 23669, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6671 (correct), 87200:87352(152) ack 507623 win 331 &amp;lt;nop,nop,timestamp 214418051 62216922&amp;gt;
14:08:41.611645 IP (tos 0x0, ttl 64, id 49183, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x6a51), 507623:513215(5592) ack 87352 win 331 &amp;lt;nop,nop,timestamp 62216922 214418051&amp;gt;
14:08:41.611661 IP (tos 0x0, ttl 64, id 49187, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0x3fb7), 513215:514067(852) ack 87352 win 331 &amp;lt;nop,nop,timestamp 62216922 214418051&amp;gt;
14:08:41.612789 IP (tos 0x0, ttl 59, id 23670, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xedb7 (correct), 87352:87352(0) ack 514067 win 331 &amp;lt;nop,nop,timestamp 214418051 62216922&amp;gt;
14:08:41.616692 IP (tos 0x0, ttl 59, id 23671, offset 0, flags [DF], proto TCP (6), length 197) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x7fd7 (correct), 87352:87497(145) ack 514067 win 331 &amp;lt;nop,nop,timestamp 214418051 62216922&amp;gt;
14:08:41.616949 IP (tos 0x0, ttl 64, id 49188, offset 0, flags [DF], proto TCP (6), length 1154) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6741 (incorrect (-&amp;gt; 0xc588), 514067:515169(1102) ack 87497 win 331 &amp;lt;nop,nop,timestamp 62216924 214418051&amp;gt;
14:08:41.617342 IP (tos 0x0, ttl 59, id 23672, offset 0, flags [DF], proto TCP (6), length 286) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0de7 (correct), 87497:87731(234) ack 515169 win 331 &amp;lt;nop,nop,timestamp 214418052 62216924&amp;gt;
14:08:41.617612 IP (tos 0x0, ttl 64, id 49189, offset 0, flags [DF], proto TCP (6), length 710) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6585 (incorrect (-&amp;gt; 0xc8a9), 515169:515827(658) ack 87731 win 331 &amp;lt;nop,nop,timestamp 62216924 214418052&amp;gt;
14:08:41.617858 IP (tos 0x0, ttl 59, id 23673, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4aae (correct), 87731:87911(180) ack 515827 win 331 &amp;lt;nop,nop,timestamp 214418052 62216924&amp;gt;
14:08:41.618132 IP (tos 0x0, ttl 64, id 49190, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0x193d), 515827:516199(372) ack 87911 win 331 &amp;lt;nop,nop,timestamp 62216924 214418052&amp;gt;
14:08:41.618311 IP (tos 0x0, ttl 59, id 23674, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x7ae0 (correct), 87911:87928(17) ack 516199 win 331 &amp;lt;nop,nop,timestamp 214418052 62216924&amp;gt;
14:08:41.618469 IP (tos 0x0, ttl 64, id 49191, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0xf762), 516199:516446(247) ack 87928 win 331 &amp;lt;nop,nop,timestamp 62216924 214418052&amp;gt;
14:08:41.618624 IP (tos 0x0, ttl 59, id 23675, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x78d8 (correct), 87928:87945(17) ack 516446 win 331 &amp;lt;nop,nop,timestamp 214418052 62216924&amp;gt;
14:08:41.618825 IP (tos 0x0, ttl 64, id 49192, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0x7b4d), 516446:516702(256) ack 87945 win 331 &amp;lt;nop,nop,timestamp 62216924 214418052&amp;gt;
14:08:41.618976 IP (tos 0x0, ttl 59, id 23676, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x76c7 (correct), 87945:87962(17) ack 516702 win 331 &amp;lt;nop,nop,timestamp 214418052 62216924&amp;gt;
14:08:41.619134 IP (tos 0x0, ttl 64, id 49193, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0x11a4), 516702:517165(463) ack 87962 win 331 &amp;lt;nop,nop,timestamp 62216924 214418052&amp;gt;
14:08:41.619307 IP (tos 0x0, ttl 59, id 23677, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x73e6 (correct), 87962:87979(17) ack 517165 win 331 &amp;lt;nop,nop,timestamp 214418053 62216924&amp;gt;
14:08:41.619450 IP (tos 0x0, ttl 64, id 49194, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0x2d47), 517165:517418(253) ack 87979 win 331 &amp;lt;nop,nop,timestamp 62216924 214418053&amp;gt;
14:08:41.619598 IP (tos 0x0, ttl 59, id 23678, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x71d8 (correct), 87979:87996(17) ack 517418 win 331 &amp;lt;nop,nop,timestamp 214418053 62216924&amp;gt;
14:08:41.619746 IP (tos 0x0, ttl 64, id 49195, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0xbfa1), 517418:517717(299) ack 87996 win 331 &amp;lt;nop,nop,timestamp 62216924 214418053&amp;gt;
14:08:41.619891 IP (tos 0x0, ttl 59, id 23679, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6f9c (correct), 87996:88013(17) ack 517717 win 331 &amp;lt;nop,nop,timestamp 214418053 62216924&amp;gt;
14:08:41.620041 IP (tos 0x0, ttl 64, id 49196, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0x0e4c), 517717:517866(149) ack 88013 win 331 &amp;lt;nop,nop,timestamp 62216924 214418053&amp;gt;
14:08:41.620242 IP (tos 0x0, ttl 59, id 23680, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0f72 (correct), 88013:88208(195) ack 517866 win 331 &amp;lt;nop,nop,timestamp 214418053 62216924&amp;gt;
14:08:41.620529 IP (tos 0x0, ttl 64, id 49197, offset 0, flags [DF], proto TCP (6), length 1450) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x6869 (incorrect (-&amp;gt; 0x2d93), 517866:519264(1398) ack 88208 win 331 &amp;lt;nop,nop,timestamp 62216924 214418053&amp;gt;
14:08:41.620545 IP (tos 0x0, ttl 64, id 49198, offset 0, flags [DF], proto TCP (6), length 86) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6315 (incorrect (-&amp;gt; 0xb44a), 519264:519298(34) ack 88208 win 331 &amp;lt;nop,nop,timestamp 62216924 214418053&amp;gt;
14:08:41.620778 IP (tos 0x0, ttl 59, id 23681, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xd5ec (correct), 88208:88208(0) ack 519298 win 331 &amp;lt;nop,nop,timestamp 214418053 62216924&amp;gt;
14:08:41.621074 IP (tos 0x0, ttl 59, id 23682, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0817 (correct), 88208:88403(195) ack 519298 win 331 &amp;lt;nop,nop,timestamp 214418053 62216924&amp;gt;
14:08:41.621308 IP (tos 0x0, ttl 64, id 49199, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0x8eca), 519298:520606(1308) ack 88403 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.621523 IP (tos 0x0, ttl 59, id 23683, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xbcdf (correct), 88403:88600(197) ack 520606 win 331 &amp;lt;nop,nop,timestamp 214418053 62216925&amp;gt;
14:08:41.621800 IP (tos 0x0, ttl 64, id 49200, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0x84e9), 520606:521914(1308) ack 88600 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.622030 IP (tos 0x0, ttl 59, id 23684, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x9363 (correct), 88600:88847(247) ack 521914 win 331 &amp;lt;nop,nop,timestamp 214418053 62216925&amp;gt;
14:08:41.622255 IP (tos 0x0, ttl 64, id 49201, offset 0, flags [DF], proto TCP (6), length 244) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b3 (incorrect (-&amp;gt; 0x74de), 521914:522106(192) ack 88847 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.622425 IP (tos 0x0, ttl 59, id 23685, offset 0, flags [DF], proto TCP (6), length 277) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x04a0 (correct), 88847:89072(225) ack 522106 win 331 &amp;lt;nop,nop,timestamp 214418053 62216925&amp;gt;
14:08:41.622634 IP (tos 0x0, ttl 64, id 49202, offset 0, flags [DF], proto TCP (6), length 583) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6506 (incorrect (-&amp;gt; 0x9fb8), 522106:522637(531) ack 89072 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.622801 IP (tos 0x0, ttl 59, id 23686, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4d2f (correct), 89072:89089(17) ack 522637 win 331 &amp;lt;nop,nop,timestamp 214418053 62216925&amp;gt;
14:08:41.622944 IP (tos 0x0, ttl 64, id 49203, offset 0, flags [DF], proto TCP (6), length 386) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6441 (incorrect (-&amp;gt; 0xadcd), 522637:522971(334) ack 89089 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.623114 IP (tos 0x0, ttl 59, id 23687, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4ad0 (correct), 89089:89106(17) ack 522971 win 331 &amp;lt;nop,nop,timestamp 214418053 62216925&amp;gt;
14:08:41.623230 IP (tos 0x0, ttl 64, id 49204, offset 0, flags [DF], proto TCP (6), length 339) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6412 (incorrect (-&amp;gt; 0xafdb), 522971:523258(287) ack 89106 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.623373 IP (tos 0x0, ttl 59, id 23688, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x48a0 (correct), 89106:89123(17) ack 523258 win 331 &amp;lt;nop,nop,timestamp 214418053 62216925&amp;gt;
14:08:41.623511 IP (tos 0x0, ttl 64, id 49205, offset 0, flags [DF], proto TCP (6), length 320) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ff (incorrect (-&amp;gt; 0xd961), 523258:523526(268) ack 89123 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.623711 IP (tos 0x0, ttl 59, id 23689, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xeac9 (correct), 89123:89275(152) ack 523526 win 331 &amp;lt;nop,nop,timestamp 214418053 62216925&amp;gt;
14:08:41.624179 IP (tos 0x0, ttl 64, id 49206, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x24aa), 523526:529118(5592) ack 89275 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.624200 IP (tos 0x0, ttl 64, id 49210, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0xdef4), 529118:529970(852) ack 89275 win 331 &amp;lt;nop,nop,timestamp 62216925 214418053&amp;gt;
14:08:41.624520 IP (tos 0x0, ttl 59, id 23690, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xa80f (correct), 89275:89275(0) ack 529970 win 331 &amp;lt;nop,nop,timestamp 214418054 62216925&amp;gt;
14:08:41.628456 IP (tos 0x0, ttl 59, id 23691, offset 0, flags [DF], proto TCP (6), length 316) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xda0b (correct), 89275:89539(264) ack 529970 win 331 &amp;lt;nop,nop,timestamp 214418055 62216925&amp;gt;
14:08:41.628708 IP (tos 0x0, ttl 64, id 49211, offset 0, flags [DF], proto TCP (6), length 320) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ff (incorrect (-&amp;gt; 0x34ca), 529970:530238(268) ack 89539 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.628945 IP (tos 0x0, ttl 59, id 23692, offset 0, flags [DF], proto TCP (6), length 286) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x9507 (correct), 89539:89773(234) ack 530238 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.629248 IP (tos 0x0, ttl 64, id 49212, offset 0, flags [DF], proto TCP (6), length 710) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6585 (incorrect (-&amp;gt; 0x6a9e), 530238:530896(658) ack 89773 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.629522 IP (tos 0x0, ttl 59, id 23693, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xd1d0 (correct), 89773:89953(180) ack 530896 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.629858 IP (tos 0x0, ttl 64, id 49213, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0xbb44), 530896:531268(372) ack 89953 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.630032 IP (tos 0x0, ttl 59, id 23694, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x1d03 (correct), 89953:89970(17) ack 531268 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.630218 IP (tos 0x0, ttl 64, id 49214, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0x996a), 531268:531515(247) ack 89970 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.630411 IP (tos 0x0, ttl 59, id 23695, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x1afb (correct), 89970:89987(17) ack 531515 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.630625 IP (tos 0x0, ttl 64, id 49215, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0x1d55), 531515:531771(256) ack 89987 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.630779 IP (tos 0x0, ttl 59, id 23696, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x18ea (correct), 89987:90004(17) ack 531771 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.630911 IP (tos 0x0, ttl 64, id 49216, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0xb3ab), 531771:532234(463) ack 90004 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.631109 IP (tos 0x0, ttl 59, id 23697, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x160a (correct), 90004:90021(17) ack 532234 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.631231 IP (tos 0x0, ttl 64, id 49217, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0xcf4f), 532234:532487(253) ack 90021 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.631417 IP (tos 0x0, ttl 59, id 23698, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x13fc (correct), 90021:90038(17) ack 532487 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.631534 IP (tos 0x0, ttl 64, id 49218, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0x61aa), 532487:532786(299) ack 90038 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.631720 IP (tos 0x0, ttl 59, id 23699, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x11c0 (correct), 90038:90055(17) ack 532786 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.631843 IP (tos 0x0, ttl 64, id 49219, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0xb054), 532786:532935(149) ack 90055 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.632068 IP (tos 0x0, ttl 59, id 23700, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x9695 (correct), 90055:90250(195) ack 532935 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.632301 IP (tos 0x0, ttl 64, id 49220, offset 0, flags [DF], proto TCP (6), length 1450) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x6869 (incorrect (-&amp;gt; 0xea9b), 532935:534333(1398) ack 90250 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.632315 IP (tos 0x0, ttl 64, id 49221, offset 0, flags [DF], proto TCP (6), length 86) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6315 (incorrect (-&amp;gt; 0x566e), 534333:534367(34) ack 90250 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.632499 IP (tos 0x0, ttl 59, id 23701, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x9310 (correct), 90250:90250(0) ack 534367 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.632753 IP (tos 0x0, ttl 59, id 23702, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x8f3a (correct), 90250:90445(195) ack 534367 win 331 &amp;lt;nop,nop,timestamp 214418055 62216927&amp;gt;
14:08:41.632972 IP (tos 0x0, ttl 64, id 49222, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0x15ef), 534367:535675(1308) ack 90445 win 331 &amp;lt;nop,nop,timestamp 62216927 214418055&amp;gt;
14:08:41.633201 IP (tos 0x0, ttl 59, id 23703, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4403 (correct), 90445:90642(197) ack 535675 win 331 &amp;lt;nop,nop,timestamp 214418056 62216927&amp;gt;
14:08:41.633417 IP (tos 0x0, ttl 64, id 49223, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0x0c0d), 535675:536983(1308) ack 90642 win 331 &amp;lt;nop,nop,timestamp 62216927 214418056&amp;gt;
14:08:41.633642 IP (tos 0x0, ttl 59, id 23704, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x1a87 (correct), 90642:90889(247) ack 536983 win 331 &amp;lt;nop,nop,timestamp 214418056 62216927&amp;gt;
14:08:41.633834 IP (tos 0x0, ttl 64, id 49224, offset 0, flags [DF], proto TCP (6), length 244) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b3 (incorrect (-&amp;gt; 0x16e7), 536983:537175(192) ack 90889 win 331 &amp;lt;nop,nop,timestamp 62216927 214418056&amp;gt;
14:08:41.634011 IP (tos 0x0, ttl 59, id 23705, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x94ec (correct), 90889:91069(180) ack 537175 win 331 &amp;lt;nop,nop,timestamp 214418056 62216927&amp;gt;
14:08:41.634245 IP (tos 0x0, ttl 64, id 49225, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0x8e4f), 537175:537547(372) ack 91069 win 331 &amp;lt;nop,nop,timestamp 62216928 214418056&amp;gt;
14:08:41.634415 IP (tos 0x0, ttl 59, id 23706, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xf01d (correct), 91069:91086(17) ack 537547 win 331 &amp;lt;nop,nop,timestamp 214418056 62216928&amp;gt;
14:08:41.634535 IP (tos 0x0, ttl 64, id 49226, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0x6c75), 537547:537794(247) ack 91086 win 331 &amp;lt;nop,nop,timestamp 62216928 214418056&amp;gt;
14:08:41.634688 IP (tos 0x0, ttl 59, id 23707, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6d16 (correct), 91086:91103(17) ack 537794 win 331 &amp;lt;nop,nop,timestamp 214418056 62216928&amp;gt;
14:08:41.634838 IP (tos 0x0, ttl 64, id 49227, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0xf0de), 537794:538050(256) ack 91103 win 331 &amp;lt;nop,nop,timestamp 62216928 214418056&amp;gt;
14:08:41.635013 IP (tos 0x0, ttl 59, id 23708, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6b05 (correct), 91103:91120(17) ack 538050 win 331 &amp;lt;nop,nop,timestamp 214418056 62216928&amp;gt;
14:08:41.635171 IP (tos 0x0, ttl 64, id 49228, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0x05b7), 538050:538513(463) ack 91120 win 331 &amp;lt;nop,nop,timestamp 62216928 214418056&amp;gt;
14:08:41.635317 IP (tos 0x0, ttl 59, id 23709, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6824 (correct), 91120:91137(17) ack 538513 win 331 &amp;lt;nop,nop,timestamp 214418057 62216928&amp;gt;
14:08:41.635474 IP (tos 0x0, ttl 64, id 49229, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0x215a), 538513:538766(253) ack 91137 win 331 &amp;lt;nop,nop,timestamp 62216928 214418057&amp;gt;
14:08:41.635665 IP (tos 0x0, ttl 59, id 23710, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6616 (correct), 91137:91154(17) ack 538766 win 331 &amp;lt;nop,nop,timestamp 214418057 62216928&amp;gt;
14:08:41.635819 IP (tos 0x0, ttl 64, id 49230, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0xb3b4), 538766:539065(299) ack 91154 win 331 &amp;lt;nop,nop,timestamp 62216928 214418057&amp;gt;
14:08:41.635970 IP (tos 0x0, ttl 59, id 23711, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x63da (correct), 91154:91171(17) ack 539065 win 331 &amp;lt;nop,nop,timestamp 214418057 62216928&amp;gt;
14:08:41.636134 IP (tos 0x0, ttl 64, id 49231, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0x025f), 539065:539214(149) ack 91171 win 331 &amp;lt;nop,nop,timestamp 62216928 214418057&amp;gt;
14:08:41.636341 IP (tos 0x0, ttl 59, id 23712, offset 0, flags [DF], proto TCP (6), length 198) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xfcc1 (correct), 91171:91317(146) ack 539214 win 331 &amp;lt;nop,nop,timestamp 214418057 62216928&amp;gt;
14:08:41.636595 IP (tos 0x0, ttl 64, id 49232, offset 0, flags [DF], proto TCP (6), length 265) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63c8 (incorrect (-&amp;gt; 0xaf4d), 539214:539427(213) ack 91317 win 331 &amp;lt;nop,nop,timestamp 62216928 214418057&amp;gt;
14:08:41.636798 IP (tos 0x0, ttl 59, id 23713, offset 0, flags [DF], proto TCP (6), length 202) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x3850 (correct), 91317:91467(150) ack 539427 win 331 &amp;lt;nop,nop,timestamp 214418057 62216928&amp;gt;
14:08:41.637055 IP (tos 0x0, ttl 64, id 49233, offset 0, flags [DF], proto TCP (6), length 605) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x651c (incorrect (-&amp;gt; 0x9488), 539427:539980(553) ack 91467 win 331 &amp;lt;nop,nop,timestamp 62216928 214418057&amp;gt;
14:08:41.637297 IP (tos 0x0, ttl 59, id 23714, offset 0, flags [DF], proto TCP (6), length 500) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xfbe8 (correct), 91467:91915(448) ack 539980 win 331 &amp;lt;nop,nop,timestamp 214418057 62216928&amp;gt;
14:08:41.637630 IP (tos 0x0, ttl 64, id 49234, offset 0, flags [DF], proto TCP (6), length 238) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ad (incorrect (-&amp;gt; 0xf759), 539980:540166(186) ack 91915 win 331 &amp;lt;nop,nop,timestamp 62216928 214418057&amp;gt;
14:08:41.637822 IP (tos 0x0, ttl 59, id 23715, offset 0, flags [DF], proto TCP (6), length 483) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xb936 (correct), 91915:92346(431) ack 540166 win 331 &amp;lt;nop,nop,timestamp 214418057 62216928&amp;gt;
14:08:41.638205 IP (tos 0x0, ttl 64, id 49235, offset 0, flags [DF], proto TCP (6), length 238) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ad (incorrect (-&amp;gt; 0x3fb3), 540166:540352(186) ack 92346 win 331 &amp;lt;nop,nop,timestamp 62216929 214418057&amp;gt;
14:08:41.638385 IP (tos 0x0, ttl 59, id 23716, offset 0, flags [DF], proto TCP (6), length 322) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x7e21 (correct), 92346:92616(270) ack 540352 win 331 &amp;lt;nop,nop,timestamp 214418057 62216929&amp;gt;
14:08:41.638650 IP (tos 0x0, ttl 64, id 49236, offset 0, flags [DF], proto TCP (6), length 253) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63bc (incorrect (-&amp;gt; 0xbc7c), 540352:540553(201) ack 92616 win 331 &amp;lt;nop,nop,timestamp 62216929 214418057&amp;gt;
14:08:41.638841 IP (tos 0x0, ttl 59, id 23717, offset 0, flags [DF], proto TCP (6), length 550) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x679f (correct), 92616:93114(498) ack 540553 win 331 &amp;lt;nop,nop,timestamp 214418057 62216929&amp;gt;
14:08:41.639128 IP (tos 0x0, ttl 64, id 49237, offset 0, flags [DF], proto TCP (6), length 588) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x650b (incorrect (-&amp;gt; 0xe1b6), 540553:541089(536) ack 93114 win 331 &amp;lt;nop,nop,timestamp 62216929 214418057&amp;gt;
14:08:41.639363 IP (tos 0x0, ttl 59, id 23718, offset 0, flags [DF], proto TCP (6), length 306) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4434 (correct), 93114:93368(254) ack 541089 win 331 &amp;lt;nop,nop,timestamp 214418058 62216929&amp;gt;
14:08:41.639620 IP (tos 0x0, ttl 64, id 49238, offset 0, flags [DF], proto TCP (6), length 341) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6414 (incorrect (-&amp;gt; 0xa2e0), 541089:541378(289) ack 93368 win 331 &amp;lt;nop,nop,timestamp 62216929 214418058&amp;gt;
14:08:41.639797 IP (tos 0x0, ttl 59, id 23719, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x337c (correct), 93368:93621(253) ack 541378 win 331 &amp;lt;nop,nop,timestamp 214418058 62216929&amp;gt;
14:08:41.640004 IP (tos 0x0, ttl 64, id 49239, offset 0, flags [DF], proto TCP (6), length 341) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6414 (incorrect (-&amp;gt; 0xa0be), 541378:541667(289) ack 93621 win 331 &amp;lt;nop,nop,timestamp 62216929 214418058&amp;gt;
14:08:41.640172 IP (tos 0x0, ttl 59, id 23720, offset 0, flags [DF], proto TCP (6), length 304) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x9482 (correct), 93621:93873(252) ack 541667 win 331 &amp;lt;nop,nop,timestamp 214418058 62216929&amp;gt;
14:08:41.640353 IP (tos 0x0, ttl 64, id 49240, offset 0, flags [DF], proto TCP (6), length 388) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6443 (incorrect (-&amp;gt; 0x9691), 541667:542003(336) ack 93873 win 331 &amp;lt;nop,nop,timestamp 62216929 214418058&amp;gt;
14:08:41.640538 IP (tos 0x0, ttl 59, id 23721, offset 0, flags [DF], proto TCP (6), length 307) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xaac7 (correct), 93873:94128(255) ack 542003 win 331 &amp;lt;nop,nop,timestamp 214418058 62216929&amp;gt;
14:08:41.640715 IP (tos 0x0, ttl 64, id 49241, offset 0, flags [DF], proto TCP (6), length 391) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6446 (incorrect (-&amp;gt; 0xaed6), 542003:542342(339) ack 94128 win 331 &amp;lt;nop,nop,timestamp 62216930 214418058&amp;gt;
14:08:41.640902 IP (tos 0x0, ttl 59, id 23722, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x13cb (correct), 94128:94381(253) ack 542342 win 331 &amp;lt;nop,nop,timestamp 214418058 62216930&amp;gt;
14:08:41.641083 IP (tos 0x0, ttl 64, id 49242, offset 0, flags [DF], proto TCP (6), length 389) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6444 (incorrect (-&amp;gt; 0x19d7), 542342:542679(337) ack 94381 win 331 &amp;lt;nop,nop,timestamp 62216930 214418058&amp;gt;
14:08:41.641258 IP (tos 0x0, ttl 59, id 23723, offset 0, flags [DF], proto TCP (6), length 302) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xc805 (correct), 94381:94631(250) ack 542679 win 331 &amp;lt;nop,nop,timestamp 214418058 62216930&amp;gt;
14:08:41.641439 IP (tos 0x0, ttl 64, id 49243, offset 0, flags [DF], proto TCP (6), length 386) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6441 (incorrect (-&amp;gt; 0xd00c), 542679:543013(334) ack 94631 win 331 &amp;lt;nop,nop,timestamp 62216930 214418058&amp;gt;
14:08:41.641624 IP (tos 0x0, ttl 59, id 23724, offset 0, flags [DF], proto TCP (6), length 318) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x9417 (correct), 94631:94897(266) ack 543013 win 331 &amp;lt;nop,nop,timestamp 214418058 62216930&amp;gt;
14:08:41.641799 IP (tos 0x0, ttl 64, id 49244, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b8 (incorrect (-&amp;gt; 0x1e72), 543013:543210(197) ack 94897 win 331 &amp;lt;nop,nop,timestamp 62216930 214418058&amp;gt;
14:08:41.641968 IP (tos 0x0, ttl 59, id 23725, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x154e (correct), 94897:95049(152) ack 543210 win 331 &amp;lt;nop,nop,timestamp 214418058 62216930&amp;gt;
14:08:41.642289 IP (tos 0x0, ttl 64, id 49245, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0xc12d), 543210:548802(5592) ack 95049 win 331 &amp;lt;nop,nop,timestamp 62216930 214418058&amp;gt;
14:08:41.642303 IP (tos 0x0, ttl 64, id 49249, offset 0, flags [DF], proto TCP (6), length 904) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6647 (incorrect (-&amp;gt; 0xc240), 548802:549654(852) ack 95049 win 331 &amp;lt;nop,nop,timestamp 62216930 214418058&amp;gt;
14:08:41.643213 IP (tos 0x0, ttl 59, id 23726, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x4494 (correct), 95049:95049(0) ack 549654 win 331 &amp;lt;nop,nop,timestamp 214418058 62216930&amp;gt;
14:08:41.647235 IP (tos 0x0, ttl 59, id 23727, offset 0, flags [DF], proto TCP (6), length 639) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x7be1 (correct), 95049:95636(587) ack 549654 win 331 &amp;lt;nop,nop,timestamp 214418059 62216930&amp;gt;
14:08:41.647765 IP (tos 0x0, ttl 64, id 49250, offset 0, flags [DF], proto TCP (6), length 572) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64fb (incorrect (-&amp;gt; 0x3551), 549654:550174(520) ack 95636 win 331 &amp;lt;nop,nop,timestamp 62216931 214418059&amp;gt;
14:08:41.648117 IP (tos 0x0, ttl 59, id 23728, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xe736 (correct), 95636:95788(152) ack 550174 win 331 &amp;lt;nop,nop,timestamp 214418059 62216931&amp;gt;
14:08:41.648551 IP (tos 0x0, ttl 64, id 49251, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x9b10), 550174:555766(5592) ack 95788 win 331 &amp;lt;nop,nop,timestamp 62216931 214418059&amp;gt;
14:08:41.648573 IP (tos 0x0, ttl 64, id 49255, offset 0, flags [DF], proto TCP (6), length 910) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x664d (incorrect (-&amp;gt; 0xc269), 555766:556624(858) ack 95788 win 331 &amp;lt;nop,nop,timestamp 62216931 214418059&amp;gt;
14:08:41.648871 IP (tos 0x0, ttl 59, id 23729, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x2674 (correct), 95788:95788(0) ack 556624 win 331 &amp;lt;nop,nop,timestamp 214418060 62216931&amp;gt;
14:08:41.652861 IP (tos 0x0, ttl 59, id 23730, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xc96a (correct), 95788:95940(152) ack 556624 win 331 &amp;lt;nop,nop,timestamp 214418061 62216931&amp;gt;
14:08:41.653267 IP (tos 0x0, ttl 64, id 49256, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x8142), 556624:562216(5592) ack 95940 win 331 &amp;lt;nop,nop,timestamp 62216933 214418061&amp;gt;
14:08:41.653286 IP (tos 0x0, ttl 64, id 49260, offset 0, flags [DF], proto TCP (6), length 910) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x664d (incorrect (-&amp;gt; 0xa699), 562216:563074(858) ack 95940 win 331 &amp;lt;nop,nop,timestamp 62216933 214418061&amp;gt;
14:08:41.653663 IP (tos 0x0, ttl 59, id 23731, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x0ca7 (correct), 95940:95940(0) ack 563074 win 331 &amp;lt;nop,nop,timestamp 214418061 62216933&amp;gt;
14:08:41.657643 IP (tos 0x0, ttl 59, id 23732, offset 0, flags [DF], proto TCP (6), length 157) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x55f9 (correct), 95940:96045(105) ack 563074 win 331 &amp;lt;nop,nop,timestamp 214418062 62216933&amp;gt;
14:08:41.657911 IP (tos 0x0, ttl 64, id 49261, offset 0, flags [DF], proto TCP (6), length 1000) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x66a7 (incorrect (-&amp;gt; 0xc462), 563074:564022(948) ack 96045 win 331 &amp;lt;nop,nop,timestamp 62216934 214418062&amp;gt;
14:08:41.658233 IP (tos 0x0, ttl 59, id 23733, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xa37f (correct), 96045:96197(152) ack 564022 win 331 &amp;lt;nop,nop,timestamp 214418062 62216934&amp;gt;
14:08:41.658687 IP (tos 0x0, ttl 64, id 49262, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x6359), 564022:569614(5592) ack 96197 win 331 &amp;lt;nop,nop,timestamp 62216934 214418062&amp;gt;
14:08:41.658706 IP (tos 0x0, ttl 64, id 49266, offset 0, flags [DF], proto TCP (6), length 910) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x664d (incorrect (-&amp;gt; 0x84ac), 569614:570472(858) ack 96197 win 331 &amp;lt;nop,nop,timestamp 62216934 214418062&amp;gt;
14:08:41.659635 IP (tos 0x0, ttl 59, id 23734, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xeebc (correct), 96197:96197(0) ack 570472 win 331 &amp;lt;nop,nop,timestamp 214418063 62216934&amp;gt;
14:08:41.663576 IP (tos 0x0, ttl 59, id 23735, offset 0, flags [DF], proto TCP (6), length 197) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xc4db (correct), 96197:96342(145) ack 570472 win 331 &amp;lt;nop,nop,timestamp 214418064 62216934&amp;gt;
14:08:41.663844 IP (tos 0x0, ttl 64, id 49267, offset 0, flags [DF], proto TCP (6), length 1154) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6741 (incorrect (-&amp;gt; 0xe830), 570472:571574(1102) ack 96342 win 331 &amp;lt;nop,nop,timestamp 62216935 214418064&amp;gt;
14:08:41.664245 IP (tos 0x0, ttl 59, id 23736, offset 0, flags [DF], proto TCP (6), length 286) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x54e5 (correct), 96342:96576(234) ack 571574 win 331 &amp;lt;nop,nop,timestamp 214418064 62216935&amp;gt;
14:08:41.664503 IP (tos 0x0, ttl 64, id 49268, offset 0, flags [DF], proto TCP (6), length 710) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6585 (incorrect (-&amp;gt; 0xed4a), 571574:572232(658) ack 96576 win 331 &amp;lt;nop,nop,timestamp 62216935 214418064&amp;gt;
14:08:41.664755 IP (tos 0x0, ttl 59, id 23737, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x87b6 (correct), 96576:96756(180) ack 572232 win 331 &amp;lt;nop,nop,timestamp 214418064 62216935&amp;gt;
14:08:41.665045 IP (tos 0x0, ttl 64, id 49269, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0x3be5), 572232:572604(372) ack 96756 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.665236 IP (tos 0x0, ttl 59, id 23738, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x9de5 (correct), 96756:96773(17) ack 572604 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.665423 IP (tos 0x0, ttl 64, id 49270, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0x1a0b), 572604:572851(247) ack 96773 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.665572 IP (tos 0x0, ttl 59, id 23739, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x9bdd (correct), 96773:96790(17) ack 572851 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.665751 IP (tos 0x0, ttl 64, id 49271, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0x1f74), 572851:573107(256) ack 96790 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.665894 IP (tos 0x0, ttl 59, id 23740, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x99cc (correct), 96790:96807(17) ack 573107 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.666025 IP (tos 0x0, ttl 64, id 49272, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0x354c), 573107:573570(463) ack 96807 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.666174 IP (tos 0x0, ttl 59, id 23741, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x96ec (correct), 96807:96824(17) ack 573570 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.666310 IP (tos 0x0, ttl 64, id 49273, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0x4ff0), 573570:573823(253) ack 96824 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.666453 IP (tos 0x0, ttl 59, id 23742, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x94de (correct), 96824:96841(17) ack 573823 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.666584 IP (tos 0x0, ttl 64, id 49274, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0xe74b), 573823:574122(299) ack 96841 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.666727 IP (tos 0x0, ttl 59, id 23743, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x92a2 (correct), 96841:96858(17) ack 574122 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.666864 IP (tos 0x0, ttl 64, id 49275, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0x30f5), 574122:574271(149) ack 96858 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.667053 IP (tos 0x0, ttl 59, id 23744, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x5478 (correct), 96858:97053(195) ack 574271 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.667290 IP (tos 0x0, ttl 64, id 49276, offset 0, flags [DF], proto TCP (6), length 1450) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x6869 (incorrect (-&amp;gt; 0x2e3c), 574271:575669(1398) ack 97053 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.667304 IP (tos 0x0, ttl 64, id 49277, offset 0, flags [DF], proto TCP (6), length 86) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6315 (incorrect (-&amp;gt; 0xd750), 575669:575703(34) ack 97053 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.667719 IP (tos 0x0, ttl 59, id 23745, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xd6f2 (correct), 97053:97053(0) ack 575703 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.668025 IP (tos 0x0, ttl 59, id 23746, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4d1d (correct), 97053:97248(195) ack 575703 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.668281 IP (tos 0x0, ttl 64, id 49278, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0x54d1), 575703:577011(1308) ack 97248 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.668504 IP (tos 0x0, ttl 59, id 23747, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x01e7 (correct), 97248:97445(197) ack 577011 win 331 &amp;lt;nop,nop,timestamp 214418064 62216936&amp;gt;
14:08:41.668749 IP (tos 0x0, ttl 64, id 49279, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0x4af0), 577011:578319(1308) ack 97445 win 331 &amp;lt;nop,nop,timestamp 62216936 214418064&amp;gt;
14:08:41.668982 IP (tos 0x0, ttl 59, id 23748, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xda61 (correct), 97445:97692(247) ack 578319 win 331 &amp;lt;nop,nop,timestamp 214418065 62216936&amp;gt;
14:08:41.669230 IP (tos 0x0, ttl 64, id 49280, offset 0, flags [DF], proto TCP (6), length 244) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b3 (incorrect (-&amp;gt; 0x9787), 578319:578511(192) ack 97692 win 331 &amp;lt;nop,nop,timestamp 62216936 214418065&amp;gt;
14:08:41.669406 IP (tos 0x0, ttl 59, id 23749, offset 0, flags [DF], proto TCP (6), length 277) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4b9e (correct), 97692:97917(225) ack 578511 win 331 &amp;lt;nop,nop,timestamp 214418065 62216936&amp;gt;
14:08:41.669621 IP (tos 0x0, ttl 64, id 49281, offset 0, flags [DF], proto TCP (6), length 583) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6506 (incorrect (-&amp;gt; 0x43e0), 578511:579042(531) ack 97917 win 331 &amp;lt;nop,nop,timestamp 62216936 214418065&amp;gt;
14:08:41.669785 IP (tos 0x0, ttl 59, id 23750, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x7035 (correct), 97917:97934(17) ack 579042 win 331 &amp;lt;nop,nop,timestamp 214418065 62216936&amp;gt;
14:08:41.669927 IP (tos 0x0, ttl 64, id 49282, offset 0, flags [DF], proto TCP (6), length 386) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6441 (incorrect (-&amp;gt; 0x51f6), 579042:579376(334) ack 97934 win 331 &amp;lt;nop,nop,timestamp 62216936 214418065&amp;gt;
14:08:41.670084 IP (tos 0x0, ttl 59, id 23751, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6dd6 (correct), 97934:97951(17) ack 579376 win 331 &amp;lt;nop,nop,timestamp 214418065 62216936&amp;gt;
14:08:41.670216 IP (tos 0x0, ttl 64, id 49283, offset 0, flags [DF], proto TCP (6), length 339) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6412 (incorrect (-&amp;gt; 0xd388), 579376:579663(287) ack 97951 win 331 &amp;lt;nop,nop,timestamp 62216937 214418065&amp;gt;
14:08:41.670363 IP (tos 0x0, ttl 59, id 23752, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x6ba5 (correct), 97951:97968(17) ack 579663 win 331 &amp;lt;nop,nop,timestamp 214418065 62216937&amp;gt;
14:08:41.670489 IP (tos 0x0, ttl 64, id 49284, offset 0, flags [DF], proto TCP (6), length 320) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ff (incorrect (-&amp;gt; 0x7d88), 579663:579931(268) ack 97968 win 331 &amp;lt;nop,nop,timestamp 62216937 214418065&amp;gt;
14:08:41.670685 IP (tos 0x0, ttl 59, id 23753, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x27d1 (correct), 97968:98120(152) ack 579931 win 331 &amp;lt;nop,nop,timestamp 214418065 62216937&amp;gt;
14:08:41.671105 IP (tos 0x0, ttl 64, id 49285, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0x1dab), 579931:585523(5592) ack 98120 win 331 &amp;lt;nop,nop,timestamp 62216937 214418065&amp;gt;
14:08:41.671122 IP (tos 0x0, ttl 64, id 49289, offset 0, flags [DF], proto TCP (6), length 910) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x664d (incorrect (-&amp;gt; 0x23e3), 585523:586381(858) ack 98120 win 331 &amp;lt;nop,nop,timestamp 62216937 214418065&amp;gt;
14:08:41.671409 IP (tos 0x0, ttl 59, id 23754, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0xa90f (correct), 98120:98120(0) ack 586381 win 331 &amp;lt;nop,nop,timestamp 214418065 62216937&amp;gt;
14:08:41.675332 IP (tos 0x0, ttl 59, id 23755, offset 0, flags [DF], proto TCP (6), length 316) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x170e (correct), 98120:98384(264) ack 586381 win 331 &amp;lt;nop,nop,timestamp 214418066 62216937&amp;gt;
14:08:41.675564 IP (tos 0x0, ttl 64, id 49290, offset 0, flags [DF], proto TCP (6), length 320) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ff (incorrect (-&amp;gt; 0xfaca), 586381:586649(268) ack 98384 win 331 &amp;lt;nop,nop,timestamp 62216938 214418066&amp;gt;
14:08:41.675796 IP (tos 0x0, ttl 59, id 23756, offset 0, flags [DF], proto TCP (6), length 286) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xdc00 (correct), 98384:98618(234) ack 586649 win 331 &amp;lt;nop,nop,timestamp 214418066 62216938&amp;gt;
14:08:41.676038 IP (tos 0x0, ttl 64, id 49291, offset 0, flags [DF], proto TCP (6), length 710) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6585 (incorrect (-&amp;gt; 0x8f3a), 586649:587307(658) ack 98618 win 331 &amp;lt;nop,nop,timestamp 62216938 214418066&amp;gt;
14:08:41.676290 IP (tos 0x0, ttl 59, id 23757, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0ed4 (correct), 98618:98798(180) ack 587307 win 331 &amp;lt;nop,nop,timestamp 214418066 62216938&amp;gt;
14:08:41.676554 IP (tos 0x0, ttl 64, id 49292, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0xdde8), 587307:587679(372) ack 98798 win 331 &amp;lt;nop,nop,timestamp 62216938 214418066&amp;gt;
14:08:41.676722 IP (tos 0x0, ttl 59, id 23758, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x4004 (correct), 98798:98815(17) ack 587679 win 331 &amp;lt;nop,nop,timestamp 214418066 62216938&amp;gt;
14:08:41.676858 IP (tos 0x0, ttl 64, id 49293, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0xbc0e), 587679:587926(247) ack 98815 win 331 &amp;lt;nop,nop,timestamp 62216938 214418066&amp;gt;
14:08:41.677016 IP (tos 0x0, ttl 59, id 23759, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x3dfb (correct), 98815:98832(17) ack 587926 win 331 &amp;lt;nop,nop,timestamp 214418067 62216938&amp;gt;
14:08:41.677203 IP (tos 0x0, ttl 64, id 49294, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0xc176), 587926:588182(256) ack 98832 win 331 &amp;lt;nop,nop,timestamp 62216938 214418067&amp;gt;
14:08:41.677356 IP (tos 0x0, ttl 59, id 23760, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x3bea (correct), 98832:98849(17) ack 588182 win 331 &amp;lt;nop,nop,timestamp 214418067 62216938&amp;gt;
14:08:41.677489 IP (tos 0x0, ttl 64, id 49295, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0xd74e), 588182:588645(463) ack 98849 win 331 &amp;lt;nop,nop,timestamp 62216938 214418067&amp;gt;
14:08:41.677652 IP (tos 0x0, ttl 59, id 23761, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x390a (correct), 98849:98866(17) ack 588645 win 331 &amp;lt;nop,nop,timestamp 214418067 62216938&amp;gt;
14:08:41.677842 IP (tos 0x0, ttl 64, id 49296, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0xf1f1), 588645:588898(253) ack 98866 win 331 &amp;lt;nop,nop,timestamp 62216939 214418067&amp;gt;
14:08:41.677996 IP (tos 0x0, ttl 59, id 23762, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x36fb (correct), 98866:98883(17) ack 588898 win 331 &amp;lt;nop,nop,timestamp 214418067 62216939&amp;gt;
14:08:41.678135 IP (tos 0x0, ttl 64, id 49297, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0x894d), 588898:589197(299) ack 98883 win 331 &amp;lt;nop,nop,timestamp 62216939 214418067&amp;gt;
14:08:41.678297 IP (tos 0x0, ttl 59, id 23763, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x34bf (correct), 98883:98900(17) ack 589197 win 331 &amp;lt;nop,nop,timestamp 214418067 62216939&amp;gt;
14:08:41.678462 IP (tos 0x0, ttl 64, id 49298, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0xd2f6), 589197:589346(149) ack 98900 win 331 &amp;lt;nop,nop,timestamp 62216939 214418067&amp;gt;
14:08:41.678653 IP (tos 0x0, ttl 59, id 23764, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xdb94 (correct), 98900:99095(195) ack 589346 win 331 &amp;lt;nop,nop,timestamp 214418067 62216939&amp;gt;
14:08:41.678965 IP (tos 0x0, ttl 64, id 49299, offset 0, flags [DF], proto TCP (6), length 1450) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x6869 (incorrect (-&amp;gt; 0xeb3d), 589346:590744(1398) ack 99095 win 331 &amp;lt;nop,nop,timestamp 62216939 214418067&amp;gt;
14:08:41.678987 IP (tos 0x0, ttl 64, id 49300, offset 0, flags [DF], proto TCP (6), length 86) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6315 (incorrect (-&amp;gt; 0x796d), 590744:590778(34) ack 99095 win 331 &amp;lt;nop,nop,timestamp 62216939 214418067&amp;gt;
14:08:41.679440 IP (tos 0x0, ttl 59, id 23765, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x940e (correct), 99095:99095(0) ack 590778 win 331 &amp;lt;nop,nop,timestamp 214418068 62216939&amp;gt;
14:08:41.679719 IP (tos 0x0, ttl 59, id 23766, offset 0, flags [DF], proto TCP (6), length 247) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xd438 (correct), 99095:99290(195) ack 590778 win 331 &amp;lt;nop,nop,timestamp 214418068 62216939&amp;gt;
14:08:41.679991 IP (tos 0x0, ttl 64, id 49301, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0xdbec), 590778:592086(1308) ack 99290 win 331 &amp;lt;nop,nop,timestamp 62216939 214418068&amp;gt;
14:08:41.680216 IP (tos 0x0, ttl 59, id 23767, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x8902 (correct), 99290:99487(197) ack 592086 win 331 &amp;lt;nop,nop,timestamp 214418068 62216939&amp;gt;
14:08:41.680456 IP (tos 0x0, ttl 64, id 49302, offset 0, flags [DF], proto TCP (6), length 1360) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x680f (incorrect (-&amp;gt; 0xd20b), 592086:593394(1308) ack 99487 win 331 &amp;lt;nop,nop,timestamp 62216939 214418068&amp;gt;
14:08:41.680681 IP (tos 0x0, ttl 59, id 23768, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x617e (correct), 99487:99734(247) ack 593394 win 331 &amp;lt;nop,nop,timestamp 214418068 62216939&amp;gt;
14:08:41.680896 IP (tos 0x0, ttl 64, id 49303, offset 0, flags [DF], proto TCP (6), length 244) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b3 (incorrect (-&amp;gt; 0x3989), 593394:593586(192) ack 99734 win 331 &amp;lt;nop,nop,timestamp 62216939 214418068&amp;gt;
14:08:41.681087 IP (tos 0x0, ttl 59, id 23769, offset 0, flags [DF], proto TCP (6), length 232) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xd1ed (correct), 99734:99914(180) ack 593586 win 331 &amp;lt;nop,nop,timestamp 214418068 62216939&amp;gt;
14:08:41.681341 IP (tos 0x0, ttl 64, id 49304, offset 0, flags [DF], proto TCP (6), length 424) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6467 (incorrect (-&amp;gt; 0xb0f2), 593586:593958(372) ack 99914 win 331 &amp;lt;nop,nop,timestamp 62216939 214418068&amp;gt;
14:08:41.681548 IP (tos 0x0, ttl 59, id 23770, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x131e (correct), 99914:99931(17) ack 593958 win 331 &amp;lt;nop,nop,timestamp 214418068 62216939&amp;gt;
14:08:41.681691 IP (tos 0x0, ttl 64, id 49305, offset 0, flags [DF], proto TCP (6), length 299) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ea (incorrect (-&amp;gt; 0x8f18), 593958:594205(247) ack 99931 win 331 &amp;lt;nop,nop,timestamp 62216939 214418068&amp;gt;
14:08:41.681836 IP (tos 0x0, ttl 59, id 23771, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x1116 (correct), 99931:99948(17) ack 594205 win 331 &amp;lt;nop,nop,timestamp 214418068 62216939&amp;gt;
14:08:41.682011 IP (tos 0x0, ttl 64, id 49306, offset 0, flags [DF], proto TCP (6), length 308) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f3 (incorrect (-&amp;gt; 0x9481), 594205:594461(256) ack 99948 win 331 &amp;lt;nop,nop,timestamp 62216939 214418068&amp;gt;
14:08:41.682163 IP (tos 0x0, ttl 59, id 23772, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0f05 (correct), 99948:99965(17) ack 594461 win 331 &amp;lt;nop,nop,timestamp 214418068 62216939&amp;gt;
14:08:41.682322 IP (tos 0x0, ttl 64, id 49307, offset 0, flags [DF], proto TCP (6), length 515) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64c2 (incorrect (-&amp;gt; 0xaa58), 594461:594924(463) ack 99965 win 331 &amp;lt;nop,nop,timestamp 62216940 214418068&amp;gt;
14:08:41.682476 IP (tos 0x0, ttl 59, id 23773, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0c24 (correct), 99965:99982(17) ack 594924 win 331 &amp;lt;nop,nop,timestamp 214418068 62216940&amp;gt;
14:08:41.682595 IP (tos 0x0, ttl 64, id 49308, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63f0 (incorrect (-&amp;gt; 0xc4fc), 594924:595177(253) ack 99982 win 331 &amp;lt;nop,nop,timestamp 62216940 214418068&amp;gt;
14:08:41.682772 IP (tos 0x0, ttl 59, id 23774, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0a16 (correct), 99982:99999(17) ack 595177 win 331 &amp;lt;nop,nop,timestamp 214418068 62216940&amp;gt;
14:08:41.682907 IP (tos 0x0, ttl 64, id 49309, offset 0, flags [DF], proto TCP (6), length 351) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x641e (incorrect (-&amp;gt; 0x5c58), 595177:595476(299) ack 99999 win 331 &amp;lt;nop,nop,timestamp 62216940 214418068&amp;gt;
14:08:41.683095 IP (tos 0x0, ttl 59, id 23775, offset 0, flags [DF], proto TCP (6), length 69) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x07da (correct), 99999:100016(17) ack 595476 win 331 &amp;lt;nop,nop,timestamp 214418068 62216940&amp;gt;
14:08:41.683230 IP (tos 0x0, ttl 64, id 49310, offset 0, flags [DF], proto TCP (6), length 201) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6388 (incorrect (-&amp;gt; 0xa601), 595476:595625(149) ack 100016 win 331 &amp;lt;nop,nop,timestamp 62216940 214418068&amp;gt;
14:08:41.683426 IP (tos 0x0, ttl 59, id 23776, offset 0, flags [DF], proto TCP (6), length 198) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x43c1 (correct), 100016:100162(146) ack 595625 win 331 &amp;lt;nop,nop,timestamp 214418068 62216940&amp;gt;
14:08:41.683634 IP (tos 0x0, ttl 64, id 49311, offset 0, flags [DF], proto TCP (6), length 265) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63c8 (incorrect (-&amp;gt; 0x52f0), 595625:595838(213) ack 100162 win 331 &amp;lt;nop,nop,timestamp 62216940 214418068&amp;gt;
14:08:41.683821 IP (tos 0x0, ttl 59, id 23777, offset 0, flags [DF], proto TCP (6), length 202) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x7f4f (correct), 100162:100312(150) ack 595838 win 331 &amp;lt;nop,nop,timestamp 214418068 62216940&amp;gt;
14:08:41.684046 IP (tos 0x0, ttl 64, id 49312, offset 0, flags [DF], proto TCP (6), length 605) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x651c (incorrect (-&amp;gt; 0x382b), 595838:596391(553) ack 100312 win 331 &amp;lt;nop,nop,timestamp 62216940 214418068&amp;gt;
14:08:41.684300 IP (tos 0x0, ttl 59, id 23778, offset 0, flags [DF], proto TCP (6), length 500) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x3aea (correct), 100312:100760(448) ack 596391 win 331 &amp;lt;nop,nop,timestamp 214418068 62216940&amp;gt;
14:08:41.684716 IP (tos 0x0, ttl 64, id 49313, offset 0, flags [DF], proto TCP (6), length 238) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ad (incorrect (-&amp;gt; 0x3e59), 596391:596577(186) ack 100760 win 331 &amp;lt;nop,nop,timestamp 62216940 214418068&amp;gt;
14:08:41.684908 IP (tos 0x0, ttl 59, id 23779, offset 0, flags [DF], proto TCP (6), length 483) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x022d (correct), 100760:101191(431) ack 596577 win 331 &amp;lt;nop,nop,timestamp 214418069 62216940&amp;gt;
14:08:41.685229 IP (tos 0x0, ttl 64, id 49314, offset 0, flags [DF], proto TCP (6), length 238) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63ad (incorrect (-&amp;gt; 0x86b2), 596577:596763(186) ack 101191 win 331 &amp;lt;nop,nop,timestamp 62216940 214418069&amp;gt;
14:08:41.685430 IP (tos 0x0, ttl 59, id 23780, offset 0, flags [DF], proto TCP (6), length 322) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xbd22 (correct), 101191:101461(270) ack 596763 win 331 &amp;lt;nop,nop,timestamp 214418069 62216940&amp;gt;
14:08:41.685626 IP (tos 0x0, ttl 64, id 49315, offset 0, flags [DF], proto TCP (6), length 253) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63bc (incorrect (-&amp;gt; 0x601f), 596763:596964(201) ack 101461 win 331 &amp;lt;nop,nop,timestamp 62216940 214418069&amp;gt;
14:08:41.685838 IP (tos 0x0, ttl 59, id 23781, offset 0, flags [DF], proto TCP (6), length 550) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xb096 (correct), 101461:101959(498) ack 596964 win 331 &amp;lt;nop,nop,timestamp 214418069 62216940&amp;gt;
14:08:41.686072 IP (tos 0x0, ttl 64, id 49316, offset 0, flags [DF], proto TCP (6), length 588) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x650b (incorrect (-&amp;gt; 0xffd7), 596964:597500(536) ack 101959 win 331 &amp;lt;nop,nop,timestamp 62216940 214418069&amp;gt;
14:08:41.686319 IP (tos 0x0, ttl 59, id 23782, offset 0, flags [DF], proto TCP (6), length 306) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x8336 (correct), 101959:102213(254) ack 597500 win 331 &amp;lt;nop,nop,timestamp 214418069 62216940&amp;gt;
14:08:41.686534 IP (tos 0x0, ttl 64, id 49317, offset 0, flags [DF], proto TCP (6), length 341) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6414 (incorrect (-&amp;gt; 0xa326), 597500:597789(289) ack 102213 win 331 &amp;lt;nop,nop,timestamp 62216941 214418069&amp;gt;
14:08:41.686713 IP (tos 0x0, ttl 59, id 23783, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x727d (correct), 102213:102466(253) ack 597789 win 331 &amp;lt;nop,nop,timestamp 214418069 62216941&amp;gt;
14:08:41.686896 IP (tos 0x0, ttl 64, id 49318, offset 0, flags [DF], proto TCP (6), length 341) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6414 (incorrect (-&amp;gt; 0xa104), 597789:598078(289) ack 102466 win 331 &amp;lt;nop,nop,timestamp 62216941 214418069&amp;gt;
14:08:41.687099 IP (tos 0x0, ttl 59, id 23784, offset 0, flags [DF], proto TCP (6), length 304) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xd383 (correct), 102466:102718(252) ack 598078 win 331 &amp;lt;nop,nop,timestamp 214418069 62216941&amp;gt;
14:08:41.687281 IP (tos 0x0, ttl 64, id 49319, offset 0, flags [DF], proto TCP (6), length 388) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6443 (incorrect (-&amp;gt; 0x3236), 598078:598414(336) ack 102718 win 331 &amp;lt;nop,nop,timestamp 62216941 214418069&amp;gt;
14:08:41.687471 IP (tos 0x0, ttl 59, id 23785, offset 0, flags [DF], proto TCP (6), length 307) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xe9c8 (correct), 102718:102973(255) ack 598414 win 331 &amp;lt;nop,nop,timestamp 214418069 62216941&amp;gt;
14:08:41.687673 IP (tos 0x0, ttl 64, id 49320, offset 0, flags [DF], proto TCP (6), length 391) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6446 (incorrect (-&amp;gt; 0x4a7c), 598414:598753(339) ack 102973 win 331 &amp;lt;nop,nop,timestamp 62216941 214418069&amp;gt;
14:08:41.687857 IP (tos 0x0, ttl 59, id 23786, offset 0, flags [DF], proto TCP (6), length 305) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x52cd (correct), 102973:103226(253) ack 598753 win 331 &amp;lt;nop,nop,timestamp 214418069 62216941&amp;gt;
14:08:41.688072 IP (tos 0x0, ttl 64, id 49321, offset 0, flags [DF], proto TCP (6), length 389) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6444 (incorrect (-&amp;gt; 0xb57c), 598753:599090(337) ack 103226 win 331 &amp;lt;nop,nop,timestamp 62216941 214418069&amp;gt;
14:08:41.688257 IP (tos 0x0, ttl 59, id 23787, offset 0, flags [DF], proto TCP (6), length 302) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x0708 (correct), 103226:103476(250) ack 599090 win 331 &amp;lt;nop,nop,timestamp 214418069 62216941&amp;gt;
14:08:41.688473 IP (tos 0x0, ttl 64, id 49322, offset 0, flags [DF], proto TCP (6), length 386) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x6441 (incorrect (-&amp;gt; 0x6bb2), 599090:599424(334) ack 103476 win 331 &amp;lt;nop,nop,timestamp 62216941 214418069&amp;gt;
14:08:41.688659 IP (tos 0x0, ttl 59, id 23788, offset 0, flags [DF], proto TCP (6), length 318) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0xd319 (correct), 103476:103742(266) ack 599424 win 331 &amp;lt;nop,nop,timestamp 214418069 62216941&amp;gt;
14:08:41.688873 IP (tos 0x0, ttl 64, id 49323, offset 0, flags [DF], proto TCP (6), length 249) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x63b8 (incorrect (-&amp;gt; 0xc215), 599424:599621(197) ack 103742 win 331 &amp;lt;nop,nop,timestamp 62216941 214418069&amp;gt;
14:08:41.689047 IP (tos 0x0, ttl 59, id 23789, offset 0, flags [DF], proto TCP (6), length 204) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x544f (correct), 103742:103894(152) ack 599621 win 331 &amp;lt;nop,nop,timestamp 214418070 62216941&amp;gt;
14:08:41.689394 IP (tos 0x0, ttl 64, id 49324, offset 0, flags [DF], proto TCP (6), length 5644) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: ., cksum 0x78cb (incorrect (-&amp;gt; 0xba29), 599621:605213(5592) ack 103894 win 331 &amp;lt;nop,nop,timestamp 62216941 214418070&amp;gt;
14:08:41.689410 IP (tos 0x0, ttl 64, id 49328, offset 0, flags [DF], proto TCP (6), length 910) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x664d (incorrect (-&amp;gt; 0x8829), 605213:606071(858) ack 103894 win 331 &amp;lt;nop,nop,timestamp 62216941 214418070&amp;gt;
14:08:41.690185 IP (tos 0x0, ttl 59, id 23790, offset 0, flags [DF], proto TCP (6), length 52) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: ., cksum 0x458e (correct), 103894:103894(0) ack 606071 win 331 &amp;lt;nop,nop,timestamp 214418070 62216941&amp;gt;
14:08:41.694129 IP (tos 0x0, ttl 59, id 23791, offset 0, flags [DF], proto TCP (6), length 639) 192.168.1.17.55011 &amp;gt; 192.168.1.16.1521: P, cksum 0x43d3 (correct), 103894:104481(587) ack 606071 win 331 &amp;lt;nop,nop,timestamp 214418071 62216941&amp;gt;
14:08:41.694674 IP (tos 0x0, ttl 64, id 49329, offset 0, flags [DF], proto TCP (6), length 569) 192.168.1.16.1521 &amp;gt; 192.168.1.17.55011: P, cksum 0x64f8 (incorrect (-&amp;gt; 0x71c3), 606071:606588(517) ack 104481 win 331 &amp;lt;nop,nop,timestamp 62216943 214418071&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>ob_docker命令</title><link>https://blog.newworld.help/posts/ob_docker%E5%91%BD%E4%BB%A4/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ob_docker%E5%91%BD%E4%BB%A4/</guid><description>docker inspect &lt;container_id_or_name&gt;</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;##############################################################################一、Docker 基础命令
##########################1. 容器管理&lt;/p&gt;
&lt;h1&gt;查看所有容器（-a 包括停止的容器）&lt;/h1&gt;
&lt;p&gt;docker ps -a&lt;/p&gt;
&lt;h1&gt;查看特定容器的详细信息&lt;/h1&gt;
&lt;p&gt;docker inspect &amp;lt;container_id_or_name&amp;gt;&lt;/p&gt;
&lt;h1&gt;启动/停止/重启容器&lt;/h1&gt;
&lt;p&gt;docker start &amp;lt;container_id_or_name&amp;gt;
docker stop &amp;lt;container_id_or_name&amp;gt;
docker restart &amp;lt;container_id_or_name&amp;gt;&lt;/p&gt;
&lt;h1&gt;强制终止容器（当 stop 无响应时）&lt;/h1&gt;
&lt;p&gt;docker kill &amp;lt;container_id_or_name&amp;gt;&lt;/p&gt;
&lt;p&gt;##########################2. 资源配置与查看&lt;/p&gt;
&lt;h1&gt;查看分配的资源限制（内存、CPU）&lt;/h1&gt;
&lt;p&gt;docker inspect ocp | grep Mem&lt;/p&gt;
&lt;h1&gt;Memory:21474836480 (20GB)&lt;/h1&gt;
&lt;p&gt;docker inspect ocp | grep Cpu&lt;/p&gt;
&lt;h1&gt;CpuQuota:800000 / CpuPeriod:100000 = 8核&lt;/h1&gt;
&lt;h1&gt;查看实时资源使用情况&lt;/h1&gt;
&lt;p&gt;docker stats
docker stats ocp  # 查看单个容器&lt;/p&gt;
&lt;h1&gt;更新容器资源限制&lt;/h1&gt;
&lt;p&gt;docker update --cpus 2 --memory 1g my_container
docker update --cpu-shares 1024 my_container&lt;/p&gt;
&lt;h1&gt;CPU shares 说明：&lt;/h1&gt;
&lt;h1&gt;- CPU 空闲时，容器可自由使用，不受限制&lt;/h1&gt;
&lt;h1&gt;- CPU 争用时，按权重比例分配时间&lt;/h1&gt;
&lt;p&gt;##########################3. 日志查看&lt;/p&gt;
&lt;h1&gt;查看最后 N 行&lt;/h1&gt;
&lt;p&gt;docker logs --tail 100 &amp;lt;container_id_or_name&amp;gt;&lt;/p&gt;
&lt;h1&gt;实时跟踪日志&lt;/h1&gt;
&lt;p&gt;docker logs -f &amp;lt;container_id_or_name&amp;gt;&lt;/p&gt;
&lt;h1&gt;查看最近 1 小时的日志&lt;/h1&gt;
&lt;p&gt;docker logs --since 1h &amp;lt;container_id_or_name&amp;gt;&lt;/p&gt;
&lt;h1&gt;查看指定时间范围&lt;/h1&gt;
&lt;p&gt;docker logs --since &quot;2026-02-02T10:00:00&quot; --until &quot;2026-02-02T11:00:00&quot; &amp;lt;container_id_or_name&amp;gt;&lt;/p&gt;
&lt;h1&gt;显示时间戳&lt;/h1&gt;
&lt;p&gt;docker logs --timestamps &amp;lt;container_id_or_name&amp;gt;&lt;/p&gt;
&lt;h1&gt;查看容器内应用日志&lt;/h1&gt;
&lt;p&gt;docker logs metadb 2&amp;gt;&amp;amp;1 | grep -i error&lt;/p&gt;
&lt;p&gt;##########################4. 进入容器&lt;/p&gt;
&lt;h1&gt;进入容器（推荐）&lt;/h1&gt;
&lt;p&gt;docker exec -it &amp;lt;container_id_or_name&amp;gt; /bin/bash  #最优
docker exec -it &amp;lt;container_id_or_name&amp;gt; /bin/sh&lt;/p&gt;
&lt;h1&gt;在容器内执行单条命令&lt;/h1&gt;
&lt;p&gt;docker exec &amp;lt;container_id_or_name&amp;gt; ps aux
docker exec &amp;lt;container_id_or_name&amp;gt; cat /proc/loadavg&lt;/p&gt;
&lt;h1&gt;从容器复制文件到宿主机&lt;/h1&gt;
&lt;p&gt;docker cp &amp;lt;container_id_or_name&amp;gt;:/path/to/file /local/path&lt;/p&gt;
&lt;h1&gt;从宿主机复制文件到容器&lt;/h1&gt;
&lt;p&gt;docker cp /local/path &amp;lt;container_id_or_name&amp;gt;:/container/path&lt;/p&gt;
&lt;p&gt;##########################5. 磁盘清理&lt;/p&gt;
&lt;h1&gt;清理未使用的镜像、容器、网络&lt;/h1&gt;
&lt;p&gt;docker system prune&lt;/p&gt;
&lt;h1&gt;清理所有未使用的资源（包括未使用的镜像）&lt;/h1&gt;
&lt;p&gt;docker system prune -a&lt;/p&gt;
&lt;h1&gt;查看磁盘使用情况&lt;/h1&gt;
&lt;p&gt;docker system df&lt;/p&gt;
&lt;p&gt;##############################################################################二、OCP/metadb 特定命令&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;supervisord 管理&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;进入容器查看服务状态&lt;/h1&gt;
&lt;p&gt;docker exec -it metadb /bin/bash
supervisorctl status&lt;/p&gt;
&lt;h1&gt;重启所有组件&lt;/h1&gt;
&lt;p&gt;supervisorctl restart all&lt;/p&gt;
&lt;h1&gt;重启单个服务&lt;/h1&gt;
&lt;p&gt;supervisorctl restart observer
supervisorctl restart obproxy&lt;/p&gt;
&lt;h1&gt;metadb 正常状态下，以下两个进程是 EXITED：&lt;/h1&gt;
&lt;h1&gt;- change_password&lt;/h1&gt;
&lt;h1&gt;- ocpagent&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;OceanBase 状态检查&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;查看 observer 进程&lt;/h1&gt;
&lt;p&gt;docker exec metadb ps aux | grep observer&lt;/p&gt;
&lt;h1&gt;查看 observer 主日志（搜索错误）&lt;/h1&gt;
&lt;p&gt;docker exec metadb tail -100 /home/admin/oceanbase/log/observer.log | grep -E &quot;ERROR|WARN&quot;&lt;/p&gt;
&lt;h1&gt;查看 GTS/RS 相关错误&lt;/h1&gt;
&lt;p&gt;docker exec metadb grep -E &quot;gts failed|not master|rootserver&quot; /home/admin/oceanbase/log/observer.log | tail -20&lt;/p&gt;
&lt;h1&gt;查看启动日志&lt;/h1&gt;
&lt;p&gt;docker exec metadb cat /home/admin/oceanbase/log/start_ob.log | grep &quot;WDIAG|WARN|ERROR&quot;
[2023-08-29 10:43:03.427364] WARN [env METADB_CLUSTER_NAME not set]  #可以通过这个看历史启动时间&lt;/p&gt;
&lt;h1&gt;查看配置&lt;/h1&gt;
&lt;p&gt;docker exec metadb strings /home/admin/oceanbase/etc/observer.config.bin&lt;/p&gt;
&lt;h1&gt;查看环境变量&lt;/h1&gt;
&lt;p&gt;docker exec metadb env | grep -E &quot;CLUSTER|ZONE|PORT|ROOTSERVICE&quot;&lt;/p&gt;
</content:encoded></item><item><title>vm共享磁盘创建</title><link>https://blog.newworld.help/posts/vm%E5%85%B1%E4%BA%AB%E7%A3%81%E7%9B%98%E5%88%9B%E5%BB%BA/</link><guid isPermaLink="true">https://blog.newworld.help/posts/vm%E5%85%B1%E4%BA%AB%E7%A3%81%E7%9B%98%E5%88%9B%E5%BB%BA/</guid><description>.vmware-vdiskmanager.exe -c -s 5GB -a lsilogic -t 2 F:VMRACdisk11</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.共享磁盘
#cmd创建共享磁盘
D:
dir
cd 虚拟机目录
.\vmware-vdiskmanager.exe -c -s 5GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Gdata01.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 5GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Gdata02.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 5GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Gdata03.vmdk&quot;&lt;/p&gt;
&lt;p&gt;.\vmware-vdiskmanager.exe -c -s 5GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Gocr01.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 5GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Gocr02.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 5GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Gocr03.vmdk&quot;&lt;/p&gt;
&lt;p&gt;.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Goggdg01.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Goggdg02.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Goggdg03.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Goggdg04.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Goggdg11.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Goggdg12.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Goggdg13.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\11g\share-11Goggdg14.vmdk&quot;&lt;/p&gt;
&lt;p&gt;#写入虚拟机的vmx文件中
#shared disks configure 11g
diskLib.dataCacheMaxSize=0
diskLib.dataCacheMaxReadAheadSize=0
diskLib.dataCacheMinReadAheadSize=0
diskLib.dataCachePageSize=4096
diskLib.maxUnsyncedWrites = &quot;0&quot;
disk.locking = &quot;FALSE&quot;
scsi1.sharedBus = &quot;virtual&quot;
scsi1.present = &quot;TRUE&quot;
scsi1.virtualDev = &quot;lsilogic&quot;
scsi1:0.mode = &quot;independent-p******&quot;
scsi1:0.deviceType = &quot;disk&quot;
scsi1:0.present = &quot;TRUE&quot;
scsi1:0.fileName = &quot;F:\VM\RACdisk\11g\share-11Gdata01.vmdk&quot;
scsi1:0.redo = &quot;&quot;
scsi1:1.mode = &quot;independent-p******&quot;
scsi1:1.deviceType = &quot;disk&quot;
scsi1:1.present = &quot;TRUE&quot;
scsi1:1.fileName = &quot;F:\VM\RACdisk\11g\share-11Gdata02.vmdk&quot;
scsi1:1.redo = &quot;&quot;
scsi1:2.mode = &quot;independent-p******&quot;
scsi1:2.deviceType = &quot;disk&quot;
scsi1:2.present = &quot;TRUE&quot;
scsi1:2.fileName = &quot;F:\VM\RACdisk\11g\share-11Gdata03.vmdk&quot;
scsi1:2.redo = &quot;&quot;
scsi1:3.mode = &quot;independent-p******&quot;
scsi1:3.deviceType = &quot;disk&quot;
scsi1:3.present = &quot;TRUE&quot;
scsi1:3.fileName = &quot;F:\VM\RACdisk\11g\share-11Gocr01.vmdk&quot;
scsi1:3.redo = &quot;&quot;
scsi1:4.mode = &quot;independent-p******&quot;
scsi1:4.deviceType = &quot;disk&quot;
scsi1:4.present = &quot;TRUE&quot;
scsi1:4.fileName = &quot;F:\VM\RACdisk\11g\share-11Gocr02.vmdk&quot;
scsi1:4.redo = &quot;&quot;
scsi1:5.mode = &quot;independent-p******&quot;
scsi1:5.deviceType = &quot;disk&quot;
scsi1:5.present = &quot;TRUE&quot;
scsi1:5.fileName = &quot;F:\VM\RACdisk\11g\share-11Gocr03.vmdk&quot;
scsi1:5.redo = &quot;&quot;
scsi1:6.mode = &quot;independent-p******&quot;
scsi1:6.deviceType = &quot;disk&quot;
scsi1:6.present = &quot;TRUE&quot;
scsi1:6.fileName = &quot;F:\VM\RACdisk\11g\share-11Goggdg01.vmdk&quot;
scsi1:6.redo = &quot;&quot;
scsi1:8.mode = &quot;independent-p******&quot;
scsi1:8.deviceType = &quot;disk&quot;
scsi1:8.present = &quot;TRUE&quot;
scsi1:8.fileName = &quot;F:\VM\RACdisk\11g\share-11Goggdg02.vmdk&quot;
scsi1:8.redo = &quot;&quot;
scsi1:9.mode = &quot;independent-p******&quot;
scsi1:9.deviceType = &quot;disk&quot;
scsi1:9.present = &quot;TRUE&quot;
scsi1:9.fileName = &quot;F:\VM\RACdisk\11g\share-11Goggdg03.vmdk&quot;
scsi1:9.redo = &quot;&quot;
scsi1:10.mode = &quot;independent-p******&quot;
scsi1:10.deviceType = &quot;disk&quot;
scsi1:10.present = &quot;TRUE&quot;
scsi1:10.fileName = &quot;F:\VM\RACdisk\11g\share-11Goggdg04.vmdk&quot;
scsi1:10.redo = &quot;&quot;
scsi1:11.mode = &quot;independent-p******&quot;
scsi1:11.deviceType = &quot;disk&quot;
scsi1:11.present = &quot;TRUE&quot;
scsi1:11.fileName = &quot;F:\VM\RACdisk\11g\share-11Goggdg11.vmdk&quot;
scsi1:11.redo = &quot;&quot;
scsi1:12.mode = &quot;independent-p******&quot;
scsi1:12.deviceType = &quot;disk&quot;
scsi1:12.present = &quot;TRUE&quot;
scsi1:12.fileName = &quot;F:\VM\RACdisk\11g\share-11Goggdg12.vmdk&quot;
scsi1:12.redo = &quot;&quot;
scsi1:13.mode = &quot;independent-p******&quot;
scsi1:13.deviceType = &quot;disk&quot;
scsi1:13.present = &quot;TRUE&quot;
scsi1:13.fileName = &quot;F:\VM\RACdisk\11g\share-11Goggdg13.vmdk&quot;
scsi1:13.redo = &quot;&quot;
scsi1:14.mode = &quot;independent-p******&quot;
scsi1:14.deviceType = &quot;disk&quot;
scsi1:14.present = &quot;TRUE&quot;
scsi1:14.fileName = &quot;F:\VM\RACdisk\11g\share-11Goggdg14.vmdk&quot;
scsi1:14.redo = &quot;&quot;
2.udev绑盘
#查看全部的磁盘
fdisk -l | grep dev/sd*
#安装multipath
mount /dev/sr0 /mnt&lt;/p&gt;
&lt;p&gt;yum install -y device-mapper*
mpathconf --enable --with_multipathd y&lt;/p&gt;
&lt;p&gt;#查看共享盘的scsi_id,若没有显示结果输出,关闭虚拟机添加文件中添加参数disk.EnableUUID = &quot;TRUE&quot;
/sbin/scsi_id -g -u /dev/sdb
/sbin/scsi_id -g -u /dev/sdc
/sbin/scsi_id -g -u /dev/sdd
/sbin/scsi_id -g -u /dev/sde
/sbin/scsi_id -g -u /dev/sdf
/sbin/scsi_id -g -u /dev/sdg
/sbin/scsi_id -g -u /dev/sdh
/sbin/scsi_id -g -u /dev/sdi
/sbin/scsi_id -g -u /dev/sdl
/sbin/scsi_id -g -u /dev/sdj
/sbin/scsi_id -g -u /dev/sdk
/sbin/scsi_id -g -u /dev/sdl
/sbin/scsi_id -g -u /dev/sdm
/sbin/scsi_id -g -u /dev/sdn
#配置multipath，wwid的值为上面获取的scsi_id，alias可自定义,注释原文件所有行
sed &apos;/^/s/^/#/&apos; /etc/multipath.conf -i
cat &amp;lt;&amp;lt;EOF&amp;gt;&amp;gt; /etc/multipath.conf
defaults {
user_friendly_names yes
}&lt;/p&gt;
&lt;p&gt;blacklist {
devnode &quot;^sda&quot;
}&lt;/p&gt;
&lt;p&gt;multipaths {
multipath {
wwid &quot;36000c294bdcea3fdd99b34a77f58becb&quot;
alias asm_data01
}
multipath {
wwid &quot;36000c29575905c1700590d8e755b3aa4&quot;
alias asm_data02
}
multipath {
wwid &quot;36000c294d814181da02ff4953334be05&quot;
alias asm_data03
}
multipath {
wwid &quot;36000c29f105b5428d831f9cfdec40c61&quot;
alias asm_ocr01
}
multipath {
wwid &quot;36000c295523af0a30da2cf6ed7821695&quot;
alias asm_ocr02
}
multipath {
wwid &quot;36000c2930b6caac64a18453c0f929c21&quot;
alias asm_ocr03
}
multipath {
wwid &quot;36000c29bfe3a7df41ddfcecc9de5b47e&quot;
alias asm_ogg01
}
multipath {
wwid &quot;36000c298ada9369771e3cdf307d69217&quot;
alias asm_ogg02
}
multipath {
wwid &quot;36000c299f2c3ff1b31b4088eb1685563&quot;
alias asm_ogg03
}
multipath {
wwid &quot;36000c299e9a3bac01b13541eda461949&quot;
alias asm_ogg04
}
multipath {
wwid &quot;36000c2996610d1f39a94bf8458dc10b7&quot;
alias asm_ogg11
}
multipath {
wwid &quot;36000c29b0a2fd4d8bd50ed0c9e4ee1c2&quot;
alias asm_ogg12
}
multipath {
wwid &quot;36000c299956c20c6b409d7dd181dd74c&quot;
alias asm_ogg13
}
multipath {
wwid &quot;36000c29278d897d19dd1506626a8b971&quot;
alias asm_ogg14
}
multipath {
wwid &quot;36000c29236e0a5484b831362e0064ed8&quot;
alias asm_cc
}&lt;/p&gt;
&lt;p&gt;}
EOF
#激活multipath多路径：
multipath -F&lt;/p&gt;
&lt;p&gt;multipath -v2&lt;/p&gt;
&lt;p&gt;multipath -ll&lt;/p&gt;
&lt;p&gt;#UDEV绑盘
cd /dev/mapper
for i in asm_&lt;em&gt;; do
printf &quot;%s %s\n&quot; &quot;$i&quot; &quot;$(udevadm info --query=all --name=/dev/mapper/&quot;$i&quot; | grep -i dm_uuid)&quot; &amp;gt;&amp;gt;/dev/mapper/udev_info
done
while read -r line; do
dm_uuid=$(echo &quot;$line&quot; | awk -F&apos;=&apos; &apos;{print $2}&apos;)
disk_name=$(echo &quot;$line&quot; | awk &apos;{print $1}&apos;)
echo &quot;KERNEL==&quot;dm-&lt;/em&gt;&quot;,ENV{DM_UUID}==&quot;${dm_uuid}&quot;,SYMLINK+=&quot;${disk_name}&quot;,OWNER=&quot;grid&quot;,GROUP=&quot;asmadmin&quot;,MODE=&quot;0660&quot;&quot; &amp;gt;&amp;gt;/etc/udev/rules.d/99-oracle-asmdevices.rules
done &amp;lt; /dev/mapper/udev_info
#重载udev
udevadm control --reload-rules&lt;/p&gt;
&lt;p&gt;udevadm trigger --type=devices&lt;/p&gt;
&lt;p&gt;ll /dev/asm*&lt;/p&gt;
&lt;p&gt;3.dd格式化磁盘
dd if=/dev/zero of=/dev/sdb   bs=1M count=1000
dd if=/dev/zero of=/dev/sdc   bs=1M count=1000
dd if=/dev/zero of=/dev/sdd   bs=1M count=1000
dd if=/dev/zero of=/dev/sde   bs=1M count=1000
dd if=/dev/zero of=/dev/sdf   bs=1M count=1000
dd if=/dev/zero of=/dev/sdg   bs=1M count=1000&lt;/p&gt;
</content:encoded></item><item><title>ipv6改造_物理_虚机</title><link>https://blog.newworld.help/posts/ipv6%E6%94%B9%E9%80%A0_%E7%89%A9%E7%90%86_%E8%99%9A%E6%9C%BA/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ipv6%E6%94%B9%E9%80%A0_%E7%89%A9%E7%90%86_%E8%99%9A%E6%9C%BA/</guid><description>IPV6_HEAD=fd00:0:4000:6000:</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;#!/bin/bash
#修改IPV6_HEAD，修改网卡名
IPV6_HEAD=fd00:0:4000:6000:
IPV4_ADDR=&lt;code&gt;ifconfig | grep -A 5 p5p1 | egrep -o &quot;[0-9.]+{7,15}&quot; | awk -F. &apos;{print $1&quot;.&quot;$2&quot;.&quot;$3&quot;.&quot;$4}&apos; | head -1&lt;/code&gt;
IPV4_GATEWAY=&lt;code&gt;ifconfig | grep -A 5 p5p1 | egrep -o &quot;[0-9.]+{7,15}&quot; | awk -F. &apos;{print $1&quot;.&quot;$2&quot;.&quot;$3&quot;.&quot;}&apos; | head -1&lt;/code&gt;254
IPV6_ADDR=&lt;code&gt;ifconfig | grep -A 5 p5p1 | egrep -o &quot;[0-9.]+{7,15}&quot; | awk -F. &apos;{print $1&quot;.&quot;$2&quot;.&quot;$3&quot;.&quot;$4}&apos; | head -1&lt;/code&gt;
IPV6_ADDR=$(echo $IPV6_ADDR| sed &apos;s/./:/g&apos;)
IPV6_GATEWAY=&lt;code&gt;ifconfig | grep -A 5 p5p1 | egrep -o &quot;[0-9.]+{7,15}&quot; | awk -F. &apos;{print $1&quot;.&quot;$2&quot;.&quot;$3&quot;.&quot;}&apos; | head -1&lt;/code&gt;254
IPV6_GATEWAY=&lt;code&gt;echo $IPV6_GATEWAY| sed &apos;s/\./:/g&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ip a &amp;gt; /root/ip.baktxt &amp;amp;&amp;amp; route -n &amp;gt;&amp;gt;  /root/ip.baktxt
nmcli connection modify p5p1 ipv4.method manual ipv4.addresses ${IPV4_ADDR}/24 ipv4.gateway ${IPV4_GATEWAY};
nmcli connection up p5p1;
systemctl stop network;
systemctl disable network;
sleep 2;
systemctl restart NetworkManager;
systemctl status network;
nmcli connection modify p5p1 ipv6.method manual ipv6.addresses ${IPV6_HEAD}${IPV6_ADDR}/64;
nmcli connection modify p5p1 ipv6.gateway &quot;${IPV6_HEAD}${IPV6_GATEWAY}&quot;;
nmcli connection up p5p1;&lt;/p&gt;
</content:encoded></item><item><title>执行计划Activity_Detail记录</title><link>https://blog.newworld.help/posts/%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%92activity_detail%E8%AE%B0%E5%BD%95/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%92activity_detail%E8%AE%B0%E5%BD%95/</guid><description>monitor执行计划Activity Detail显示异常</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;monitor执行计划Activity Detail显示异常&lt;/p&gt;
&lt;p&gt;异常1
Duration 16s
Elapsed Time(s) 15
IO Waite(s) 14
cpu(2)
db file sequential read(8)
read by other session(6)&lt;/p&gt;
&lt;p&gt;&quot;db file sequential read(8)&quot; 表示发生了顺序读取（Sequential Read）的操作，每次读取一个数据块，&quot;(8)&quot; 表示数据块的大小为8KB（或根据系统配置的块大小而有所不同）。
&quot;read by other session(6)&quot; 表示当前会话正在等待其他6个会话完成对相同数据块的读取操作。这意味着当前会话需要等待其他会话释放对该数据块的读取权限，才能继续执行。
&quot;cpu(2)&quot; 表示在执行计划中发生了2个CPU操作。这可能涉及一些需要进行计算、排序或聚合的操作，需要使用CPU资源进行处理。&lt;/p&gt;
&lt;p&gt;解决方案
查看表,查看target_buffes值
SELECT *
FROM V$BUFFER_POOL;&lt;/p&gt;
&lt;p&gt;发现值过小修改db_cache_size
ALTER SYSTEM SET db_cache_size = &amp;lt;value&amp;gt; SCOPE = BOTH;&lt;/p&gt;
&lt;p&gt;优化方式:
优化查询语句：确保查询语句使用适当的索引、过滤条件和连接方式，以减少对数据块的读取操作，并尽可能减少CPU的使用。
数据库缓存调整：调整数据库的缓存设置，如增加数据库缓冲区大小，以减少从磁盘读取数据的频率。
硬件性能优化：确保磁盘驱动器和存储系统的性能良好，例如使用高速磁盘或固态驱动器（SSD），以提高读取操作的速度。
并发控制：评估并发访问模式，考虑采用合适的并发控制策略，如调整事务隔离级别或锁定策略，以减少对相同数据块的读取争用。
查询优化：分析查询执行计划，查看是否存在性能瓶颈，并根据需要进行索引优化、统计信息收集或查询重写等操作。&lt;/p&gt;
&lt;p&gt;异常2
Duration 96s
Elapsed Time(s) 95
IO Waite(s) 78
cpu(14) 这里ACTIVITY 100%
db file scattered read(4)
db file sequential read (37)
read by other session (40)&lt;/p&gt;
&lt;p&gt;CPU (14): 表示在查询执行期间使用的CPU资源百分比。这包括CPU计算和处理查询的操作。在这个示例中，CPU资源占用了查询执行的14%。&lt;/p&gt;
&lt;p&gt;db file scattered read (4): 表示执行期间进行散乱读取的数据文件块数量。散乱读取是指在物理存储设备上读取非连续数据块的操作。执行期间进行了4次散乱读取操作。&lt;/p&gt;
&lt;p&gt;db file sequential read (37): 表示执行期间进行顺序读取的数据文件块数量。顺序读取是指在物理存储设备上按照顺序读取连续数据块的操作。执行期间进行了37次顺序读取操作。&lt;/p&gt;
&lt;p&gt;read by other session (40): 表示在查询执行期间由其他会话（session）读取的数据块数量。这可能发生在并发环境中，当多个会话同时读取相同的数据块时。
有40个数据块被其他会话读取。&lt;/p&gt;
</content:encoded></item><item><title>db2数据导入导出</title><link>https://blog.newworld.help/posts/db2%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA/</link><guid isPermaLink="true">https://blog.newworld.help/posts/db2%E6%95%B0%E6%8D%AE%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA/</guid><description>db2 export to &lt;文件路径&gt; of del select * from &lt;表名&gt;</description><pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;1.导出（Export）&lt;/h2&gt;
&lt;p&gt;#基本语法
db2 &quot;export to &amp;lt;文件路径&amp;gt; of del select * from &amp;lt;表名&amp;gt;&quot;&lt;/p&gt;
&lt;p&gt;#导出整张表
db2 &quot;export to /backup/t01_qassign.del of del select * from AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;p&gt;#导出带条件
db2 &quot;export to /backup/t01_qassign.del of del select * from AWP.T01_QASSIGN where created &amp;gt; &apos;2026-01-01&apos;&quot;&lt;/p&gt;
&lt;p&gt;#指定分隔符（默认逗号，这里改为竖线）
db2 &quot;export to /backup/t01_qassign.del of del modified by coldel| select * from AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;h2&gt;2.导入（Import）&lt;/h2&gt;
&lt;p&gt;#三种模式
insert         追加数据，不影响已有数据
insert_update  有则更新，无则插入（需主键）
replace        先清空表，再导入（慎用！）&lt;/p&gt;
&lt;p&gt;#追加导入
db2 &quot;import from /backup/t01_qassign.del of del insert into AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;p&gt;#清空后导入（慎用！会删掉原有数据）
db2 &quot;import from /backup/t01_qassign.del of del replace into AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;p&gt;#带消息日志（推荐，方便排查错误）
db2 &quot;import from /backup/t01_qassign.del of del messages /tmp/import.log insert into AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;p&gt;#指定提交行数（大数据量时推荐，每1000行提交一次）
db2 &quot;import from /backup/t01_qassign.del of del commitcount 1000 messages /tmp/import.log insert into AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;h2&gt;3.批量导入（Load）— 大数据量用这个，速度快&lt;/h2&gt;
&lt;p&gt;#基本语法
db2 &quot;load from /backup/t01_qassign.del of del insert into AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;p&gt;#带日志
db2 &quot;load from /backup/t01_qassign.del of del messages /tmp/load.log insert into AWP.T01_QASSIGN nonrecoverable&quot;&lt;/p&gt;
&lt;p&gt;#Import 与 Load 对比
特性            Import                Load
速度            慢（逐行写入）         快（直接写页）
触发器          执行                  不执行
日志记录        全部记录              少量
表锁定          弱                    强
适用场景        小数据量              大数据量（百万级+）&lt;/p&gt;
&lt;h2&gt;4.常用组合场景&lt;/h2&gt;
&lt;p&gt;#表到表复制（不需要文件中转，最快）
db2 &quot;insert into AWP.T01_QASSIGN_BAK select * from AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;p&gt;#完整流程：导出 → 建表 → 导入
db2 &quot;export to /backup/t01_qassign.del of del select * from AWP.T01_QASSIGN&quot;
db2 &quot;create table AWP.T01_QASSIGN_BAK like AWP.T01_QASSIGN&quot;
db2 &quot;import from /backup/t01_qassign.del of del insert into AWP.T01_QASSIGN_BAK&quot;&lt;/p&gt;
&lt;p&gt;#跨库导出导入（源库导出，目标库导入）
#-- 源库操作
db2 &quot;export to /backup/t01_qassign.del of del select * from AWP.T01_QASSIGN&quot;
#-- 目标库操作
db2 connect to &amp;lt;目标库名&amp;gt;
db2 &quot;import from /backup/t01_qassign.del of del insert into AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;h2&gt;5.查看导出文件内容&lt;/h2&gt;
&lt;p&gt;#查看前几行，确认数据格式和分隔符
head -5 /backup/t01_qassign.del&lt;/p&gt;
&lt;p&gt;#查看文件大小
ll /backup/t01_qassign.del&lt;/p&gt;
&lt;p&gt;#统计行数（大致等于记录数）
wc -l /backup/t01_qassign.del&lt;/p&gt;
&lt;h2&gt;6.常见报错&lt;/h2&gt;
&lt;p&gt;SQL1024N   没连数据库                先执行 db2 connect to &amp;lt;库名&amp;gt;
SQL3015N -526  目标表是临时表        drop后建正式表，或换个表名
SQL3007C   消息文件写入失败          加 messages /tmp/xxx.log 指定路径
SQL0601N   表已存在                  先 drop 或换个表名
SQL3016N   分隔符不匹配              导出用了什么分隔符，导入也要指定
SQL0204N   表不存在                  先建表：create table ... like ...&lt;/p&gt;
&lt;h2&gt;7.实操示例&lt;/h2&gt;
&lt;p&gt;#场景：将 /backup/test/sunbh/20260420/AWP.T01_QASSIGN 的数据导入新表&lt;/p&gt;
&lt;p&gt;#1.连接数据库
db2 connect to &amp;lt;数据库名&amp;gt;&lt;/p&gt;
&lt;p&gt;#2.查看原表结构
db2 &quot;describe table AWP.T01_QASSIGN&quot;&lt;/p&gt;
&lt;p&gt;#3.建目标表（和原表结构一样）
db2 &quot;create table AWP.T01_QASSIGN20260428 like AWP.T01_QASSIGN&quot;
如果报 SQL0601N（表已存在），先删除：
db2 &quot;drop table AWP.T01_QASSIGN20260428&quot;
再重建&lt;/p&gt;
&lt;p&gt;#4.导入数据
db2 &quot;import from /backup/test/sunbh/20260420/AWP.T01_QASSIGN of del messages /tmp/import_qassign.msg insert into AWP.T01_QASSIGN20260428&quot;&lt;/p&gt;
&lt;p&gt;#5.验证数据量
db2 &quot;select count(*) from AWP.T01_QASSIGN20260428&quot;&lt;/p&gt;
</content:encoded></item><item><title>问题排查(sql)</title><link>https://blog.newworld.help/posts/%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5sql/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E9%97%AE%E9%A2%98%E6%8E%92%E6%9F%A5sql/</guid><description>1.执行sql,将sql缓存在数据库</description><pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.执行sql,将sql缓存在数据库
select /*+ monitor */
column_name
from table_name&lt;/p&gt;
&lt;p&gt;2.根据sql_fulltext文本，获取想要的sql_id
select sql_fulltext,sql_id
from v$sql
where sql_text like &apos;%/*+ monitor */ %&apos;&lt;/p&gt;
&lt;p&gt;3.查看执行计划&lt;/p&gt;
&lt;p&gt;3.1获取sql awr
[alter session set container=xxx;]
@?/rdbms/admin/awrsqrpt.sql&lt;/p&gt;
&lt;p&gt;3.2获取sql monitor
select dbms_sqltune.report_sql_monitor(sql_id=&amp;gt;&apos;59aigx48d1ngs&apos;,type=&amp;gt;&apos;TEXT&apos;) report from dual;&lt;/p&gt;
&lt;p&gt;查看表,查看target_buffes值
SELECT *
FROM V$BUFFER_POOL;&lt;/p&gt;
&lt;p&gt;db_cache_size
ALTER SYSTEM SET db_cache_size = &amp;lt;value&amp;gt; SCOPE = BOTH;&lt;/p&gt;
&lt;p&gt;Global Information
记录sql执行用户，执行时间，使用工具等基本信息&lt;/p&gt;
&lt;p&gt;Global Stats
Elapsed Time（消耗时间）：表示查询执行的总时间，包括 CPU 时间、等待时间和其他执行时间。它是一个衡量查询执行效率的重要指标。
CPU Time（CPU 时间）：表示查询执行期间 CPU 所消耗的时间。CPU 时间是指在 CPU 上执行指令和计算所用的时间。
IO Waits（IO 等待）：表示查询执行期间涉及到的 IO 操作所等待的时间。它反映了查询在读取或写入数据时由于等待磁盘IO而花费的时间。
Other Waits（其他等待）：表示查询执行期间发生的除了 IO 等待以外的其他等待时间。这可能包括锁等待、资源争用等等。
Fetch Calls（获取调用）：表示从数据库中检索数据所执行的获取操作的次数。每个获取调用通常对应于从数据库中获取一行或一块数据。
Buffer Gets（缓冲区获取）：表示查询执行期间从缓冲区（Buffer Cache）中读取数据块的次数。缓冲区是数据库中用于缓存数据块的内存区域。
Read Reqs（读请求）：表示查询执行期间发起的读取数据请求的次数。这通常对应于从磁盘或其他存储介质中读取数据块的操作。
Read Bytes（读取字节）：表示查询执行期间从磁盘或其他存储介质中读取的字节数。它反映了查询执行期间涉及的数据传输量。
Write Reqs（写请求）：表示查询执行期间发起的写入数据请求的次数。这通常对应于向磁盘或其他存储介质写入数据块的操作。
Write Bytes（写入字节）：表示查询执行期间写入磁盘或其他存储介质的字节数。它反映了查询执行期间涉及的数据传输量。&lt;/p&gt;
&lt;p&gt;SQL Plan Monitoring Details (Plan Hash Value=1885709308)
Rows(Estim)：根据统计信息预估行数
Cost：根据统计信息预估成本
TimeActive(s)：活动时间
Start Active：
Execs：执行次数
Rows (Actual)：实际行数
Activity Detail:数据库的异常情况,重点关注&lt;/p&gt;
&lt;p&gt;4.查看表统计信息
select OWNER,
TABLE_NAME,
COLUMN_NAME,
NUM_DISTINCT,
LAST_ANALYZED,
SAMPLE_SIZE,
HISTOGRAM
from dba_tab_col_statistics
where OWNER=&apos;xxx&apos;
and TABLE_NAME=&apos;xx&apos;;&lt;/p&gt;
&lt;p&gt;直方图&lt;/p&gt;
&lt;p&gt;SELECT a.column_name,
b.num_rows 行数,
a.num_distinct 基数,
round(a.num_distinct / decode(b.num_rows, 0, 1, b.num_rows) * 100, 2) 选择性,
a.histogram 直方图的种类,
a.num_buckets 桶,
a.LAST_ANALYZED
FROM dba_tab_col_statistics a, dba_tables b
WHERE a.owner = b.owner
AND a.table_name = b.table_name
AND a.owner = upper(&apos;oracle&apos;)
AND a.table_name = upper(&apos;T231020_1&apos;)
--AND a.column_name = upper(&apos;XXX&apos;);&lt;/p&gt;
&lt;p&gt;5.查看索引状态
SELECT index_name, status
FROM DBA_INDEXES
where OWNER=&apos;xxx&apos; and TABLE_NAME=&apos;xx&apos;;&lt;/p&gt;
&lt;p&gt;SELECT T.INDEX_OWNER, T.INDEX_NAME,T.PARTITION_NAME
FROM DBA_IND_PARTITIONS T
WHERE T.INDEX_OWNER = UPPER(USER_NAME)
AND T.STATUS = &apos;UNUSABLE&apos;&lt;/p&gt;
&lt;p&gt;##查看索引用的字段
SELECT INDEX_NAME, COLUMN_NAME, COLUMN_POSITION
FROM DBA_IND_COLUMNS
WHERE TABLE_OWNER = &apos;你的表的所有者&apos; AND TABLE_NAME = &apos;你的表名&apos;;&lt;/p&gt;
&lt;p&gt;N/A:本地分区索引有效
VALID：索引是有效的，没有发现任何问题。
USABLE:分区索引有效
UNUSABLE：索引无效，不能被使用。这可能是由于底层表的结构更改或其他原因导致的。无法使用无效索引来加速查询，并且需要修复或重新创建索引。
IN_PROGRESS：索引正在被创建、重建或重新构建。在这个状态下，索引可能无法使用，直到操作完成。
FAILED：索引创建、重建或重新构建失败。这通常是由于错误或异常情况导致的，需要检查错误日志并采取适当的措施来修复索引。&lt;/p&gt;
&lt;p&gt;OPTIMIZER_INDEX_COST_ADJ 参数可以调整索引访问与全表扫描之间的成本平衡。
默认值为100，降低此值会使索引扫描显得更“便宜”，从而更易被选择&lt;/p&gt;
&lt;p&gt;##############重建索引##############
SELECT &apos;ALTER INDEX &apos; || owner || &apos;.&apos; || index_name ||
&apos; rebuild;&apos;
FROM dba_indexes
where status not in (&apos;VALID&apos;, &apos;N/A&apos;);&lt;/p&gt;
&lt;p&gt;全局索引：
ALTER INDEX owner.idx_name REBUILD [online];
分区索引：
ALTER INDEX owner.idx_name REBUILD PARTITION part1 tablespace tablespacename;
ALTER INDEX owner.idx_name REBUILD PARTITION part2 tablespace tablespacename;&lt;/p&gt;
&lt;p&gt;####################################10046使用####################################
参考https://blog.csdn.net/weixin_40913898/article/details/120622200
10046是一个Oracle的内部事件(event)，通过设置这个事件可以得到Oracle内部执行系统解析、调用、等待、绑定变量等详细的trace信息，
即帮助我们解析一条/多条SQL、PL/SQL语句的运行状态，这些状态包括：Parse/Fetch/Execute三个阶段中遇到的等待事件、
消耗的物理和逻辑读、CPU时间、执行计划等。它不仅为我们揭示了一条、多条SQL的运行情况，同时还能帮我们分析一些DDL维护命令的内部工作原理，
RMAN、Data Pump Expdp/impdp等工具缓慢问题。对于SQL性能优化、分析系统的性能有着非常重要的作用。&lt;/p&gt;
&lt;p&gt;1.准备当前session使用oradebug
oradebug setmypid&lt;/p&gt;
&lt;p&gt;2.激活10046,level 12
oradebug event 10046 trace name context forever,level 12&lt;/p&gt;
&lt;p&gt;3.执行目标sql&lt;/p&gt;
&lt;p&gt;4.查看激活10046事件后所对应的teace文件
oradebug tracefile_name&lt;/p&gt;
&lt;p&gt;5.关闭10046事件
oradebug event 10046 trace name context off&lt;/p&gt;
&lt;p&gt;6.使用tkprof查看文件
tkprof 第四步输出的路径
output=tkprof翻译后输出结果存放路径(/home/oracle/xxxxx.trc)&lt;/p&gt;
&lt;p&gt;####################################10053使用####################################
oracle 10053事件—执行计划的解析
https://blog.51cto.com/u_12991611/6534467
10053事件event，我们可以监控到CBO对SQL进行成本计算和路径选择的过程和方法。&lt;/p&gt;
&lt;p&gt;####################################问题处理####################################&lt;/p&gt;
&lt;p&gt;1.收集统计信息,直方图
#用户
BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS(
ownname          =&amp;gt; &apos;L7WD_20250303&apos;,           -- 用户名/Schema名
estimate_percent =&amp;gt; DBMS_STATS.AUTO_SAMPLE_SIZE, -- 自动采样率，（100 采样，更准确但慢）
method_opt       =&amp;gt; &apos;FOR ALL COLUMNS SIZE AUTO&apos;, -- 自动收集直方图
degree           =&amp;gt; 4,                           -- 并行度
cascade          =&amp;gt; TRUE,                        -- 同时收集索引统计
options          =&amp;gt; &apos;GATHER STALE&apos;              -- 只收集过时的对象（推荐）
);
END;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    cascade          =&amp;gt; FALSE,                        -- 不收集索引统计
    options          =&amp;gt; &apos;GATHER STALE&apos;              -- 只收集过时的对象（推荐）
    options          =&amp;gt; &apos;LIST STALE&apos;                -- 只收集索引
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;#表
BEGIN
DBMS_STATS.GATHER_TABLE_STATS --统计表,列,索引的统计信息(对表进行直方图信息收集)
(ownname          =&amp;gt; &apos;oracle&apos;, --要分析表的拥有者
tabname          =&amp;gt; &apos;T1&apos;, --要分析的表名.
estimate_percent =&amp;gt; 100, --采样行的百分比,取值范围[0.000001,100],null为全部分析,不采样.
method_opt       =&amp;gt; &apos;for all columns size skewonly&apos;, --决定histograms(直方图)信息是怎样被统计的.method_opt的取值如下(默认值为FOR ALL COLUMNS SIZE AUTO):
no_invalidate    =&amp;gt; FALSE, --如果将依赖游标设置为TRUE，则不使其无效。如果将依赖游标设置为FALSE，则该过程将立即使依赖游标无效
degree           =&amp;gt; 1, --决定并行度.默认值为null.
cascade          =&amp;gt; TRUE); --是收集索引的信息.默认为FALSE.
END;&lt;/p&gt;
&lt;p&gt;2.重建索引
drop index 用户名.索引名
create index 用户名.索引名 on 用户名.表名(字段) tablespace 表空间名 INITRANS 16 online local PARALLEL 6;
alter index 用户名.索引名 NOPARALLEL;&lt;/p&gt;
&lt;p&gt;在线直接重建
alter index 用户名.索引名 rebuild ONLINE PARALLEL 6;
alter index 用户名.索引名 NOPARALLEL;&lt;/p&gt;
&lt;p&gt;分区索引重建
alter index 用户名.索引名 rebuild PARTITION 分区名 ONLINE PARALLEL 6;
alter index 用户名.索引名 NOPARALLEL;&lt;/p&gt;
&lt;p&gt;3.删除直方图
https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_STATS.html#GUID-CC7EA349-B3D0-472A-B3F2-BB4DF4BACC21
--清除当前直方图信息：
BEGIN
DBMS_STATS.DELETE_COLUMN_STATS(ownname       =&amp;gt; &apos;oracle&apos;,
tabname       =&amp;gt; &apos;T231020_1&apos;,
colname       =&amp;gt; &apos;OBJECT_NAME&apos;,
--p******      =&amp;gt; ,要删除统计信息的表分区的名称。如果表已分区且partname为NULL，则删除全局列统计信息。
--stattab       =&amp;gt; ,用户统计表标识符描述从哪里删除统计信息。如果stattab是NULL，则直接从字典中删除统计信息。
--statid        =&amp;gt; ,与这些统计数据相关联的标识符（可选）stattab（仅在stattab不相关时才相关NULL）。
--cascade_parts =&amp;gt; ,如果表已分区并且 ifpartname是NULL，则将其设置为 true 会导致删除所有基础分区的该列的统计信息。
--statown       =&amp;gt; ,架构包含stattab（如果不同于ownname）
--no_invalidate =&amp;gt; ,收集统计信息时控制相关游标的失效。该参数采用以下值：TRUE,FALSE,AUTO(default)
--force         =&amp;gt; ,当此参数的值为 时TRUE，即使锁定也会删除列统计信息
col_stat_type =&amp;gt; &apos;HISTOGRAM&apos; --要删除的列统计信息的类型：HISTOGRAM- 仅删除列直方图,ALL- 删除基列统计数据和直方图
);
END;&lt;/p&gt;
&lt;p&gt;--避免下次收集统计信息又恢复：
BEGIN
DBMS_STATS.SET_TABLE_PREFS(ownname =&amp;gt; &apos;oracle&apos;,
tabname =&amp;gt; &apos;T231020_1&apos;,
pname   =&amp;gt; &apos;method_opt&apos;,
pvalue  =&amp;gt; &apos;for all columns size auto for columns size 1 OBJECT_NAME&apos;
);&lt;/p&gt;
&lt;p&gt;--pname 首选项名称。以下首选项设置默认值：
--APPROXIMATE_NDV_ALGORITHM
--AUTO_STAT_EXTENSIONS
--CASCADE
--DEGREE
--ESTIMATE_PERCENT
--GRANULARITY
--INCREMENTAL
--INCREMENTAL_LEVEL
--INCREMENTAL_STALENESS
--METHOD_OPT
--NO_INVALIDATE
--OPTIONS
--PREFERENCE_OVERRIDES_PARAMETER
--PUBLISH
--STALE_PERCENT
--TABLE_CACHED_BLOCKS
END;&lt;/p&gt;
&lt;p&gt;####################################相关查询####################################&lt;/p&gt;
&lt;p&gt;#查看执行计划历史变化&lt;/p&gt;
&lt;p&gt;#查看要找的sql的sql_id
select *
from dba_hist_sqltext
where sql_text like &apos;%xxxxxx%&apos;&lt;/p&gt;
&lt;p&gt;#根据sql_id查看sql问题
set lines 900
col execs for 999,999,999
col avg_etime for 999,999.999
col avg_lio for 999,999,999.9
col begin_interval_time for a30
col node for 99999
break on plan_hash_value on startup_time skip 1&lt;/p&gt;
&lt;p&gt;select ss.instance_number node,
begin_interval_time,
sql_id,
plan_hash_value,
nvl(executions_delta, 0) exe_num, --执行次数
trunc(elapsed_time_delta / 1000000) exe_time,--执行时间
trunc((elapsed_time_delta / decode(nvl(executions_delta, 0), 0, 1, executions_delta)) / 1000000) avg_exe_time,--平均执行时间
buffer_gets_delta lg_read,--逻辑读
trunc((buffer_gets_delta /  decode(nvl(buffer_gets_delta, 0), 0, 1, executions_delta))) avg_lg_read --平均逻辑读
from DBA_HIST_SQLSTAT S, DBA_HIST_SNAPSHOT SS
where sql_id = &apos;6w3u9wccxtyzp&apos;--问题sql语句的sql_id值
and ss.snap_id = S.snap_id
and ss.instance_number = S.instance_number
and s.instance_number=1
and executions_delta &amp;gt; 0
order by NODE,BEGIN_INTERVAL_TIME&lt;/p&gt;
&lt;p&gt;查看Oracle保留约1周的历史执行计划
SELECT c.username,
a.program,
b.sql_text,
b.command_type,
a.sample_time
FROM dba_hist_active_sess_history a
JOIN dba_hist_sqltext b
ON a.sql_id = b.sql_id
JOIN dba_users c
ON a.user_id = c.user_id
WHERE     a.sample_time BETWEEN SYSDATE - 3 AND SYSDATE
AND b.command_type IN (7, 85)
ORDER BY a.sample_time DESC;&lt;/p&gt;
&lt;p&gt;查看数据库全表扫描的sql_id
SELECT T.SQL_ID
FROM dba_hist_sql_plan T
WHERE T.OBJECT_OWNER NOT IN (&apos;SYS&apos;)
AND T.OPTIONS=&apos;FULL&apos;
-- AND T.OBJECT_NAME =&apos;表名&apos;
-- OBJECT_ALIAS=&apos;连接对象&apos;
-- timestamp begin and
GROUP BY T.SQL_ID&lt;/p&gt;
&lt;p&gt;-- 从 v$sql 视图中选择有关 SQL 查询性能的信息，并按照执行时间降序排序
SELECT sql_id,                  -- SQL 语句的唯一标识符
executions,              -- SQL 语句执行的次数
cpu_time,                -- SQL 语句的总 CPU 时间
elapsed_time,            -- SQL 语句的总体执行时间
disk_reads,              -- SQL 语句的磁盘读取次数
buffer_gets,             -- SQL 语句的缓冲区读取次数
sql_fulltext             -- SQL 语句的完整文本
FROM  v$sql
ORDER BY  elapsed_time DESC;        -- 按照总体执行时间降序排序&lt;/p&gt;
&lt;p&gt;相关查询试图：
v$session (当前正在发生)
v$session_wait (当前正在发生)
v$session_wait_history (会话最近的 10 次等待事件)
v$active_session_history (内存中的 ASH 采集信息，理论为 1 小时)
wrh$_active_session_history (写入 AWR 库中的 ASH 信息，理论为 1 小时以上)
dba_hist_active_sess_history (根据 wrh$_active_session_history 生成的视图)&lt;/p&gt;
&lt;p&gt;dba_hist_sql_plan (记录所有sql的执行计划信息,可以查找全表扫描用)&lt;/p&gt;
&lt;p&gt;#########################################################################
https://blog.51cto.com/ios9/3108383?u_atoken=66628c9463dc09c169cda8d0b42f1bf5&amp;amp;u_asession=01hQrZB0nQSIUfKfBld6bjfXc0xiHlp8zRM5TfGV_Q5LWIZalp4DjUhBAV4xdwAqG6dlmHJsN3PcAI060GRB4YZGyPlBJUEqctiaTooWaXr7I&amp;amp;u_asig=05vF4wabVJwBU0xI2oZn8lp5CfxcEjCvphE4x6j1qKdPiIimLF8Rfa4jOhxtpww5j73BtKwhbyPriUS5L1VhJYJ6K3oU9HMNsVdNPRlNYSoTYES1jYbEZV0I35BgXZa_ZSw4XvbeUZVCGsEIV11lSwRpGxICHfR17OapngE64ECORg2QMxYs6lyXb1lFWKql56C_7Vsumh6FZQtSicPQ2yRbdVV4YiTlvmgMp_THtLryA20SNf7dvAoPwG-sBEo_pjejZypjloUvJ-4-3nP1Q1uP3ckberODEL0ku1zwNxZP-sTpJ-4hEVCCqo-GZeD3WUZHi7af-9T9DT_5BT1SiXZw&amp;amp;u_aref=s4IfmXNxRHC91hxwGaKxM2H4z1I%3D&lt;/p&gt;
&lt;p&gt;一、查询执行最慢的sql
select *
from (select sa.SQL_TEXT,
sa.SQL_FULLTEXT,
sa.EXECUTIONS &quot;执行次数&quot;,
round(sa.ELAPSED_TIME / 1000000, 2) &quot;总执行时间&quot;,
round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) &quot;平均执行时间&quot;,
sa.COMMAND_TYPE,
sa.PARSING_USER_ID &quot;用户ID&quot;,
u.username &quot;用户名&quot;,
sa.HASH_VALUE
from v$sqlarea sa
left join all_users u
on sa.PARSING_USER_ID = u.user_id
where sa.EXECUTIONS &amp;gt; 0
order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc)
where rownum &amp;lt;= 50;&lt;/p&gt;
&lt;p&gt;二、查询次数最多的 sql
select *
from (select s.SQL_TEXT,
s.EXECUTIONS &quot;执行次数&quot;,
s.PARSING_USER_ID &quot;用户名&quot;,
rank() over(order by EXECUTIONS desc) EXEC_RANK
from v$sql s
left join all_users u
on u.USER_ID = s.PARSING_USER_ID) t
where exec_rank &amp;lt;= 100;&lt;/p&gt;
&lt;p&gt;三、Oracle查询SQL语句执行的耗时
select a.sql_text SQL语句,
b.etime 执行耗时,
c.user_id 用户ID,
c.SAMPLE_TIME 执行时间,
c.INSTANCE_NUMBER 实例数,
u.username 用户名, a.sql_id SQL编号
from dba_hist_sqltext a,
(select sql_id, ELAPSED_TIME_DELTA / 1000000 as etime
from dba_hist_sqlstat
where ELAPSED_TIME_DELTA / 1000000 &amp;gt;= 1) b,
dba_hist_active_sess_history c,
dba_users u
where a.sql_id = b.sql_id
and u.username &amp;lt;&amp;gt; &apos;SYS&apos;
and c.user_id = u.user_id
and b.sql_id = c.sql_id
-- and a.sql_text like &apos;%insert into  select  %&apos;
order by  SAMPLE_TIME desc,
b.etime desc;&lt;/p&gt;
&lt;p&gt;四：定位系统里面哪些SQL脚本存在TABLE ACCESS FULL行为
select *
from v$sql_plan v
where v.operation = &apos;TABLE ACCESS&apos;
and v.OPTIONS = &apos;FULL&apos;
and v.OBJECT_OWNER &amp;lt;&amp;gt; &apos;SYS&apos;;&lt;/p&gt;
&lt;p&gt;select s.SQL_TEXT
from v$sqlarea s
where s.SQL_ID = &apos;4dpd97jh2gzsd&apos;
and s.HASH_VALUE = &apos;1613233933&apos;
and s.PLAN_HASH_VALUE = &apos;3592287464&apos;;
或
select s.SQL_TEXT from v$sqlarea s where s.ADDRESS = &apos;00000000A65D2318&apos;;&lt;/p&gt;
</content:encoded></item><item><title>达梦数据页校验错误排查</title><link>https://blog.newworld.help/posts/%E8%BE%BE%E6%A2%A6%E6%95%B0%E6%8D%AE%E9%A1%B5%E6%A0%A1%E9%AA%8C%E9%94%99%E8%AF%AF%E6%8E%92%E6%9F%A5/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E8%BE%BE%E6%A2%A6%E6%95%B0%E6%8D%AE%E9%A1%B5%E6%A0%A1%E9%AA%8C%E9%94%99%E8%AF%AF%E6%8E%92%E6%9F%A5/</guid><description>2025-12-25 10:46:06.973 [ERROR] database P0000013411 T0000000000000013</description><pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2025-12-25 10:46:06.973 [ERROR] database P0000013411 T0000000000000013411  Server page check error! ts_id(1) file_id(0) page_no(253003) page_type(0) index_id(0)&lt;/p&gt;
&lt;p&gt;2025-12-26 12:34:41.828 [ERROR] database P0000013830 T0000000000000016968  Server page check error! ts_id(1) file_id(0) page_no(205851) page_type(0) index_id(0)&lt;/p&gt;
&lt;p&gt;./dmrdc sfile=/dmdata/dmcore/core-dm_sql_thd-10742-5
会生成一个
core-dm_sql_thd-10742-5_tmp文件&lt;/p&gt;
&lt;p&gt;gdb dmserver /dmdata/dmcore/core-dm_sql_thd-10742-5
bt&lt;/p&gt;
&lt;p&gt;[Current thread is 1 (LWP 11254)]&lt;/p&gt;
&lt;p&gt;warning: File &quot;/usr/lib64/libthread_db-1.0.so&quot; auto-loading has been declined by your `auto-load safe-path&apos; set to &quot;$debugdir:$datadir/auto-
load&quot;.
To enable execution of this file add
add-auto-load-safe-path /usr/lib64/libthread_db-1.0.so
line to your configuration file &quot;/home/dmdba/.gdbinit&quot;.
To completely disable this security protection add
set auto-load safe-path /
line to your configuration file &quot;/home/dmdba/.gdbinit&quot;.
For more information about this security protection see the
&quot;Auto-loading safe path&quot; section in the GDB manual.  E.g., run from the shell:
info &quot;(gdb)Auto-loading safe path&quot;&lt;/p&gt;
&lt;p&gt;warning: Unable to find libthread_db matching inferior&apos;s thread library, thread debugging will not be available.&lt;/p&gt;
&lt;p&gt;warning: File &quot;/usr/lib64/libthread_db-1.0.so&quot; auto-loading has been declined by your `auto-load safe-path&apos; set to &quot;$debugdir:$datadir/auto-
load&quot;.&lt;/p&gt;
&lt;p&gt;warning: Unable to find libthread_db matching inferior&apos;s thread library, thread debugging will not be available.
Core was generated by `/dmdata/dmdata/dmdbms/bin/dmserver path=/dmdata/dmdata/data/DAMENG/dm.ini -noco&apos;.
Program terminated with signal SIGTRAP, Trace/breakpoint trap.
#0  0x000000000187d1d8 in assert_fun ()
[Current thread is 1 (LWP 11254)]
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.28-36.1.ky10.aarch64 libgcc-7.3.0-20190804.h30.ky10.aarch64 libicu-62.1-5.ky
10.aarch64 libstdc++-7.3.0-20190804.h30.ky10.aarch64 sssd-2.2.2-5.p01.ky10.aarch64 xz-libs-5.2.4-10.ky10.aarch64 zlib-1.2.11-17.&lt;/p&gt;
&lt;p&gt;10.aarch64 libstdc++-7.3.0-20190804.h30.ky10.aarch64 sssd-2.2.2-5.p01.ky10.aarch64 xz-libs-5.2.4-10.ky10.aarch64 zlib-1.2.11-17.1.ky10.aarch
64
(gdb) bt
#0  0x000000000187d1d8 in assert_fun ()
#1  0x000000000187d29c in sigterm_handler ()
#2  &amp;lt;signal handler called&amp;gt;
#3  0x0000000000b08258 in pseg_page_get_trx_end ()
#4  0x0000000000b0bb54 in pseg_page_check_valid ()
#5  0x0000000000ad8e5c in trx4_tuple_sec_get_prev_trx_id ()
#6  0x0000000000b029c4 in undo_upd ()
#7  0x0000000000b038e4 in undo_exec_low ()
#8  0x0000000000b0b04c in pseg_rollback_urec ()
#9  0x0000000000b0f9e8 in pseg_rollback ()
#10 0x0000000000af20c0 in trx4_rollback_to_savepnt_low ()
#11 0x0000000000af25b4 in trx4_rollback_to_savepnt_fun ()
#12 0x0000000000af0b68 in trx4_rollback ()
#13 0x00000000018b42b0 in ntsk_process_rollback ()
#14 0x00000000018ccf14 in ntsk_process_cop ()
#15 0x00000000017abff8 in uthr_db_main_for_sess ()
#16 0x0000fffc539a88cc in ?? () from /lib64/libpthread.so.0
#17 0x0000fffc5363a1ec in ?? () from /lib64/libc.so.6
(gdb)&lt;/p&gt;
&lt;p&gt;core-dm_sql_thd-10742-5_tmp文件查看(LWP 11254)
定位到sql&lt;/p&gt;
&lt;p&gt;修改PSEG_RECV                       = 0&lt;/p&gt;
</content:encoded></item><item><title>ob节点故障处理</title><link>https://blog.newworld.help/posts/ob%E8%8A%82%E7%82%B9%E6%95%85%E9%9A%9C%E5%A4%84%E7%90%86/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ob%E8%8A%82%E7%82%B9%E6%95%85%E9%9A%9C%E5%A4%84%E7%90%86/</guid><description>1.修改故障节点租户的locality分布</description><pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;参考：
https://open.oceanbase.com/blog/22366495280&lt;/p&gt;
&lt;p&gt;#######################################################黑屏操作&lt;/p&gt;
&lt;p&gt;1.修改故障节点租户的locality分布
SELECT T3.TENANT_ID,T3.TENANT_NAME, T3.LOCALITY
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
JOIN OCEANBASE.DBA_OB_TENANTS T3
ON T1.TENANT_ID=T3.TENANT_ID
WHERE T2.SVR_IP = &apos;192.168.1.15&apos; -- 故障IP
AND T3.tenant_type in (&apos;USER&apos;,&apos;SYS&apos;)
AND T3.STATUS = &apos;NORMAL&apos;;&lt;/p&gt;
&lt;p&gt;+-----------+-------------+---------------------------------------------+
| TENANT_ID | TENANT_NAME | LOCALITY                                    |
+-----------+-------------+---------------------------------------------+
|         1 | sys         | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
|      1002 | o_user      | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
|      1004 | demo      | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
+-----------+-------------+---------------------------------------------+&lt;/p&gt;
&lt;p&gt;alter tenant sys locality=&apos;FULL{1}@zone1, FULL{1}@zone2&apos;;
alter tenant o_user locality=&apos;FULL{1}@zone1, FULL{1}@zone2&apos;;&lt;/p&gt;
&lt;p&gt;#拼接好的sql
SELECT CONCAT(CONCAT(CONCAT(CONCAT(&apos;ALTER TENANT &apos;,tenant_name),&apos; locality=&apos;&apos;&apos;),
CASE WHEN substr(locality,9,5) = T2.zone
THEN REPLACE(locality, CONCAT(&apos;FULL{1}@&apos;,CONCAT(T2.zone,&apos;, &apos;)), &apos;&apos;)
WHEN locality LIKE &apos;%zone1, FULL{1}@zone2, FULL{1}@zone3%&apos;
THEN REPLACE(locality, CONCAT(&apos;, FULL{1}@&apos;,T2.zone), &apos;&apos;)
ELSE locality END), &apos;&apos;&apos;;&apos;) AS alter_sql
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
JOIN OCEANBASE.DBA_OB_TENANTS T3
ON T1.TENANT_ID=T3.TENANT_ID
WHERE T2.SVR_IP = &apos;192.168.1.15&apos;  -- 故障IP
AND T3.tenant_type in (&apos;USER&apos;,&apos;SYS&apos;)
AND T3.STATUS = &apos;NORMAL&apos;;&lt;/p&gt;
&lt;p&gt;#做完这一步，ocp上就看不到租户的故障节点的副本了&lt;/p&gt;
&lt;p&gt;2.检查任务进度
SELECT START_TIME, TENANT_ID, JOB_ID, JOB_STATUS, PROGRESS
FROM oceanbase.DBA_OB_TENANT_JOBS
WHERE JOB_TYPE = &apos;ALTER_TENANT_LOCALITY&apos;
AND START_TIME &amp;gt;= DATE_SUB(NOW(), INTERVAL 1 HOUR);
-- AND JOB_STATUS &amp;lt;&amp;gt; &apos;SUCCESS&apos;&lt;/p&gt;
&lt;p&gt;+----------------------------+-----------+--------+------------+----------+
| START_TIME                 | TENANT_ID | JOB_ID | JOB_STATUS | PROGRESS |
+----------------------------+-----------+--------+------------+----------+
| 2025-12-30 09:57:42.067705 |         1 |     15 | SUCCESS    |      100 |
| 2025-12-30 09:57:42.137246 |      1002 |     16 | SUCCESS    |      100 |
| 2025-12-30 09:57:42.199549 |      1004 |     17 | SUCCESS    |      100 |
+----------------------------+-----------+--------+------------+----------+&lt;/p&gt;
&lt;p&gt;3.查看资源池，分裂zone_list
SELECT T1.NAME, T1.TENANT_ID, T1.ZONE_LIST
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
WHERE SVR_IP = &apos;192.168.1.15&apos;; -- 故障IP&lt;/p&gt;
&lt;p&gt;+--------------------------+-----------+-------------------+
| NAME                     | TENANT_ID | ZONE_LIST         |
+--------------------------+-----------+-------------------+
| pool_o_user_zone3_hnm    |      1002 | zone3             |
| pool_sys_zone3_ukc       |         1 | zone3             |
| demo    |      1004 | zone3             |
| pool_test_z123           |      NULL | zone1;zone2;zone3 |
+--------------------------+-----------+-------------------+&lt;/p&gt;
&lt;p&gt;#黑屏创建的RESOURCE以及sys租户,需要对资源进行分裂
ALTER RESOURCE POOL pool_test_z123 SPLIT INTO (&apos;pool_test_z1&apos;,&apos;pool_test_z2&apos;,&apos;pool_test_z3&apos;) ON (&apos;zone1&apos;,&apos;zone2&apos;,&apos;zone3&apos;);&lt;/p&gt;
&lt;p&gt;#拼接好的sql
SELECT DISTINCT
CONCAT(&apos;ALTER RESOURCE POOL &apos;,NAME,&apos; SPLIT INTO (&apos;&apos;&apos;,
REPLACE(REPLACE(ZONE_LIST, &apos;zone&apos;,
CONCAT(REPLACE(NAME, &apos;pool_test_&apos;, &apos;&apos;),
&apos;_zone&apos;)), &apos;;&apos;, &apos;&apos;&apos;,&apos;&apos;&apos;),&apos;&apos;&apos;) ON (&apos;&apos;&apos;,
REPLACE(ZONE_LIST, &apos;;&apos;, &apos;&apos;&apos;,&apos;&apos;&apos;),&apos;&apos;&apos;);&apos;) AS alter_sql
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2 ON T1.RESOURCE_POOL_ID = T2.RESOURCE_POOL_ID
WHERE ZONE_LIST LIKE &apos;%;%&apos;
AND T2.SVR_IP = &apos;192.168.1.15&apos; -- 故障IP&lt;/p&gt;
&lt;p&gt;4.修改租户资源池
SELECT T1.NAME, T1.TENANT_ID, T1.ZONE_LIST
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
JOIN OCEANBASE.DBA_OB_TENANTS T3
ON T1.TENANT_ID=T3.TENANT_ID
WHERE T2.SVR_IP &amp;lt;&amp;gt; &apos;192.168.1.15&apos;; -- 故障IP&lt;/p&gt;
&lt;p&gt;+-------------+--------------------------+
| TENANT_NAME | NAME                     |
+-------------+--------------------------+
| o_user      | pool_o_user_zone1_wxt    |
| o_user      | pool_o_user_zone2_dmk    |
| demo      | demo    |
| demo      | demo    |
| sys         | pool_sys_zone1_lrc       |
| sys         | pool_sys_zone2_jzo       |
+-------------+--------------------------+&lt;/p&gt;
&lt;p&gt;ALTER TENANT sys resource_pool_list=(&apos;pool_sys_zone1_lrc&apos;,&apos;pool_sys_zone2_jzo&apos;);
ALTER TENANT o_user resource_pool_list=(&apos;pool_o_user_zone1_wxt&apos;,&apos;pool_o_user_zone2_dmk&apos;);&lt;/p&gt;
&lt;p&gt;#拼接好的sql
SELECT CONCAT(&apos;ALTER TENANT &apos;,
T3.TENANT_NAME,
&apos; resource_pool_list=(&apos;,GROUP_CONCAT(CONCAT(&apos;&apos;&apos;, T1.NAME, &apos;&apos;&apos;)
ORDER BY T1.NAME SEPARATOR &apos;,&apos;),&apos;);&apos;) AS alter_sql
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
JOIN OCEANBASE.DBA_OB_TENANTS T3
ON T1.TENANT_ID=T3.TENANT_ID
WHERE T2.SVR_IP &amp;lt;&amp;gt; &apos;192.168.1.15&apos; -- 故障IP
GROUP BY T3.TENANT_NAME;&lt;/p&gt;
&lt;p&gt;5.删除故障节点上的资源池
DROP RESOURCE POOL IF EXISTS pool_sys_zone3_ukc;
DROP RESOURCE POOL IF EXISTS pool_o_user_zone3_hnm;&lt;/p&gt;
&lt;p&gt;#拼接好的sql
SELECT CONCAT(CONCAT(&apos;DROP RESOURCE POOL IF EXISTS &apos;,NAME),&apos;;&apos;)alter_sql
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
WHERE SVR_IP = &apos;192.168.1.15&apos;; -- 故障IP&lt;/p&gt;
&lt;p&gt;#不修改租户资源池，这步会报错：
ERROR 4626 (HY000): resource pool &apos;pool_o_user_zone3_hnm&apos; has already been granted to a tenant&lt;/p&gt;
&lt;p&gt;6.删除需要维护的节点&lt;/p&gt;
&lt;p&gt;6.1.记录
#黑屏删除observer节点后需要进行手工rm目录删除，这里先记录路径
SELECT SVR_IP,NAME,VALUE
FROM OCEANBASE.GV$OB_PARAMETERS
WHERE NAME = &apos;data_dir&apos;
AND SVR_IP=&apos;192.168.1.15&apos;
+---------------+-----------------------+----------------------------------------------------------+
| SVR_IP        | NAME                  | VALUE                                                    |
+---------------+-----------------------+----------------------------------------------------------+
| 192.168.1.15 | data_dir              | /软件路径/oceanbase/store/集群名                         |
+---------------+-----------------------+----------------------------------------------------------+&lt;/p&gt;
&lt;p&gt;ll /软件路径/oceanbase/store/集群名
total 0
lrwxrwxrwx 1 root root 27 Dec  6 11:38 clog -&amp;gt; /clog路径/集群名/clog
lrwxrwxrwx 1 root root 28 Dec  6 11:38 slog -&amp;gt; /数据盘路径/集群名/slog
lrwxrwxrwx 1 root root 31 Dec  6 11:38 sstable -&amp;gt; /数据盘路径/集群名/sstable&lt;/p&gt;
&lt;p&gt;6.2.删除故障节点
ALTER SYSTEM DELETE SERVER &apos;192.168.1.15:2882&apos; ZONE &apos;zone3&apos;;&lt;/p&gt;
&lt;h1&gt;这步建议还是ocp去做，否则后面需要手工删除目录&lt;/h1&gt;
&lt;p&gt;#如果租户副本locality分布没改，会报错：
ERROR 4734 (HY000): can not migrate out unit &apos;1002&apos;, no other available servers on zone &apos;zone3&apos;, delete server not allowed
#如果没删租户的资源池，会报错：
ERROR 1210 (HY000): Invalid argument&lt;/p&gt;
&lt;p&gt;6.3.删除目录
rm -rf /clog路径/集群名
rm -rf /数据盘路径/集群名
rm -rf /软件路径/oceanbase&lt;/p&gt;
&lt;p&gt;7.验证删除节点
SELECT * FROM OCEANBASE.__ALL_ROOTSERVICE_JOB WHERE JOB_TYPE = &apos;DELETE_SERVER&apos;;
SELECT * FROM OCEANBASE.DBA_OB_SERVERS;
SELECT * FROM OCEANBASE.__ALL_SERVER;&lt;/p&gt;
&lt;p&gt;8.OCP添加节点前操作&lt;/p&gt;
&lt;p&gt;8.1.OCP检查
点击集群→集群名→拓扑图&lt;/p&gt;
&lt;p&gt;#检查集群是否已经删除，涉及的zone是否正常，如果ocp上zone卡死，备用启停方案
ALTER SYSTEM START ZONE zone3;
ALTER SYSTEM STOP ZONE zone3;&lt;/p&gt;
&lt;p&gt;#黑屏验证
SELECT * FROM oceanbase.DBA_OB_ZONES;&lt;/p&gt;
&lt;p&gt;8.1.2.OCP上删除故障节点
点击集群→集群名→概览→OBServer列表→释放机器&lt;/p&gt;
&lt;p&gt;报错：
OceanBase集群xxxxx:1764985486当前状态[OPERATING]不支持此操作&lt;/p&gt;
&lt;p&gt;#如果集群状态一直为&quot;运维中&quot;,验证删除节点DBA_OB_SERVERS、__ALL_SERVER表确定没有故障机器
#修改ocp的meta租户的ocp库的ob_cluster表的状态
SELECT NAME,STATUS
FROM OCP.OB_CLUSTER;
+-----------------+-----------+
| name            | status    |
+-----------------+-----------+
| OCP集群         | RUNNING   |
| 其他集群        | RUNNING   |
| 故障集群        | OPERATING |
+-----------------+-----------+&lt;/p&gt;
&lt;p&gt;#修改集群状态
UPDATE OCP.OB_CLUSTER SET STATUS=&apos;RUNNING&apos; WHERE NAME=&apos;故障集群&apos;;&lt;/p&gt;
&lt;p&gt;9.使用OCP部署新节点
点击集群→集群名→拓扑图→添加 OBServer
#验证
SELECT &apos;新节点添加成功&apos;
FROM OCEANBASE.DBA_OB_SERVERS
WHERE STATUS=&apos;ACTIVE&apos;
GROUP BY STATUS
HAVING MAX(CREATE_TIME)&amp;gt;(SELECT MAX(gmt_create)
FROM OCEANBASE.__ALL_ROOTSERVICE_JOB T1
WHERE JOB_TYPE = &apos;DELETE_SERVER&apos;
AND progress=100
AND job_status=&apos;SUCCESS&apos;);&lt;/p&gt;
&lt;p&gt;10.查询需要补副本的租户
#需要补副本的租户
SELECT DISTINCT unit_tenant_name
FROM (SELECT SUBSTRING(REPLACE(T1.NAME, &apos;pool_&apos;, &apos;&apos;), 1, LOCATE(&apos;&lt;em&gt;zone&apos;, REPLACE(T1.NAME, &apos;pool&lt;/em&gt;&apos;, &apos;&apos;)) - 1)unit_tenant_name,
T1.TENANT_ID, T1.ZONE_LIST
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
WHERE TENANT_ID IS NOT NULL
GROUP BY T1.TENANT_ID, T1.ZONE_LIST
HAVING MOD(COUNT(&lt;em&gt;),2)&amp;lt;= (SELECT MOD(COUNT(&lt;/em&gt;),2) FROM OCEANBASE.DBA_OB_SERVERS));&lt;/p&gt;
&lt;p&gt;+------------------+
| unit_tenant_name |
+------------------+
| o_user           |
| demo           |
| sys              |
+------------------+&lt;/p&gt;
&lt;p&gt;11.创建RESOURCE_POOL
#unit使用之前ocp创建的unit，不需要额外创建unit
create resource pool pool_o_user_zone3_hnm unit=config_o_user_zone3_S1C_8G_hnm,unit_num=1,zone_list=(&apos;zone3&apos;);
create resource pool pool_sys_zone3_ukc unit=config_sys_zone3_S1C_8G_ukc,unit_num=1,zone_list=(&apos;zone3&apos;);
create resource pool demo unit=demo,unit_num=1,zone_list=(&apos;zone3&apos;);&lt;/p&gt;
&lt;p&gt;#拼接好的sql
SELECT CONCAT(&apos;create resource pool &apos;,
REPLACE(CONCAT(SUBSTRING_INDEX(T2.NAME, &apos;&lt;em&gt;zone&apos;, 1),&apos;&lt;em&gt;zone&apos;,
SUBSTRING_INDEX(SUBSTRING_INDEX(T2.NAME, &apos;&lt;em&gt;zone&apos;, -1), &apos;&lt;/em&gt;&apos;, 1),&apos;&lt;/em&gt;&apos;,
SUBSTRING_INDEX(T2.NAME, &apos;&lt;/em&gt;&apos;, -1) ),&apos;config_&apos;, &apos;pool_&apos;),
&apos; unit=&apos;,T2.NAME,&apos;,unit_num=1,zone_list=(&apos;&apos;&apos;,REGEXP_SUBSTR(T2.NAME, &apos;zone[0-9]+&apos;),&apos;&apos;&apos;);&apos;)alter_sql
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
RIGHT JOIN OCEANBASE.DBA_OB_UNIT_CONFIGS T2
ON SUBSTRING(REPLACE(T1.NAME, &apos;pool_&apos;, &apos;&apos;), 1, LOCATE(&apos;&lt;em&gt;zone&apos;, REPLACE(T1.NAME, &apos;pool&lt;/em&gt;&apos;, &apos;&apos;)) - 1)
= SUBSTRING(REPLACE(T2.NAME, &apos;config_&apos;, &apos;&apos;), 1, LOCATE(&apos;&lt;em&gt;zone&apos;, REPLACE(T2.NAME, &apos;config&lt;/em&gt;&apos;, &apos;&apos;)) - 1)
AND T2.NAME LIKE CONCAT(&apos;%&apos;, T1.ZONE_LIST, &apos;%&apos;)
WHERE LENGTH(SUBSTRING(REPLACE(T2.NAME, &apos;config_&apos;, &apos;&apos;), 1, LOCATE(&apos;&lt;em&gt;zone&apos;, REPLACE(T2.NAME, &apos;config&lt;/em&gt;&apos;, &apos;&apos;)) - 1))&amp;gt;=1
AND T1.NAME IS NULL;&lt;/p&gt;
&lt;p&gt;12.修改租户资源池
ALTER TENANT demo resource_pool_list=(&apos;demo&apos;,&apos;demo&apos;,&apos;demo&apos;);
ALTER TENANT sys resource_pool_list=(&apos;pool_sys_zone1_lrc&apos;,&apos;pool_sys_zone2_jzo&apos;,&apos;pool_sys_zone3_ukc&apos;);
ALTER TENANT o_user resource_pool_list=(&apos;pool_o_user_zone1_wxt&apos;,&apos;pool_o_user_zone2_dmk&apos;,&apos;pool_o_user_zone3_hnm&apos;);&lt;/p&gt;
&lt;p&gt;#拼接好的sql
SELECT CONCAT(&apos;ALTER TENANT &apos;,
SUBSTRING(REPLACE(T1.NAME, &apos;pool_&apos;, &apos;&apos;), 1, LOCATE(&apos;&lt;em&gt;zone&apos;, REPLACE(T1.NAME, &apos;pool&lt;/em&gt;&apos;, &apos;&apos;)) - 1),
&apos; resource_pool_list=(&apos;&apos;&apos;,GROUP_CONCAT(NAME ORDER BY T1.ZONE_LIST SEPARATOR &apos;&apos;&apos;,&apos;&apos;&apos;),&apos;&apos;&apos;);&apos;) AS alter_sql
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.&lt;em&gt;&lt;em&gt;ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
WHERE LENGTH(SUBSTRING(REPLACE(T1.NAME, &apos;pool&lt;/em&gt;&apos;, &apos;&apos;), 1, LOCATE(&apos;&lt;em&gt;zone&apos;, REPLACE(T1.NAME, &apos;pool&lt;/em&gt;&apos;, &apos;&apos;)) - 1))&amp;gt;=1
GROUP BY SUBSTRING(REPLACE(T1.NAME, &apos;pool&lt;/em&gt;&apos;, &apos;&apos;), 1, LOCATE(&apos;&lt;em&gt;zone&apos;, REPLACE(T1.NAME, &apos;pool&lt;/em&gt;&apos;, &apos;&apos;)) - 1);&lt;/p&gt;
&lt;p&gt;13.修改租户的locality分布
SELECT T3.TENANT_ID,T3.TENANT_NAME, T3.LOCALITY,T1.ZONE_LIST
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
JOIN OCEANBASE.DBA_OB_TENANTS T3
ON T1.TENANT_ID=T3.TENANT_ID
WHERE T2.SVR_IP = &apos;192.168.1.15&apos; -- 故障IP
AND T3.tenant_type in (&apos;USER&apos;,&apos;SYS&apos;)
AND T3.STATUS = &apos;NORMAL&apos;;&lt;/p&gt;
&lt;p&gt;+-----------+-------------+---------------------------------------------+
| TENANT_ID | TENANT_NAME | LOCALITY                                    |
+-----------+-------------+---------------------------------------------+
|         1 | sys         | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
|      1002 | o_user      | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
|      1004 | demo      | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
+-----------+-------------+---------------------------------------------+&lt;/p&gt;
&lt;p&gt;alter tenant sys locality=&apos;FULL{1}@zone1, FULL{1}@zone2&apos;;
alter tenant o_user locality=&apos;FULL{1}@zone1, FULL{1}@zone2&apos;;&lt;/p&gt;
&lt;p&gt;#拼接好的sql
SELECT CONCAT(CONCAT(&apos;alter tenant &apos;,T3.TENANT_NAME,&apos; locality=&apos;&apos;&apos;),
CONCAT(T3.LOCALITY,&apos;, FULL{1}@&apos;,T1.ZONE_LIST),&apos;&apos;&apos;;&apos;) alter_sql
FROM OCEANBASE.DBA_OB_RESOURCE_POOLS T1
JOIN OCEANBASE.__ALL_UNIT T2
ON T1.RESOURCE_POOL_ID=T2.RESOURCE_POOL_ID
JOIN OCEANBASE.DBA_OB_TENANTS T3
ON T1.TENANT_ID=T3.TENANT_ID
WHERE T2.SVR_IP = &apos;192.168.1.15&apos; -- 故障IP
AND T3.tenant_type in (&apos;USER&apos;,&apos;SYS&apos;)
AND T3.STATUS = &apos;NORMAL&apos;;&lt;/p&gt;
&lt;p&gt;14.检查任务进度
SELECT START_TIME, TENANT_ID, JOB_ID, JOB_STATUS, PROGRESS
FROM oceanbase.DBA_OB_TENANT_JOBS
WHERE JOB_TYPE = &apos;ALTER_TENANT_LOCALITY&apos;
AND START_TIME &amp;gt;= DATE_SUB(NOW(), INTERVAL 1 HOUR);
-- AND JOB_STATUS &amp;lt;&amp;gt; &apos;SUCCESS&apos;&lt;/p&gt;
&lt;p&gt;+----------------------------+-----------+--------+------------+----------+
| START_TIME                 | TENANT_ID | JOB_ID | JOB_STATUS | PROGRESS |
+----------------------------+-----------+--------+------------+----------+
| 2025-12-31 12:16:42.018482 |      1002 |     26 | SUCCESS    |      100 |
| 2025-12-31 12:16:42.101309 |         1 |     27 | SUCCESS    |      100 |
| 2025-12-31 12:16:42.179878 |      1004 |     28 | SUCCESS    |      100 |
+----------------------------+-----------+--------+------------+----------+&lt;/p&gt;
</content:encoded></item><item><title>ob到o</title><link>https://blog.newworld.help/posts/ob%E5%88%B0o/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ob%E5%88%B0o/</guid><description>类型	               支持的操作</description><pubDate>Wed, 14 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;参考文档:
https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000000091379&lt;/p&gt;
&lt;p&gt;支持介绍
使用限制4.2企业版
oms使用前提
oms操作步骤
#########################################支持介绍&lt;/p&gt;
&lt;p&gt;类型	               支持的操作
单主库	               结构迁移 + 全量迁移 + 增量同步+ 全量校验 + 反向增量
单备库	               不支持将单备库的 Oracle 数据源作为数据迁移的目标端
主备库	               主库：支持结构迁移 + 全量迁移 + 增量同步
备库：支持全量校验 + 反向增量&lt;/p&gt;
&lt;p&gt;同时，OMS 支持将多个 OceanBase 数据库 Oracle 租户的表数据汇聚至 Oracle 数据库的同一张表中，
其中无需结构迁移，只需要进行全量迁移和增量同步。该汇聚同步功能的使用限制如下：&lt;/p&gt;
&lt;p&gt;对于全量迁移和增量同步，源端有的列，目标端必须有。如果不满足该要求，OMS 会报错。
主键列在源端表中必须存在。
目标表中的列，可以存在源端不存在的列。&lt;/p&gt;
&lt;p&gt;迁移类型	描述
结构迁移	结构迁移任务开始后，OMS 会迁移源库中的数据对象定义（表、索引、约束、注释和视图等）
至目标端数据库中，并自动过滤临时表。
全量迁移	全量迁移任务开始后，OMS 会迁移源库表的存量数据至目标端数据库对应的表中。如果选择 全量迁移，
建议您在迁移数据前，收集 OceanBase 数据库 Oracle 租户的统计信息。详情请参见 手动收集统计信息。
增量同步	增量同步任务开始后，OMS 会同步源库发生变化的数据（新增、修改或删除）至目标端数据库对应的表中。
增量同步 包括 同步 DML 和 同步 DDL，您可以根据需求进行选择。
当源端与目标端数据库字符集编码不一致时，OMS 不支持表结构字段变更。
同步 DDL 的详情请参见 OceanBase 数据库 Oracle 租户至 Oracle 数据库的同步 DDL。
增量同步 的使用限制如下：
如果您选择了 同步 DDL，当源端数据库发生 OMS 未支持的同步 DDL 操作时，会存在数据迁移中断的风险。
如果 DDL 操作为新增列，建议您设置该列的属性为 Null，会存在数据迁移中断的风险。&lt;/p&gt;
&lt;p&gt;全量校验	在全量迁移完成、增量数据同步至目标端并与源端基本追平后，OMS 会自动发起一轮针对
源库配置的数据表和目标表的全量数据校验任务。
如果选择 全量校验，建议您在全量校验开始前，收集 OceanBase 数据库 Oracle 租户的统计信息，
并使用 GATHER_SCHEMA_STATS 或 GATHER_TABLE_STATS 语句收集 Oracle 数据库的统计信息。
如果您选择了 增量同步，且 同步 DML 选项中未选择所有的 DML，则 OMS 不支持本场景下的全量数据校验。&lt;/p&gt;
&lt;p&gt;反向增量	反向增量任务开始后，可以实时回流业务切换后在目标端数据库产生的变更数据至源端数据库。
以下情况均不支持选择 反向增量：
存在多表汇聚的情况。
存在 Schema 多到一映射的情况。&lt;/p&gt;
&lt;p&gt;#########################################使用限制4.2企业版
源端数据库的操作限制
请勿在结构迁移和全量迁移阶段执行库或表结构变更的 DDL 操作，否则可能造成数据迁移项目中断。&lt;/p&gt;
&lt;p&gt;目前支持 Oracle 数据库 10G/11G/12C/18C/19C 版本，12C 及以上版本包含数据库容器（Container Database，CDB）和可插拔数据库（Pluggable Database，PDB）。
不支持表中全部列均为 LOB 类型（BLOB/CLOB/NCLOB）的增量数据迁移。
不支持迁移 OceanBase 数据库 Oracle 租户的非模板化二级分区表至 Oracle 数据库。
仅支持有主键表的多表汇聚。
OMS 暂不支持基于表达式的索引。
目标端是数据库的情况下，OMS 不支持目标端存在 Trigger。如果存在，可能导致数据迁移失败。
源端 OceanBase 数据库为 1.4.x 版本时，OMS 不支持主键中包含 FLOAT 和 DOUBLE 类型。
数据源标识和用户账号等，在 OMS 系统内全局唯一。
Oracle 数据库的增量日志解析最大支持 5T/天。
Oracle 数据库 11G 及以下版本不支持创建超过 30 个字节的数据库对象。请注意迁移 OceanBase 数据库 Oracle 租户的数据至 Oracle 数据库时，不能在源端创建大于本限制的数据库对象。
OceanBase 数据库 Oracle 租户至 Oracle 数据库 12C 及以上版本的反向增量步骤，OMS 不支持迁移超过 30 个字节的数据库对象（包括 Schema、表和列等）。如果您需要迁移超过 30 个字节的数据库对象，请参见 如何迁移超过 30 个字节的 Oracle 数据库对象。
OMS 仅支持迁移库名、表名和列名为 ASCII 码且不包含特殊字符（包括 .|&quot;&apos;`()=;/&amp;amp; 和换行）的对象。
OMS 不支持 OceanBase 备库作为源端
OceanBase 数据库 Oracle 租户至 Oracle 数据库的反向增量中，OMS 不支持 Oracle 数据库执行某些 UPDATE 命令。以下示例为一个不支持的 UPDATE 命令。
UPDATE TABLE_NAME SET KEY=KEY+1;&lt;/p&gt;
&lt;p&gt;#########################################oms使用前提&lt;/p&gt;
&lt;p&gt;1.已在目标端 Oracle 数据库创建对应的 Schema,及对应大小的表空间,及授权
select &apos;create tablespace &apos;||tablespace_name||&apos; datafile &apos;&apos;+DATA_DG&apos;&apos; size 1024M autoextend on next 100M maxsize unlimited;&apos;
SUM(bytes) / 1024 / 1024 / 1024
from  dba_segments
where owner in (&apos;oracle&apos;) --用户名
group by tablespace_name
order by 2 desc;&lt;/p&gt;
&lt;p&gt;CREATE USER oracle IDENTIFIED BY oracle DEFAULT TABLESPACE demo;&lt;/p&gt;
&lt;p&gt;GRANT CONNECT TO oracle;
GRANT CREATE VIEW TO oracle;
GRANT CREATE CLUSTER TO oracle;
GRANT CREATE INDEXTYPE TO oracle;
GRANT CREATE OPERATOR TO oracle;
GRANT CREATE PROCEDURE TO oracle;
GRANT CREATE SEQUENCE TO oracle;
GRANT CREATE TABLE TO oracle;
GRANT CREATE TRIGGER TO oracle;
GRANT CREATE TYPE TO oracle;&lt;/p&gt;
&lt;p&gt;GRANT UNLIMITED TABLESPACE TO TS;&lt;/p&gt;
&lt;p&gt;2.为源端 OceanBase 数据库 Oracle 租户和目标端 Oracle 数据库创建专用于数据迁移项目的数据库用户
以19c非 PDB,不做细致权限划分为例
1&amp;gt;创建用户
create user omsadmin identified by oraoms1# account unlock;
###ob没有 account unlock语法&lt;/p&gt;
&lt;p&gt;2&amp;gt;执行下述授权语句，为迁移用户赋予 DBA 权限。
GRANT DBA TO &amp;lt;user_name&amp;gt;;&lt;/p&gt;
&lt;p&gt;3&amp;gt;执行下述语句，赋予迁移用户对 SYS.USER$ 表的读权限。
GRANT SELECT ON SYS.USER$ TO &amp;lt;user_name&amp;gt;;&lt;/p&gt;
&lt;p&gt;3.&quot;源端业务租户&quot;中创建 __OCEANBASE_INNER_DRC_USER 用户并赋予其权限。
1&amp;gt;基本权限
CREATE USER &apos;__OCEANBASE_INNER_DRC_USER&apos; IDENTIFIED BY &quot;oraoms1#&quot;;  -- 复杂密码双引号，MySQL用户名小写创建
GRANT CREATE SESSION TO &apos;__OCEANBASE_INNER_DRC_USER&apos;;
GRANT SELECT ANY DICTIONARY TO &apos;__OCEANBASE_INNER_DRC_USER&apos;;&lt;/p&gt;
&lt;p&gt;2&amp;gt;对迁移库表的 SELECT 权限，支持以下两种赋权方式：
赋予系统权限
GRANT SELECT ANY TABLE TO &apos;__OCEANBASE_INNER_DRC_USER&apos;;
赋予对象权限（仅支持对具体库表对象赋权,常见用于MySQL租户）
GRANT SELECT ON &amp;lt;schema&amp;gt;.&amp;lt;table&amp;gt; TO &apos;__OCEANBASE_INNER_DRC_USER&apos;;&lt;/p&gt;
&lt;p&gt;4.创建 DRC 用户
读取 OceanBase 数据库的增量日志数据和数据库对象结构信息，在源端 sys 租户下创建 DRC 用户。
CREATE USER drcadmin IDENTIFIED BY oradrc1#;
GRANT SELECT ON &lt;em&gt;.&lt;/em&gt; TO drcadmin;&lt;/p&gt;
&lt;p&gt;https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000000091344&lt;/p&gt;
&lt;p&gt;5.源端-最大允许包大小检查参数修改
set global max_allowed_packet=67108864&lt;/p&gt;
&lt;p&gt;6.归档日志开启
#开之前看看有没有配置备份目录,归档存档目录和备份是同一个,3.x只能设置在一起,4.x忽略提示
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001052459
show parameters like &apos;backup_dest&apos;;&lt;/p&gt;
&lt;p&gt;#os执行,使用NFS目录,提前建好路径,否则报错I/O异常
cd /ob_data
mkdir archive
chown admin:admin archive&lt;/p&gt;
&lt;p&gt;#数据库执行log_archive_dest里的路径
alter system set log_archive_dest=&apos;LOCATION=file:///OBBACKUP/tpccarchive&apos; [TENANT=obmark_mysql_tenant];
alter system archivelog [TENANT=ALL/obmark_mysql_tenant];
参考:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001050235
回退:ALTER SYSTEM NOARCHIVELOG [TENANT = ALL/obmark_mysql_tenant];
参考:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013182&lt;/p&gt;
&lt;p&gt;#########################################oms操作步骤&lt;/p&gt;
&lt;p&gt;1.新建数据迁移项目。
登录 OMS 控制台。
在左侧导航栏，单击 数据迁移。
在 数据迁移 页面，单击右上角的 新建迁移项目。&lt;/p&gt;
&lt;p&gt;2.在 选择源和目标 页面，配置各项参数。&lt;/p&gt;
&lt;p&gt;3.单击 下一步，在 选择迁移类型 页面，配置各项参数。
迁移类型 包括 结构迁移、全量迁移、增量同步、全量校验 和 反向增量。&lt;/p&gt;
&lt;p&gt;4.（可选）单击 下一步。
源端为 OceanBase 数据库 Oracle 租户数据源时：
如果您需要进行增量同步，请配置 Configurl、用户名和密码。
如果您仅需要进行结构迁移，请配置用户名和密码。&lt;/p&gt;
&lt;p&gt;5.单击 下一步，在 选择迁移对象 页面，选择迁移对象和迁移范围。&lt;/p&gt;
&lt;p&gt;6.单击 下一步，在 迁移选项 页面，配置各项参数。&lt;/p&gt;
&lt;p&gt;7.单击 预检查，系统对数据迁移项目进行预检查。
1&amp;gt;源端-最大允许包大小检查=警告,这个能改就改,后面全量迁移太慢了
2&amp;gt;源端-禁止伪列存在检查  =警告,不清楚影响&lt;/p&gt;
&lt;p&gt;#########################################oms迁移过程&lt;/p&gt;
&lt;p&gt;1.结构迁移
1&amp;gt;已完成(有转换),ob的约束语法带有&quot;ENABLE&quot;,会将&quot;ENABLE&quot;词删除转换成DDL语句给Oracle导入
2&amp;gt;约束报错,修改名字或删除约束尝试重导新导入&lt;/p&gt;
&lt;p&gt;2.全量迁移
预估行数53,517,096
开始时间8:41,完成时间13:42,用时5小时
ob数据库unit规格:4C/16G,日志盘48G,3-3-3架构
目标端oracle资源:8C,SGA=8G,PGA=2G,使用ASMM&lt;/p&gt;
&lt;p&gt;3.增量同步
源端插入测试,目标端检查被插入表情况
oms web端同步对象统计未记录插入数据,但数据正常插入到目标服务器&lt;/p&gt;
&lt;p&gt;4.全量校验
时间太久,进度条跑到一半就跳了&lt;/p&gt;
&lt;p&gt;5.正向切换&lt;/p&gt;
&lt;p&gt;如果数据迁移项目未启用正向切换，请删除目标端数据库对应的唯一索引和伪列。如果不删除唯一索引和伪列，
会导致无法写入数据，以及往下游导入数据时，会重新生成伪列，导致与源端数据库的伪列发生冲突。&lt;/p&gt;
&lt;p&gt;如果数据迁移项目已启用正向切换，OMS 会根据数据迁移项目的类型，自动删除隐藏列和唯一索引。
详情请参见 数据迁移服务隐藏列机制说明。
https://www.oceanbase.com/docs/enterprise-oms-doc-cn-1000000000091479&lt;/p&gt;
&lt;p&gt;1.执行下述命令（其中 {schema}、{table} 需要替换），判断是否为无主键表。如果无返回结果，即可视为无主键表。&lt;/p&gt;
&lt;p&gt;SELECT 1
FROM (SELECT DC.OWNER, DC.TABLE_NAME, DC.CONSTRAINT_NAME
FROM ALL_CONS_COLUMNS DCC
JOIN ALL_CONSTRAINTS DC
ON DCC.CONSTRAINT_NAME = DC.CONSTRAINT_NAME
AND DCC.OWNER = DC.OWNER
JOIN ALL_TAB_COLUMNS DTC
ON DCC.COLUMN_NAME = DTC.COLUMN_NAME
AND DCC.OWNER = DTC.OWNER
AND DCC.TABLE_NAME = DTC.TABLE_NAME
WHERE DCC.OWNER = {schema}
AND DCC.TABLE_NAME = {table}
AND DC.CONSTRAINT_TYPE IN (&apos;U&apos;, &apos;P&apos;)
GROUP BY DC.OWNER, DC.TABLE_NAME, DC.CONSTRAINT_NAME
HAVING COUNT(*) = COUNT(CASE DTC.NULLABLE
WHEN &apos;Y&apos; THEN
NULL
ELSE
1
END)
MINUS
SELECT TABLE_OWNER, TABLE_NAME, INDEX_NAME
FROM ALL_IND_EXPRESSIONS
WHERE TABLE_OWNER = {schema}
AND TABLE_NAME = {table});&lt;/p&gt;
&lt;p&gt;2.添加隐藏列
// Oracle 数据库 12C 以前版本
ALTER TABLE &quot;{schema}&quot;.&quot;{table}&quot; ADD &quot;OMS_PK_INCRMT&quot; NUMBER;
// Oracle 数据库 12C 及以后版本
ALTER TABLE &quot;{schema}&quot;.&quot;{table}&quot; ADD &quot;OMS_PK_INCRMT&quot; NUMBER INVISIBLE;&lt;/p&gt;
&lt;p&gt;3.添加唯一索引
// 有分区字段
CREATE UNIQUE INDEX &quot;{schema}&quot;.&quot;{table}&quot; ON &quot;{schema}&quot;.&quot;{table}&quot;(&quot;{partition_col_0}&quot;, &quot;{partition_col_1}&quot;, &quot;OMS_PK_INCRMT&quot;) LOCAL;
// 没有分区字段
CREATE UNIQUE INDEX &quot;{schema}&quot;.&quot;{table}&quot; ON &quot;{schema}&quot;.&quot;{table}&quot;(&quot;OMS_PK_INCRMT&quot;);&lt;/p&gt;
&lt;p&gt;4.删除唯一索引
DROP INDEX &quot;{schema}&quot;.&quot;{table}&quot;;&lt;/p&gt;
&lt;p&gt;5.删除隐藏列
ALTER TABLE &quot;{schema}&quot;.&quot;{table}&quot; DROP COLUMN &quot;OMS_PK_INCRMT&quot;;&lt;/p&gt;
&lt;p&gt;#########################################导入存过,函数等对象
dbcat只能用来从Oracle到OceanBase导入
OceanBase到Oracle只能用obdump导出,再手动导入&lt;/p&gt;
&lt;p&gt;1.执行obdumper导出sql
obdumper -h 172.30.199.49 -P 2883 -uroot -c obcluster -t test_tenant_1 -p Root@2021 -D db1 &lt;br /&gt;
-sys-user=root --sys-password=****** -f /tmp/test_tenant_1/table_schema_meta &lt;br /&gt;
--all --ddl --skip-check-dir --skip-header
3534个对象,用时15.83分钟&lt;/p&gt;
&lt;p&gt;2.将所有除TABLE数据库定义对象,在Oracle目标端执行
#删除首位两行
sed -i -e &apos;1d&apos; -e &apos;$d&apos; file.sql
#对最后一行添加&quot;/&quot;
echo &quot;/&quot; &amp;gt;&amp;gt; file.sql&lt;/p&gt;
&lt;p&gt;#执行创建对象语句sql,一定要在指定用户下登陆执行
sqlplus oracle/oracle&lt;/p&gt;
</content:encoded></item><item><title>正则表达式re使用</title><link>https://blog.newworld.help/posts/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8Fre%E4%BD%BF%E7%94%A8/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8Fre%E4%BD%BF%E7%94%A8/</guid><description>re 是 Python 中一个用于处理正则表达式的模块，它提供了许多有用的函数和方法。以下是一些常用的 re 函数：</description><pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;re 是 Python 中一个用于处理正则表达式的模块，它提供了许多有用的函数和方法。以下是一些常用的 re 函数：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.match(pattern, string, flags=0)
用于检查字符串开头是否匹配正则表达式。如果是，返回一个匹配对象，否则返回 None。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;Hello&quot;
text = &quot;Hello, World!&quot;
result = re.match(pattern, text)
if result:
print(&quot;Match found:&quot;, result.group())
else:
print(&quot;No match&quot;)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.search(pattern, string, flags=0)
在字符串中查找第一个匹配的子串。如果找到，返回第一个匹配对象，否则返回 None。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;\d+&quot;
text = &quot;Hello, 123 World!&quot;
match = re.search(pattern, text)
if match:
print(&quot;Match found:&quot;, match.group())
else:
print(&quot;No match&quot;)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.findall(pattern, string, flags=0)
在字符串中查找所有匹配的子串，返回一个包含所有匹配的列表。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;\d+&quot;
text = &quot;Hello, 123 World! 456&quot;
matches = re.findall(pattern, text)
print(&quot;Matches found:&quot;, matches)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.finditer(pattern, string, flags=0)
在字符串中查找所有匹配的子串，并返回一个迭代器。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;\d+&quot;
text = &quot;Hello, 123 World! 456&quot;
matches = re.finditer(pattern, text)
for match in matches:
print(&quot;Match found:&quot;, match.group())&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.sub(pattern, replacement, string, count=0, flags=0)
替换匹配的子串。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;\d+&quot;
text = &quot;Hello, 123 World! 456&quot;
replacement = &quot;X&quot;
new_text = re.sub(pattern, replacement, text)
print(&quot;After replacement:&quot;, new_text)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.subn(pattern, repl, string, count=0, flags=0)
和 sub 类似，但是它返回的是替换的次数和替换后的字符串。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;\d+&quot;
text = &quot;Hello, 123 World! 456&quot;
replacement = &quot;X&quot;&lt;/p&gt;
&lt;h1&gt;使用 re.subn() 替换匹配的数字为 &quot;X&quot;&lt;/h1&gt;
&lt;p&gt;new_text, num_replacements = re.subn(pattern, replacement, text)&lt;/p&gt;
&lt;p&gt;print(&quot;After replacement:&quot;, new_text)
print(&quot;Number of replacements:&quot;, num_replacements)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.split(pattern, string, maxsplit=0, flags=0)
根据模式将字符串分割为一个列表。maxsplit 参数是分割的最大次数。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;\s+&quot;  # 匹配一个或多个空白字符（空格、制表符、换行符等）
text = &quot;Hello   World   Python&quot;
result = re.split(pattern, text)&lt;/p&gt;
&lt;p&gt;print(&quot;Split result:&quot;, result)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.escape(string)：
将字符串中的所有非字母数字字符转义。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;包含正则表达式中的特殊字符的字符串&lt;/h1&gt;
&lt;p&gt;special_characters = &quot;.*+?()|{}[]^$&quot;&lt;/p&gt;
&lt;h1&gt;使用 re.escape() 转义特殊字符&lt;/h1&gt;
&lt;p&gt;escaped_string = re.escape(special_characters)&lt;/p&gt;
&lt;h1&gt;输出转义后的字符串&lt;/h1&gt;
&lt;p&gt;print(&quot;Escaped string:&quot;, escaped_string)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.purge(pattern)：
清除正则表达式缓存中与特定模式相关的所有条目。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;编译正则表达式并缓存&lt;/h1&gt;
&lt;p&gt;pattern1 = re.compile(r&apos;\d+&apos;)
pattern2 = re.compile(r&apos;[a-zA-Z]+&apos;)&lt;/p&gt;
&lt;h1&gt;清除正则表达式的缓存&lt;/h1&gt;
&lt;p&gt;re.purge()&lt;/p&gt;
&lt;h1&gt;尝试使用已清除的缓存，这将引发异常&lt;/h1&gt;
&lt;p&gt;try:
match = pattern1.match(&apos;123&apos;)
except re.error:
print(&quot;Pattern not found in cache&quot;)&lt;/p&gt;
&lt;p&gt;try:
match = pattern2.match(&apos;abc&apos;)
except re.error:
print(&quot;Pattern not found in cache&quot;)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.groups(pattern)：
返回一个包含所有匹配的子串的元组，但是不包括组号。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;(\d{2})-(\d{2})-(\d{4})&quot;
text = &quot;Date: 30-09-2023&quot;
match = re.search(pattern, text)&lt;/p&gt;
&lt;h1&gt;通过match.groups()来访问这些捕获组的匹配结果&lt;/h1&gt;
&lt;p&gt;day, month, year = match.groups()
print(&quot;Day:&quot;, day)
print(&quot;Month:&quot;, month)
print(&quot;Year:&quot;, year)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.groupindex(pattern)：
返回一个字典，其中键是组号，值是相应组的匹配的列表。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;(?P&amp;lt;year&amp;gt;\d{4})-(?P&amp;lt;month&amp;gt;\d{2})-(?P&amp;lt;day&amp;gt;\d{2})&quot;
text = &quot;Date: 2023-09-30&quot;
match = re.search(pattern, text)&lt;/p&gt;
&lt;h1&gt;获取捕获组的名称及其对应的组号&lt;/h1&gt;
&lt;p&gt;group_index = match.re.groupindex
print(&quot;Group Index:&quot;, group_index)&lt;/p&gt;
&lt;h1&gt;输出：&lt;/h1&gt;
&lt;h1&gt;Group Index: {&apos;year&apos;: 1, &apos;month&apos;: 2, &apos;day&apos;: 3}&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;re.fullmatch(pattern, string)：
类似于 match，但是需要整个字符串都符合模式。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;\d{3}-\d{2}-\d{4}&quot;
text1 = &quot;123-45-6789&quot;
text2 = &quot;Hello, 123-45-6789&quot;
text3 = &quot;123-45-6789 is my SSN&quot;&lt;/p&gt;
&lt;p&gt;match1 = re.fullmatch(pattern, text1)
match2 = re.fullmatch(pattern, text2)
match3 = re.fullmatch(pattern, text3)&lt;/p&gt;
&lt;p&gt;print(match1)  # 输出: &amp;lt;re.Match object; span=(0, 11), match=&apos;123-45-6789&apos;&amp;gt;
print(match2)  # 输出: None
print(match3)  # 输出: None&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.compile(pattern, flags=0)
编译正则表达式模式，返回一个正则表达式对象。可以在编译时指定一些标志（如 re.IGNORECASE 或 re.MULTILINE）。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;编译正则表达式模式&lt;/h1&gt;
&lt;p&gt;pattern = re.compile(r&apos;\d+&apos;)  # 匹配一个或多个数字&lt;/p&gt;
&lt;h1&gt;使用编译后的正则表达式对象进行匹配&lt;/h1&gt;
&lt;p&gt;text = &quot;Hello, 123 World! 456&quot;
match = pattern.search(text)  # 在文本中查找匹配项&lt;/p&gt;
&lt;p&gt;if match:
print(&quot;Match found:&quot;, match.group())  # 输出：123
else:
print(&quot;No match&quot;)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;re.escape(string)：
将字符串中的所有非字母数字字符转义。转义在默认情况下是不进行的，只有当指定了适当的标志（如 re.IGNORECASE 或 re.MULTILINE）时才进行。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;包含正则表达式中的特殊字符的字符串&lt;/h1&gt;
&lt;p&gt;special_characters = &quot;.*+?()|{}[]^$&quot;&lt;/p&gt;
&lt;h1&gt;使用 re.escape() 转义特殊字符&lt;/h1&gt;
&lt;p&gt;escaped_string = re.escape(special_characters)&lt;/p&gt;
&lt;h1&gt;输出转义后的字符串&lt;/h1&gt;
&lt;p&gt;print(&quot;Escaped string:&quot;, escaped_string)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用捕获组
使用括号捕获匹配的部分。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;(\d{2})-(\d{2})-(\d{4})&quot;
text = &quot;Date: 30-09-2023&quot;
match = re.search(pattern, text)
if match:
day, month, year = match.groups()
print(&quot;Day:&quot;, day)
print(&quot;Month:&quot;, month)
print(&quot;Year:&quot;, year)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Flags
re.IGNORECASE 或 re.I: 忽略大小写。
re.MULTILINE 或 re.M: 多行模式，使 ^ 和 $ 匹配每行的开头和结尾。
re.DOTALL 或 re.S: 让 . 匹配换行符。
import re&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;pattern = r&quot;^hello&quot;
text = &quot;Hello, World!\nhello, Python&quot;
result = re.search(pattern, text, re.IGNORECASE | re.MULTILINE)
if result:
print(&quot;Match found:&quot;, result.group())
else:
print(&quot;No match&quot;)&lt;/p&gt;
&lt;p&gt;pattern：正则表达式模式。
repl：替换的字符串或可调用对象（比如函数）。
string：要搜索和替换的原始字符串。
count（可选）：替换的最大次数。默认为 0，表示替换所有匹配项。
flags（可选）：正则表达式的匹配标志。&lt;/p&gt;
</content:encoded></item><item><title>网卡配置(含vm)</title><link>https://blog.newworld.help/posts/%E7%BD%91%E5%8D%A1%E9%85%8D%E7%BD%AE%E5%90%ABvm/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E7%BD%91%E5%8D%A1%E9%85%8D%E7%BD%AE%E5%90%ABvm/</guid><description>1.排查Windows上的NAT服务有没有启动,使用DHCP排查DHCP服务有没有启动</description><pubDate>Wed, 24 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;#######################################问题排查#######################################
1.排查Windows上的NAT服务有没有启动,使用DHCP排查DHCP服务有没有启动
CMD输入services.msc&lt;/p&gt;
&lt;p&gt;2.排查Windows生成的虚拟网卡
打开“网络和 Internet”设置
更改适配器选项
找到对应的网卡,右键属性
选择Internet 协议版本 4(TCP/IPv4)
检查配置(一般自动获取ip即可)&lt;/p&gt;
&lt;p&gt;3.排查vm网络配置
选择编辑→虚拟网络编辑器
使用DHCP排查DHCP 设置(P):是否是从3到254(1是虚拟网卡,2是网关)
使用NAT排查NAT 设置(S):网关是否是2
检查:子网 IP (I):192.168.56 .0    子网掩码(M):255.255.255.0&lt;/p&gt;
&lt;p&gt;以上排查都无问题后,在虚拟机中配置网卡&lt;/p&gt;
&lt;p&gt;############################NetworkManager生成网卡
输入 nmtui
如果报错NetworkManager is not running.
systemctl start NetworkManager 启动
继续输入 nmtui
Edit a connection
ADD &amp;gt; Ethernet
名称:ens33&lt;/p&gt;
&lt;p&gt;根据下面这个模板修改重新生成的网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33&lt;/p&gt;
&lt;p&gt;DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes                                  ##改
BOOTPROTO=static                            ##dhcp是自动分配ip,static是手动分配ip
IPADDR=192.168.161.20                       ##最后三位随便写
GATEWAY=192.168.161.225                     ##跟Windows的网关保持一致,ipconfig /all,在虚拟网络编辑器的NAT设置修改,没网关连不上网
DNS1=192.168.161.225                        ##跟Windows的网关保持一致
NETMASK=255.255.255.0
PREFIX=24
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=&quot;System ens33&quot;
UUID=fc703702-4ab1-4c0e-a883-8016dbc7669b&lt;/p&gt;
&lt;p&gt;dhcp类型无ip输入下命令获得ip
dhclient&lt;/p&gt;
&lt;p&gt;############################nmcli命令详解
https://blog.csdn.net/m0_46829545/article/details/129431657&lt;/p&gt;
&lt;p&gt;nmcli device按两下Tab键，会出现备选项：&lt;/p&gt;
&lt;p&gt;connect     delete      disconnect  help        lldp        modify
monitor     reapply     set         show        status      wifi
nmcli device connect ens4f0 连接，激活当前这个网卡
nmcli device disconnect ens4f0 断开这个网卡的连接
nmcli device reapply ens4f0 重新启动网卡加载配置&lt;/p&gt;
&lt;p&gt;#######################################新虚拟机配置网卡#######################################
ens33配置net网卡,ens36配置仅主机网卡&lt;/p&gt;
&lt;p&gt;echo &apos;DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.126.196
GATEWAY=192.168.126.2
DNS1=192.168.126.2
NETMASK=255.255.255.0
PREFIX=24
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=&quot;System ens33&quot;&apos;&amp;gt; /etc/sysconfig/network-scripts/ifcfg-ens33&lt;/p&gt;
&lt;p&gt;echo &apos;DEVICE=ens36
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.62.196
NETMASK=255.255.255.0
PREFIX=24&apos;&amp;gt; /etc/sysconfig/network-scripts/ifcfg-ens36&lt;/p&gt;
&lt;p&gt;service network restart&lt;/p&gt;
&lt;p&gt;#######################################学习参考#######################################&lt;/p&gt;
&lt;p&gt;1.显示所有网络接口的信息
ip a
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a3:a5:1d brd ff:ff:ff:ff:ff:ff
inet 192.168.81.221/24 brd 192.168.81.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fea3:a51d/64 scope link
valid_lft forever preferred_lft forever
3: ens36: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:a3:a5:27 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.137/24 brd 192.168.56.255 scope global dynamic ens36
valid_lft 1766sec preferred_lft 1766sec
inet6 fe80::20c:29ff:fea3:a527/64 scope link
valid_lft forever preferred_lft forever&lt;/p&gt;
&lt;p&gt;#显示所有网络接口的状态，ifconfig -a还会显示未激活的接口
ifconfig -a
ens33: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
inet 192.168.81.221  netmask 255.255.255.0  broadcast 192.168.81.255
inet6 fe80::20c:29ff:fea3:a51d  prefixlen 64  scopeid 0x20&amp;lt;link&amp;gt;
ether 00:0c:29:a3:a5:1d  txqueuelen 1000  (Ethernet)
RX packets 622  bytes 55611 (54.3 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 562  bytes 570382 (557.0 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0&lt;/p&gt;
&lt;p&gt;ens36: flags=4163&amp;lt;UP,BROADCAST,RUNNING,MULTICAST&amp;gt;  mtu 1500
inet 192.168.56.137  netmask 255.255.255.0  broadcast 192.168.56.255
inet6 fe80::20c:29ff:fea3:a527  prefixlen 64  scopeid 0x20&amp;lt;link&amp;gt;
ether 00:0c:29:a3:a5:27  txqueuelen 1000  (Ethernet)
RX packets 186  bytes 19809 (19.3 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 35  bytes 4250 (4.1 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0&lt;/p&gt;
&lt;p&gt;lo: flags=73&amp;lt;UP,LOOPBACK,RUNNING&amp;gt;  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10&amp;lt;host&amp;gt;
loop  txqueuelen 1000  (Local Loopback)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 0  bytes 0 (0.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0&lt;/p&gt;
&lt;p&gt;2.显示当前操作系统的版本信息
cat /etc/os-release&lt;/p&gt;
&lt;p&gt;3.使用vim编辑器编辑网络接口ens33,ens36的配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
vim /etc/sysconfig/network-scripts/ifcfg-ens36&lt;/p&gt;
&lt;p&gt;4.显示ens33,ens36的配置信息
#切换到存放网络配置文件的目录
cd /etc/sysconfig/network-scripts/&lt;/p&gt;
&lt;p&gt;cat ifcfg-ens33&lt;/p&gt;
&lt;p&gt;TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static                            ##dhcp是自动分配ip,static是手动分配ip
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-p******
NAME=ens33
UUID=e33444e5-f021-4d14-8f5b-7df5d31ce990
ONBOOT=yes                                  ##改
HWADDR=00:0c:29:a3:a5:1d                    ## MAC地址必须与实际一致（通过ip addr查看）
IPADDR=192.168.81.221                       ##最后三位随便写
PREFIX=24
GATEWAY=192.168.81.2                        ##跟Windows的网关保持一致,ipconfig /all,在虚拟网络编辑器的NAT设置修改,没网关连不上网
DNS1=192.168.81.2                           ##跟Windows的网关保持一致&lt;/p&gt;
&lt;p&gt;cat ifcfg-ens36&lt;/p&gt;
&lt;p&gt;TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-p******
NAME=ens36
UUID=653367d5-364a-4456-9901-d0ef2115382d
ONBOOT=yes
HWADDR=00:0c:29:a3:a5:27
IPADDR=192.168.56.221
PREFIX=24
GATEWAY=192.168.56.2
DNS1=192.168.56.2&lt;/p&gt;
&lt;p&gt;5.立即停止并禁用NetworkManager服务
systemctl disable --now NetworkManager&lt;/p&gt;
&lt;p&gt;6.重启网络服务
systemctl restart network&lt;/p&gt;
&lt;p&gt;7.显示网络服务的状态
systemctl status network&lt;/p&gt;
&lt;p&gt;8.查看系统日志或网络服务的日志
ll /var/log/messages       #确认文件在
journalctl -xe -u network&lt;/p&gt;
&lt;p&gt;9.查找进程列表中所有与dhcp相关的进程(systemctl restart network失败检查杀会话)
配置这个的时候用 BOOTPROTO=dhcp&lt;/p&gt;
&lt;p&gt;ps -ef | grep dhc&lt;/p&gt;
&lt;p&gt;a.确定DHCP服务是否正在运行：如果找到了与dhcp相关的进程，那就说明DHCP服务正在运行。
b.确定有多少个DHCP服务正在运行：有时候，可能会有多个DHCP服务同时运行，这对网络配置来说可能会产生问题。
通过查看进程列表，可以确定有多少个DHCP服务正在运行。
c.查找对系统性能产生影响的DHCP进程：如果DHCP进程占用的系统资源过多，可能会影响到系统性能。通过查看进程列表，可以找到这些进程，并采取相应的措施。&lt;/p&gt;
&lt;p&gt;#杀会话
kill 2826 3298&lt;/p&gt;
&lt;p&gt;10.测试与baidu.com的网络连通性
ping baidu.com&lt;/p&gt;
&lt;p&gt;##################
566  ip a
567  vim /etc/sysconfig/network-scripts/ifcfg-ens33
568  cat /etc/os-release
569  vim /etc/sysconfig/network-scripts/ifcfg-ens33
570  systemctl disable --now NetworkManager
571  systemctl restart network
572  systemctl status network
573  cd /etc/sysconfig/network-scripts/
574  systemctl status network
575  ll
576  ls
577  cat ifcfg-ens33
578  cat ifcfg-ens34
579  systemctl status network
580  ll /var/log/messages
581  systemctl status network
582  journalctl -xe -u network
583  ps -ef | grep dhc
584  cat ifcfg-ens33
585  cat ifcfg-ens34
586  ip a
587  history
588  ifconfig -a
589  ifconfig
590  ifconfig -a
591  cat ifcfg-ens33
592  vim ifcfg-ens33
593  systemctl restart network
594  journalctl -xe -u network
595  ip a
596  ifconfig -a
597  vim ifcfg-ens36
598  ifconfig -a
599  mv ifcfg-ens34 ifcfg-ens36
600  vim ifcfg-ens36
601  systemctl restart network
602  journalctl -xe -u network
603  ps -ef | grep dhc
604  kill 2826 3298
605  ps -ef | grep dhc
606  systemctl restart network
607  ip a
608  vim ifcfg-ens33
609  ip a
610  vim ifcfg-ens33
611  systemctl restart network
612  vim ifcfg-ens33
613  systemctl restart network
614  ifconfig -a
615  pwd
616  history
617  shutdown -now -h
618  ping baidu.com&lt;/p&gt;
&lt;p&gt;ip a: 显示所有网络接口的信息。
vim /etc/sysconfig/network-scripts/ifcfg-ens33: 使用vim编辑器编辑网络接口ens33的配置文件。
cat /etc/os-release:显示当前操作系统的版本信息。
systemctl disable --now NetworkManager: 立即停止并禁用NetworkManager服务。
systemctl restart network: 重启网络服务。
systemctl status network: 显示网络服务的状态。
cd /etc/sysconfig/network-scripts/： 切换到存放网络配置文件的目录。
ll，ls： 列出当前目录下的所有文件和目录。
cat ifcfg-ens33： 显示ens33的配置信息。
cat ifcfg-ens34： 显示ens34的配置信息。
ll /var/log/messages，journalctl -xe -u network：查看系统日志或网络服务的日志。
ps -ef | grep dhc： 查找进程列表中所有与dhcp相关的进程。
ifconfig -a，ifconfig： 显示所有网络接口的状态，ifconfig -a还会显示未激活的接口。
vim ifcfg-ens33，vim ifcfg-ens36： 编辑ens33或ens36的网络配置。
mv ifcfg-ens34 ifcfg-ens36：把ens34的配置文件重命名为ens36的配置文件。
kill 2826 3298：结束进程号为2826和3298的进程。
pwd： 显示当前工作目录的完整路径。
shutdown -now -h：立即关机。
ping baidu.com： 测试与baidu.com的网络连通性。&lt;/p&gt;
</content:encoded></item><item><title>sql优化</title><link>https://blog.newworld.help/posts/sql%E4%BC%98%E5%8C%96/</link><guid isPermaLink="true">https://blog.newworld.help/posts/sql%E4%BC%98%E5%8C%96/</guid><description>SP_SET_PARA_VALUE(1,&apos;ENABLE_MONITOR&apos;,1);</description><pubDate>Tue, 23 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;###################################################生成执行计划
1.开启monitor
SP_SET_PARA_VALUE(1,&apos;ENABLE_MONITOR&apos;,1);
SP_SET_PARA_VALUE(1,&apos;MONITOR_SQL_EXEC&apos;,1);&lt;/p&gt;
&lt;p&gt;2.查看执行计划
set autotrace traceonly;
explain SELECT ID,NAME FROM T1 WHERE NAME =&apos;aaaaaaaaaa&apos;;&lt;/p&gt;
&lt;p&gt;3.最后，关闭monitor
SP_SET_PARA_VALUE(1,&apos;ENABLE_MONITOR&apos;,0);
SP_SET_PARA_VALUE(1,&apos;MONITOR_SQL_EXEC&apos;,0);&lt;/p&gt;
&lt;p&gt;###################################################10053trace事件
https://mp.weixin.qq.com/s/hraTpxZ-NTkyOUzWRo8fgg&lt;/p&gt;
&lt;p&gt;1.检查并关闭monitor达梦数据库开启monitor可能会对性能有影响，比如使用ET时需要提前开启monitor，
但10053没有这个限制，可以在monitor关闭的情况下生成10053 trace：
SP_SET_PARA_VALUE(1,&apos;ENABLE_MONITOR&apos;,0);
SP_SET_PARA_VALUE(1,&apos;MONITOR_SQL_EXEC&apos;,0);&lt;/p&gt;
&lt;p&gt;2.配置10053事件语法和Oracle相同
alter session set events &apos;10053 trace name context forever,level 1&apos;;&lt;/p&gt;
&lt;p&gt;3.执行SQL其中：t1表及测试数据生成方式见末尾。
SELECT ID,NAME FROM T1 WHERE NAME =&apos;aaaaaaaaaa&apos;;&lt;/p&gt;
&lt;p&gt;4.关闭10053事件
alter session set events &apos;10053 trace name context off&apos;;&lt;/p&gt;
&lt;p&gt;5.查看10053 trace日志查看路径&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; select PARA_NAME,PARA_VALUE from v$dm_ini where PARA_NAME like &apos;%TRACE_PATH%&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;行号     PARA_NAME  PARA_VALUE&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;1          TRACE_PATH /db/dm8/data/cjc/trace&lt;/p&gt;
&lt;p&gt;查看trace文件
dmdba@SATEST-DB-004:/db/dm8/data/cjc/trace$ls -lrth /db/dm8/data/cjc/trace
-rw-r--r-- 1 dmdba dinstall 8.9K Mar 20 16:56 CJC_0320_1656_140272893910344.trc&lt;/p&gt;
&lt;p&gt;6.分析trace
vi CJC_0320_1656_140272893910344.trc&lt;/p&gt;
</content:encoded></item><item><title>在线重定义分区表</title><link>https://blog.newworld.help/posts/%E5%9C%A8%E7%BA%BF%E9%87%8D%E5%AE%9A%E4%B9%89%E5%88%86%E5%8C%BA%E8%A1%A8/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%9C%A8%E7%BA%BF%E9%87%8D%E5%AE%9A%E4%B9%89%E5%88%86%E5%8C%BA%E8%A1%A8/</guid><description>DBMS_REDEFINITION.START_REDEF_TABLE 是 Oracle 数据库中的一个过程，用于启动表的在线重定义（Onl</description><pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在线重定义为分区表
参考:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/vldbg/evolve-nopartition-table.html#GUID-6054142E-207A-4DF0-A62A-4C1A94DD36C4
https://docs.oracle.com/en/database/oracle/oracle-database/23/arpls/DBMS_REDEFINITION.html#GUID-09FE5412-519C-412F-B1E0-77F75B1E8CA7&lt;/p&gt;
&lt;p&gt;一、
DBMS_REDEFINITION.START_REDEF_TABLE 是 Oracle 数据库中的一个过程，用于启动表的在线重定义（Online Table Redefinition）过程。在线重定义是一种技术，
允许你在不中断正常数据库操作的情况下修改表的结构（例如添加、删除列，修改数据类型等）。&lt;/p&gt;
&lt;p&gt;使用 DBMS_REDEFINITION.START_REDEF_TABLE 过程，可以在不停机的情况下进行以下操作：
表结构的修改： 可以添加、删除、修改表的列，修改数据类型等。
表的分区和分区键的修改： 可以对分区表的分区键进行修改。
索引的修改： 可以添加、删除、修改索引。
触发器、约束等的修改： 可以添加、删除、修改触发器、约束等。&lt;/p&gt;
&lt;p&gt;在线重定义的过程可以分为以下几个步骤：&lt;/p&gt;
&lt;p&gt;初始化： 创建一个用于在线重定义的临时表，将原始表的数据复制到临时表中。
同步： 在在线重定义过程中，继续收集在原始表上的DML（Data Manipulation Language）操作，以确保数据的一致性。
完成： 当所有的DML操作都同步到了临时表后，将DML操作应用到临时表，并将临时表的数据同步回原始表。&lt;/p&gt;
&lt;p&gt;使用 DBMS_REDEFINITION.START_REDEF_TABLE 过程，可以启动在线重定义的过程，然后使用其他相关的 DBMS_REDEFINITION 过程来完成重定义过程。&lt;/p&gt;
&lt;p&gt;二、
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS 是 Oracle 数据库中的一个过程，用于在执行在线表重定义（Online Table Redefinition）过程时，
将源表的相关依赖对象（例如索引、触发器、外键等）复制到重新定义后的目标表上。&lt;/p&gt;
&lt;p&gt;在进行在线表重定义时，不仅需要考虑源表的数据迁移，还需要处理与表相关的依赖对象。COPY_TABLE_DEPENDENTS 过程的作用就是帮助你处理这些依赖对象，
确保它们在表重定义完成后的新表上存在并且是有效的。&lt;/p&gt;
&lt;p&gt;使用 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS 过程，你可以在在线表重定义过程中执行以下操作：
复制索引： 将源表上的索引复制到新表上。
复制触发器： 将源表上的触发器复制到新表上。
复制外键： 将源表上的外键关系复制到新表上。
复制其他依赖对象： 复制其他与表相关的依赖对象，例如检查约束等。&lt;/p&gt;
&lt;p&gt;三、
DBMS_REDEFINITION.FINISH_REDEF_TABLE 过程用于完成在线表重定义的最后一步，即将临时表的数据同步回原始表，然后清理和完成在线重定义过程。&lt;/p&gt;
&lt;p&gt;################################################环境准备################################################
1.使用sysdba权限登陆数据库
CONNECT / AS SYSDBA&lt;/p&gt;
&lt;p&gt;2.创建eqnt测试用户,并授权
DROP USER eqnt CASCADE;
CREATE USER eqnt IDENTIFIED BY eqnt;
GRANT CONNECT, RESOURCE TO eqnt;&lt;/p&gt;
&lt;p&gt;-- Grant privleges required for online redefinition.
GRANT EXECUTE ON DBMS_REDEFINITION TO eqnt;
GRANT ALTER ANY TABLE TO eqnt;
GRANT DROP ANY TABLE TO eqnt;
GRANT LOCK ANY TABLE TO eqnt;
GRANT CREATE ANY TABLE TO eqnt;
GRANT SELECT ANY TABLE TO eqnt;&lt;/p&gt;
&lt;p&gt;-- Privileges required to perform cloning of dependent objects.
GRANT CREATE ANY TRIGGER TO eqnt;
GRANT CREATE ANY INDEX TO eqnt;&lt;/p&gt;
&lt;p&gt;--表空间授权
ALTER USER eqnt QUOTA UNLIMITED ON &quot;USERS&quot;;&lt;/p&gt;
&lt;p&gt;3.切换到eqnt连接,创建测试数据
CONNECT eqnt/eqnt&lt;/p&gt;
&lt;p&gt;-- (old) non partitioned nested table
CREATE TABLE print_media
( product_id        NUMBER(6),
ad_textdocs_ntab  VARCHAR2(22)
);&lt;/p&gt;
&lt;p&gt;INSERT INTO print_media VALUES (1,&apos;xx&apos;);
INSERT INTO print_media VALUES (11,&apos;aa&apos;);
COMMIT;&lt;/p&gt;
&lt;p&gt;--建主键索引
CREATE UNIQUE INDEX pk_print_media ON print_media(product_id) PARALLEL 4 INITRANS 16;
alter table print_media add constraint pk_print_media primary key (product_id) using INDEX;&lt;/p&gt;
&lt;p&gt;--检查user_objects对象
SELECT *
FROM user_objects&lt;/p&gt;
&lt;p&gt;--共两个对象
PK_PRINT_MEDIA       INDEX                    --PRINT_MEDIA表的索引
PRINT_MEDIA	         TABLE                    --第一次建的表&lt;/p&gt;
&lt;p&gt;-- Creating partitioned Interim Table
CREATE TABLE print_media2
( product_id        NUMBER(6)
, ad_textdocs_ntab  VARCHAR2(22)
)
PARTITION BY RANGE (product_id)
(
PARTITION P1 VALUES LESS THAN (10),
PARTITION P2 VALUES LESS THAN (20)
);&lt;/p&gt;
&lt;p&gt;--检查user_objects对象
SELECT *
FROM user_objects&lt;/p&gt;
&lt;p&gt;PK_PRINT_MEDIA         INDEX                  --PRINT_MEDIA表的索引
PRINT_MEDIA2	   P2    TABLE PARTITION        --PRINT_MEDIA2的分区
PRINT_MEDIA2     P1    TABLE PARTITION        --PRINT_MEDIA2的分区
PRINT_MEDIA2	         TABLE                  --第二次建的表
PRINT_MEDIA	           TABLE                  --第一次建的表&lt;/p&gt;
&lt;p&gt;################################################在线重定义################################################&lt;/p&gt;
&lt;p&gt;1.开始在线表重定义&lt;/p&gt;
&lt;p&gt;BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE(
uname                 =&amp;gt; &apos;eqnt&apos;,           --源表所属的用户（schema）名称
orig_table            =&amp;gt; &apos;print_media&apos;,    --原始表的名称
int_table             =&amp;gt; &apos;print_media2&apos;   --,中间表（interim table）的名称，即在线重定义过程中使用的临时表
--col_mapping           =&amp;gt; ,--字段映射规则，用于将源表的列映射到中间表的列,表结构相同时不需要指定
--规则格式为 source_column:interim_column,source_column:interim_column,... 我的理解为修改表中字段位置使用&lt;/p&gt;
&lt;p&gt;--options_flag          =&amp;gt; ,--控制在线表重定义的选项。常用的取值是 DBMS_REDEFINITION.CONS_USE_ROWID，
--表示使用ROWID进行映射...理解为 options_flag          =&amp;gt; DBMS_REDEFINITION.CONS_USE_ROWID&lt;/p&gt;
&lt;p&gt;--orderby_cols          =&amp;gt; ,--用于指定在从源表复制数据到中间表时的排序规则,column1 ASC, column2 DESC,默认值为 NULL
--p******             =&amp;gt; ,--用于指定分区表中的特定分区，如果原始表是分区表理解为只针对某一个分区进行重定义 part_name,默认值为 NULL
--continue_after_errors =&amp;gt; ,--指定是否在遇到错误时继续执行,TRUE 表示继续执行，FALSE 表示遇到错误就停止,默认值为 TRUE
--copy_vpd_opt          =&amp;gt; ,--是否复制源表上的 Virtual Private Database (VPD) 选项,TRUE 表示复制，FALSE 表示不复制,默认值为 TRUE
--refresh_dep_mviews    =&amp;gt; ,--是否刷新依赖于源表的物化视图,TRUE 表示刷新，FALSE 表示不刷新,默认值为 TRUE
--enable_rollback       =&amp;gt;  --是否启用回滚,TRUE 表示启用，FALSE 表示不启用,默认值为 TRUE
);
END;&lt;/p&gt;
&lt;p&gt;--检查user_objects对象
SELECT *
FROM user_objects&lt;/p&gt;
&lt;p&gt;PK_PRINT_MEDIA              INDEX             --PRINT_MEDIA表的索引
PRINT_MEDIA2            P2  TABLE PARTITION   --PRINT_MEDIA2的分区
PRINT_MEDIA2            P1  TABLE PARTITION   --PRINT_MEDIA2的分区
PRINT_MEDIA2                TABLE             --第二次建的表
MLOG$_PRINT_MEDIA           TABLE             --多出来的表a
PRINT_MEDIA                 TABLE             --第一次建的表
RUPD$_PRINT_MEDIA           TABLE             --多出来的表b
I_MLOG$_PRINT_MEDIA         INDEX             --多出来的索引&lt;/p&gt;
&lt;p&gt;2.查看四张表变化过程
SELECT T1.*,ROWID FROM PRINT_MEDIA  T1;&lt;/p&gt;
&lt;p&gt;SELECT T2.*,ROWID FROM PRINT_MEDIA2 T2;&lt;/p&gt;
&lt;p&gt;SELECT T3.*,ROWID FROM MLOG$_PRINT_MEDIA T3;&lt;/p&gt;
&lt;p&gt;SELECT T4.*,ROWID FROM RUPD$_PRINT_MEDIA T4;&lt;/p&gt;
&lt;p&gt;其中 PRINT_MEDIA       表没有变化
其中 PRINT_MEDIA2      表同步了PRINT_MEDIA的数据
其中 MLOG$_PRINT_MEDIA 无值
其中 RUPD$_PRINT_MEDIA 无值&lt;/p&gt;
&lt;p&gt;PRINT_MEDIA  ROWID
AAATL7AAMAAAACtAAA
AAATL7AAMAAAACtAAB&lt;/p&gt;
&lt;p&gt;PRINT_MEDIA2 ROWID
AAATL+AAMAAAA4SAAA
AAATL/AAMAAABISAAA&lt;/p&gt;
&lt;p&gt;使用plsql查看表的建立,发现已经变成了物化视图
/*
CREATE MATERIALIZED VIEW PRINT_MEDIA2
ON PREBUILT TABLE
REFRESH FAST ON DEMAND
AS
SELECT &quot;PRINT_MEDIA&quot;.&quot;PRODUCT_ID&quot; &quot;PRODUCT_ID&quot;,&quot;PRINT_MEDIA&quot;.&quot;AD_TEXTDOCS_NTAB&quot; &quot;AD_TEXTDOCS_NTAB&quot; FROM &quot;EQNT&quot;.&quot;PRINT_MEDIA&quot; &quot;PRINT_MEDIA&quot;;
*/&lt;/p&gt;
&lt;p&gt;尝试删除 print_media2 表
DROP TABLE  print_media2 PURGE;
报错:
ORA-12083:必须使用 DROP MATERIALIZED VIEW 来删除“EQNT”.&quot;PRINT MEDIA2&lt;/p&gt;
&lt;p&gt;这里删表必须删除物化视图才能做删表操作
例:
DROP MATERIALIZED VIEW  print_media2 ;
DROP TABLE  print_media2 PURGE;&lt;/p&gt;
&lt;p&gt;3.对源表插入数据&lt;/p&gt;
&lt;p&gt;INSERT INTO print_media VALUES (3,&apos;cc&apos;);
UPDATE print_media t SET t.product_id=2 WHERE t.product_id=11;
DELETE FROM print_media t WHERE t.product_id=1;
COMMIT;&lt;/p&gt;
&lt;p&gt;4.查看四张表变化过程
SELECT T1.*,ROWID FROM PRINT_MEDIA  T1;&lt;/p&gt;
&lt;p&gt;SELECT T2.*,ROWID FROM PRINT_MEDIA2 T2;&lt;/p&gt;
&lt;p&gt;SELECT T3.*,ROWID FROM MLOG$_PRINT_MEDIA T3;&lt;/p&gt;
&lt;p&gt;SELECT T4.*,ROWID FROM RUPD$_PRINT_MEDIA T4;&lt;/p&gt;
&lt;p&gt;其中 PRINT_MEDIA       表同修改语句变化
其中 PRINT_MEDIA2      表没有变化
其中 MLOG$_PRINT_MEDIA 记录了三次
其中 RUPD$_PRINT_MEDIA 无值&lt;/p&gt;
&lt;p&gt;PRINT_MEDIA  ROWID
AAATL7AAMAAAACtAAB
AAATL7AAMAAAACtAAC&lt;/p&gt;
&lt;p&gt;PRINT_MEDIA2 ROWID
AAATL+AAMAAAA4SAAA
AAATL/AAMAAABISAAA&lt;/p&gt;
&lt;p&gt;MLOG$_PRINT_MEDIA 表记录内容(全是PRINT_MEDIA的变化)
3    I    N    FE  1.12595574141939E15    AAATMAAAMAAAA1dAAA     --insert引起
11   D    O    00  2.81486143626754E15    AAATMAAAMAAAA1dAAB     --update引起,先删除
2    I    N    FF  2.81486143626754E15    AAATMAAAMAAAA1dAAC     --update引起,再插入
1    D    O    00  2.81487432116942E15    AAATMAAAMAAAA1dAAD     --delete引起&lt;/p&gt;
&lt;p&gt;5.复制依赖对象，包括主键约束
--所有的参数都没有默认值。每个参数都需要明确提供值，否则过程无法执行。&lt;/p&gt;
&lt;p&gt;DECLARE
error_count pls_integer := 0;
BEGIN
dbms_redefinition.copy_table_dependents(
uname            =&amp;gt; &apos;eqnt&apos;,--源表所属的用户（schema）名称
orig_table       =&amp;gt; &apos;print_media&apos;,--原始表的名称
int_table        =&amp;gt; &apos;print_media2&apos;,--中间表（interim table）的名称，即在线重定义过程中使用的临时表
copy_indexes     =&amp;gt; 1,--是否复制源表上的索引,1 表示复制索引，0 表示不复制索引
copy_triggers    =&amp;gt; TRUE,--是否复制源表上的触发器,TRUE 表示复制触发器，FALSE 表示不复制触发器
copy_constraints =&amp;gt; TRUE,--是否复制源表上的约束。可以使用常量,DBMS_REDEFINITION.CONS_ORIG_PARAMS&apos; 表示复制约束
copy_privileges  =&amp;gt; TRUE,--是否复制源表上的权限信息,TRUE 表示复制权限，FALSE 表示不复制权限
ignore_errors    =&amp;gt; FALSE,--指定是否忽略在复制依赖对象过程中发生的错误,TRUE 表示忽略错误，FALSE 表示不忽略错误
num_errors       =&amp;gt; error_count,--用于返回在复制依赖对象过程中发生的错误数量
copy_statistics  =&amp;gt; TRUE,--是否复制源表上的统计信息,TRUE 表示复制统计信息，FALSE 表示不复制统计信息
copy_mvlog       =&amp;gt; FALSE --是否复制源表上的物化视图日志,TRUE 表示复制物化视图日志，FALSE 表示不复制物化视图日志
);&lt;/p&gt;
&lt;p&gt;dbms_output.put_line(&apos;errors := &apos; || to_char(error_count));
END;&lt;/p&gt;
&lt;p&gt;检查数据结果为
errors := 0&lt;/p&gt;
&lt;p&gt;--检查user_objects对象
SELECT *
FROM user_objects&lt;/p&gt;
&lt;p&gt;检查结果:
多了一个索引
TMP$$_PK_PRINT_MEDIA0&lt;/p&gt;
&lt;p&gt;6.结束在线表重定义&lt;/p&gt;
&lt;p&gt;BEGIN dbms_redefinition.finish_redef_table(
uname                 =&amp;gt; &apos;eqnt&apos;,--源表所属的用户（schema）名称
orig_table            =&amp;gt; &apos;print_media&apos;,--原始表的名称
int_table             =&amp;gt; &apos;print_media2&apos;--,中间表（interim table）的名称，即在线重定义过程中使用的临时表
--p******             =&amp;gt; ,--用于指定分区表中的特定分区，如果原始表是分区表
--dml_lock_timeout      =&amp;gt; ,-- DML 操作的锁定超时时间，单位是秒。如果不指定，默认值是 NULL
--continue_after_errors =&amp;gt; ,--指定是否在遇到错误时继续执行,TRUE 表示继续执行，FALSE 表示遇到错误就停止
--disable_rollback      =&amp;gt;  --是否禁用回滚操作,TRUE 表示禁用回滚，FALSE 表示允许回滚
);
END;&lt;/p&gt;
&lt;p&gt;--检查user_objects对象
SELECT *
FROM user_objects&lt;/p&gt;
&lt;p&gt;以下表和索引消失
MLOG$_PRINT_MEDIA           TABLE             --多出来的表a
RUPD$_PRINT_MEDIA           TABLE             --多出来的表b
I_MLOG$_PRINT_MEDIA         INDEX             --多出来的索引&lt;/p&gt;
&lt;p&gt;7.验证新表
SELECT * FROM print_media&lt;/p&gt;
&lt;p&gt;-- Drop the interim table
DROP TABLE print_media2;
成功删除&lt;/p&gt;
&lt;p&gt;--清回收站
PURGE RECYCLEBIN;&lt;/p&gt;
&lt;p&gt;--检查user_objects对象
SELECT *
FROM user_objects&lt;/p&gt;
&lt;p&gt;名字及索引名已成功修改&lt;/p&gt;
</content:encoded></item><item><title>MCP</title><link>https://blog.newworld.help/posts/mcp/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mcp/</guid><description>MCP (Model Context Protocol) 配置笔记</description><pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;MCP (Model Context Protocol) 配置笔记&lt;/h1&gt;
&lt;p&gt;配置文件位置:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户级: %USERPROFILE%.claude.json&lt;/li&gt;
&lt;li&gt;项目级: 项目目录.mcp.json&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;=====================================
一、MCP 类型&lt;/h1&gt;
&lt;p&gt;【HTTP 类型 - 远程服务】
适用: 云端API服务，需要网络连接和认证&lt;/p&gt;
&lt;p&gt;{
&quot;服务名&quot;: {
&quot;type&quot;: &quot;http&quot;,
&quot;url&quot;: &quot;https://api.example.com/mcp&quot;,
&quot;headers&quot;: {
&quot;Authorization&quot;: &quot;Bearer YOUR_API_KEY&quot;
}
}
}&lt;/p&gt;
&lt;p&gt;可选参数:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;timeout: 超时时间(毫秒)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;【stdio 类型 - 本地命令】
适用: 本地运行的npm包或可执行程序&lt;/p&gt;
&lt;p&gt;{
&quot;服务名&quot;: {
&quot;type&quot;: &quot;stdio&quot;,
&quot;command&quot;: &quot;npx&quot;,
&quot;args&quot;: [&quot;-y&quot;, &quot;包名&quot;],
&quot;env&quot;: {
&quot;环境变量名&quot;: &quot;值&quot;
}
}
}&lt;/p&gt;
&lt;p&gt;command 可以是:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;npx: 运行npm包&lt;/li&gt;
&lt;li&gt;node: 运行Node.js脚本&lt;/li&gt;
&lt;li&gt;python: 运行Python脚本&lt;/li&gt;
&lt;li&gt;其他可执行程序路径&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;=====================================
二、官方推荐 MCP&lt;/h1&gt;
&lt;p&gt;GitHub: https://github.com/modelcontextprotocol/servers&lt;/p&gt;
&lt;p&gt;【文件与数据】
filesystem      读写本地文件，限制访问目录
sqlite          SQLite数据库查询和操作
postgres        PostgreSQL数据库操作
memory          简单的键值存储&lt;/p&gt;
&lt;p&gt;【开发工具】
github          GitHub API，PR/Issue/仓库操作
gitlab          GitLab API操作
linear          Linear项目管理&lt;/p&gt;
&lt;p&gt;【浏览器与搜索】
puppeteer       浏览器自动化，截图、爬虫
brave-search    Brave搜索引擎
google-maps     Google地图API
fetch           HTTP请求工具&lt;/p&gt;
&lt;p&gt;【通讯工具】
slack           Slack消息和频道操作
discord         Discord集成&lt;/p&gt;
&lt;p&gt;【其他】
seq             日志分析
everart         AI图像生成&lt;/p&gt;
&lt;h1&gt;=====================================
三、当前使用的 MCP 配置&lt;/h1&gt;
&lt;p&gt;【playwright】浏览器自动化 - 本地运行，无需KEY
{
&quot;playwright&quot;: {
&quot;type&quot;: &quot;stdio&quot;,
&quot;command&quot;: &quot;npx&quot;,
&quot;args&quot;: [&quot;@playwright/mcp@latest&quot;]
}
}&lt;/p&gt;
&lt;p&gt;功能: 网页导航、点击、填表、截图、等待元素&lt;/p&gt;
&lt;p&gt;【zai-mcp-server】ZAI工具集 - 需要API KEY
{
&quot;zai-mcp-server&quot;: {
&quot;type&quot;: &quot;stdio&quot;,
&quot;command&quot;: &quot;npx&quot;,
&quot;args&quot;: [&quot;-y&quot;, &quot;@z_ai/mcp-server&quot;],
&quot;env&quot;: {
&quot;Z_AI_MODE&quot;: &quot;ZAI&quot;,
&quot;Z_AI_API_KEY&quot;: &quot;YOUR_API_KEY&quot;
}
}
}&lt;/p&gt;
&lt;p&gt;功能:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ui_to_artifact       UI截图转代码/规格&lt;/li&gt;
&lt;li&gt;analyze_image        通用图像分析&lt;/li&gt;
&lt;li&gt;analyze_video        视频内容分析&lt;/li&gt;
&lt;li&gt;extract_text_from_screenshot  截图文字提取&lt;/li&gt;
&lt;li&gt;diagnose_error_screenshot     错误截图诊断&lt;/li&gt;
&lt;li&gt;analyze_data_visualization    数据可视化分析&lt;/li&gt;
&lt;li&gt;understand_technical_diagram  技术图表理解&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;【web-search-prime】网络搜索 - 需要API KEY
{
&quot;web-search-prime&quot;: {
&quot;type&quot;: &quot;http&quot;,
&quot;url&quot;: &quot;https://api.z.ai/api/mcp/web_search_prime/mcp&quot;,
&quot;headers&quot;: {
&quot;Authorization&quot;: &quot;Bearer YOUR_API_KEY&quot;
}
}
}&lt;/p&gt;
&lt;p&gt;功能: 搜索网络信息，返回标题、URL、摘要&lt;/p&gt;
&lt;p&gt;【web-reader】网页读取 - 需要API KEY
{
&quot;web-reader&quot;: {
&quot;type&quot;: &quot;http&quot;,
&quot;url&quot;: &quot;https://api.z.ai/api/mcp/web_reader/mcp&quot;,
&quot;headers&quot;: {
&quot;Authorization&quot;: &quot;Bearer YOUR_API_KEY&quot;
}
}
}&lt;/p&gt;
&lt;p&gt;功能: 抓取网页并转换为Markdown格式&lt;/p&gt;
&lt;p&gt;【zread】GitHub仓库阅读 - 需要API KEY
{
&quot;zread&quot;: {
&quot;type&quot;: &quot;http&quot;,
&quot;url&quot;: &quot;https://api.z.ai/api/mcp/zread/mcp&quot;,
&quot;headers&quot;: {
&quot;Authorization&quot;: &quot;Bearer YOUR_API_KEY&quot;
}
}
}&lt;/p&gt;
&lt;p&gt;功能:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;get_repo_structure  获取仓库目录结构&lt;/li&gt;
&lt;li&gt;read_file           读取文件内容&lt;/li&gt;
&lt;li&gt;search_doc          搜索文档/Issue/提交&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;=====================================
四、API KEY 说明&lt;/h1&gt;
&lt;p&gt;需要KEY的情况:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;调用云端AI服务 (计算资源消耗)&lt;/li&gt;
&lt;li&gt;需要身份验证的API&lt;/li&gt;
&lt;li&gt;有配额限制的付费服务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不需要KEY的情况:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完全本地运行的工具&lt;/li&gt;
&lt;li&gt;开源免费的服务&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;=====================================
五、常见问题&lt;/h1&gt;
&lt;p&gt;Q: MCP连接失败怎么办?
A: 1. 检查网络连接
2. 确认API KEY有效
3. 查看debug日志: %USERPROFILE%.claude\debug\&lt;/p&gt;
&lt;p&gt;Q: 如何添加新MCP?
A: 编辑 .claude.json 的 mcpServers 部分，添加配置后重启Claude Code&lt;/p&gt;
&lt;p&gt;Q: 如何禁用某个MCP?
A: 从 mcpServers 中删除对应配置，或设置 &quot;disabled&quot;: true&lt;/p&gt;
</content:encoded></item><item><title>Oracle存过规范</title><link>https://blog.newworld.help/posts/oracle%E5%AD%98%E8%BF%87%E8%A7%84%E8%8C%83/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle%E5%AD%98%E8%BF%87%E8%A7%84%E8%8C%83/</guid><description>CREATE OR REPLACE PROCEDURE PROC_I_TMP_项目名（参数1 参数类型，</description><pubDate>Sat, 08 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;CREATE OR REPLACE PROCEDURE PROC_I_TMP_项目名（参数1 参数类型，
参数2 参数类型）
AS&lt;/p&gt;
&lt;p&gt;--====================================================================&lt;/p&gt;
&lt;p&gt;/*注释部分（为了后期维护大家方便，一定要写）
1.存过说明：实现功能
2.传参说明：参数1：日期，格式20211031；
参数2：日期，格式yyyymmdd；
3.开发日期：2021-10-31
4.存过作者：刘思汗，
刘德华，
周润发
5.涉及的表：来源表：表1，
表2，
表3
中间表：表1，
表2，
表3
目标表：表1
6.执行周期：每天跑一次
7.修改记录：没修改就写无（这里只写每次上版修改即可）
修改时间+修改人+修改的东西
*/&lt;/p&gt;
&lt;p&gt;--声明变量
V_SQL VARCHAR(66);--声明异常&lt;/p&gt;
&lt;p&gt;--====================================================================
BEGIN&lt;/p&gt;
&lt;p&gt;--xxx表(这里备注我要插入的是什么表）注意书写格式，不要只有你自己看的懂！！！
INSERT INTO 中间表名
AS
SELECT T1.列1，
T1.列2，
T1.列3
FROM 来源表 T1
WHERE T1.DATA_DT=参数1--传参
T1.DEPT_ID=参数2;
COMMIT;--每次插入都要写commit;&lt;/p&gt;
&lt;p&gt;--xxx表(这里备注我要插入的是什么表）注意书写格式，不要只有你自己看的懂！！！！！
INSERT INTO 中间表名2
AS
SELECT T2.列1，
T2.列2，
T2.列3
FROM 来源表 T2
WHERE T1.DATA_DT=参数1
T1.DEPT_ID=参数2;
COMMIT;--每次插入都要写commit;&lt;/p&gt;
&lt;p&gt;EXCEPTION
WHEN OTHERS THEN
V_SQL:=SQLERRM;
IF SUBSTR(v_a,1,1)=&apos;O&apos; THEN
INSERT INTO proc_log
VALUES(&apos;PROC_I_TMP_项目名&apos;,--这里写存过名
V_SQL,
SYSDATE);
ELSE
INSERT INTO proc_log
VALUES(&apos;PROC_I_TMP_项目名&apos;,--这里写存过名
&apos;成功&apos;,
SYSDATE);
END IF;
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END&lt;/p&gt;
</content:encoded></item><item><title>导数</title><link>https://blog.newworld.help/posts/%E5%AF%BC%E6%95%B0/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%AF%BC%E6%95%B0/</guid><description>SELECT &apos;字符集&apos;,CASE SF_GET_UNICODE_FLAG() WHEN &apos;0&apos; THEN &apos;GBK18030&apos; WHEN </description><pubDate>Sat, 25 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.查询两端必需相同项
SELECT &apos;字符集&apos;,CASE SF_GET_UNICODE_FLAG() WHEN &apos;0&apos; THEN &apos;GBK18030&apos; WHEN &apos;1&apos; then &apos;UTF-8&apos; when &apos;2&apos; then &apos;EUC-KR&apos; end
union all
SELECT &apos;页大小&apos;,cast(PAGE()/1024 as varchar)
union all
SELECT &apos;簇大小&apos;,cast(SF_GET_EXTENT_SIZE() as varchar)
union all
SELECT &apos;大小写敏感&apos;,cast(SF_GET_CASE_SENSITIVE_FLAG() as varchar)
union ALL
select &apos;是否以字符为长度&apos;,case SF_GET_LENGTH_IN_CHAR() when &apos;0&apos; then &apos;否&apos; when &apos;1&apos; then &apos;是&apos; end
union all
select &apos;补空格&apos;, PARA_VALUE from v$DM_INI WHERE PARA_NAME = &apos;BLANK_PAD_MODE&apos;;&lt;/p&gt;
&lt;p&gt;2.导入导出&lt;/p&gt;
&lt;h1&gt;用户级导出（dexp）&lt;/h1&gt;
&lt;p&gt;nohup ./dexp USERID=&quot;SYSDBA&quot;/&quot;Dm08serv$&quot;@LOCALHOST:5236  &lt;br /&gt;
FILE=full_20260414_%U.dmp &lt;br /&gt;
LOG=full_20260414_exp.log &lt;br /&gt;
DIRECTORY=/dm8_data/backup/backup_01 &lt;br /&gt;
OWNER=YBTS &lt;br /&gt;
PARALLEL=32 &lt;br /&gt;
TABLE_PARALLEL=8 &lt;br /&gt;
COMPRESS=Y &lt;br /&gt;
#2024 年后dm8 新参数  COMPRESS_LEVEL=9 &lt;br /&gt;
LOG_WRITE=Y &lt;br /&gt;
FEEDBACK=10000 \&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;用户级导入（dimp）&lt;/h1&gt;
&lt;p&gt;nohup ./dimp USERID=SYSDBA/&quot;Dm08serv$&quot;@LOCALHOST:5236 &lt;br /&gt;
FILE=full_20260414_01.dmp &lt;br /&gt;
LOG=full_20260414_imp.log &lt;br /&gt;
DIRECTORY=/dm8_data/backup/backup_01 &lt;br /&gt;
OWNER=YBTS &lt;br /&gt;
PARALLEL=32 &lt;br /&gt;
TABLE_PARALLEL=8 &lt;br /&gt;
IGNORE=Y &lt;br /&gt;
FAST_LOAD=Y &lt;br /&gt;
COMMIT_ROWS=10000 &lt;br /&gt;
LOG_WRITE=Y \&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Oracle expdp/impdp	           达梦 dexp/dimp	                    说明
&quot;/ as sysdba&quot;	               SYSDBA/密码@IP:端口	                达梦不支持操作系统认证的简写，需显式写连接串
directory=dump_dir	           DIRECTORY=/dmbackup/dexp	            dexp 直接用路径；dexpdp 需先 CREATE DIRECTORY
dumpfile=xxx.dump	           FILE=xxx.dmp	                        达梦用 .dmp 后缀，支持 %U 自动扩展
logfile=xxx.log	               LOG=xxx.log	                        日志文件
schemas=xxx	                   OWNER=xxx 或 SCHEMAS=xxx	            用户级用 OWNER，模式级用 SCHEMAS
parallel=32	                   PARALLEL=32	                        达梦范围 1~100，默认 16
compression=all	               COMPRESS=Y COMPRESS_LEVEL=9	        达梦压缩等级 0~9，默认 1
cluster=n	                   无直接对应	                        达梦 MPP 环境用 #{mpp_type=local}
TRANSFORM=SEGMENT_CREATION:n   无直接对应	                        达梦没有延迟段创建概念，无需此参数
TABLE_EXISTS_ACTION=APPEND	   IGNORE=Y 或 TABLE_EXISTS_ACTION=APPEND	dimp 两者都支持
无	                           FAST_LOAD=Y	                        dimp 专用，使用 dmfldr 快速装载，大幅提升导入性能
无	                           TABLE_PARALLEL=8	                    每张表使用的子线程数(1~50)
无	                           COMMIT_ROWS=10000	                批量提交行数，配合 FAST_LOAD 使用&lt;/p&gt;
&lt;p&gt;######################################报错
报错一.
[警告]文件打开出错，请检查您的输入参数……&lt;/p&gt;
&lt;p&gt;成功终止导入, 但出现警告&lt;/p&gt;
&lt;p&gt;FILE=full_20260414_%U.dmp 文件名错误 替换成实际名称&lt;/p&gt;
</content:encoded></item><item><title>ob_sql优化</title><link>https://blog.newworld.help/posts/ob_sql%E4%BC%98%E5%8C%96/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ob_sql%E4%BC%98%E5%8C%96/</guid><description>EXPLAIN BASIC 命令用于最基本的计划展示。</description><pubDate>Fri, 10 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;文本方式查看执行计划:
EXPLAIN BASIC 命令用于最基本的计划展示。
EXPLAIN EXTENDED 命令用于最详细的计划展示（通常在排查问题时使用这种展示模式）。
EXPLAIN 命令所展示的信息可以帮助普通用户了解整个计划的执行方式。
https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000946876
https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000946877&lt;/p&gt;
&lt;p&gt;sql monitor:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000819368&lt;/p&gt;
&lt;p&gt;等待事件:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001573821&lt;/p&gt;
&lt;p&gt;查看执行计划:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576822&lt;/p&gt;
&lt;p&gt;##############################################################################################
###报告 awr ash
集群&amp;gt;选择集群&amp;gt;性能报告&amp;gt;生成性能报告
租户&amp;gt;选择租户&amp;gt;会话管理&amp;gt;活跃会话历史报告&amp;gt;生成报告&lt;/p&gt;
&lt;p&gt;1.查sql的 PLAN_ID,TENANT_ID,找到该sql
select /*+ parallel(16) */ usec_to_time(request_time),
svr_ip,
sid,
ret_code,
retry_cnt,
trace_id,
plan_id,TENANT_ID
plan_type,
elapsed_time,
queue_time,
execute_time,
affected_rows,
partition_cnt,
query_sql
from gv$ob_sql_audit
where 1=1
and request_time &amp;gt; &apos;2024-xx-xx 09:00:00&apos;
and request_time &amp;lt; &apos;2024-xx-xx 09:10:00&apos;
and query_sql like &apos;%%&apos;
-- and ret_code &amp;lt;&amp;gt; 0; -- 表示没有错误，语句成功执行&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;select SVT_IP,SVR_PORT,PLAN_ID,TENANT_ID,
hit_count,
executions,
avg_exe_usec,
slowest_exe_usec,
plan_id,
type,
last_active_time
from oceanbase.V$OB_PLAN_CACHE_PLAN_STAT
where 1=1
and  sql_id=&apos;xx&apos;
AND  STATEMENT LIKE &apos;INSERT INTO T1 VALUES%&apos;\G&lt;/p&gt;
&lt;p&gt;2.使用 tenant_id 和 plan_id 访问 V$OB_PLAN_CACHE_PLAN_EXPLAIN 视图查询执行计划相关信息
SELECT * FROM oceanbase.V$OB_PLAN_CACHE_PLAN_EXPLAIN WHERE tenant_id = 1001 AND plan_id = 9228;&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;SELECT * FROM oceanbase.GV$OB_PLAN_CACHE_PLAN_EXPLAIN
WHERE tenant_id = 1001 AND plan_id = 9228
AND SVT_IP=&apos;&apos; AND SVR_PORT=2882;&lt;/p&gt;
&lt;p&gt;3.分析执行计划
SELECT * FROM oceanbase.V$OB_PLAN_CACHE_PLAN_EXPLAIN WHERE tenant_id = 1001 AND plan_id = 9228;
+-----------+----------------+----------+---------+------------+--------------+------------------+------+------+------+----------+
| TENANT_ID | SVR_IP         | SVR_PORT | PLAN_ID | PLAN_DEPTH | PLAN_LINE_ID | OPERATOR         | NAME | ROWS | COST | PROPERTY |
+-----------+----------------+----------+---------+------------+--------------+------------------+------+------+------+----------+
|      1001 | xxx.xxx.xxx.xxx|     2882 |    9228 |          0 |            0 | PHY_INSERT       | NULL |    1 |   12 | NULL     |
|      1001 | xxx.xxx.xxx.xxx|     2882 |    9228 |          1 |            1 |  PHY_EXPR_VALUES | NULL |    1 |    0 | NULL     |
+-----------+----------------+----------+---------+------------+--------------+------------------+------+------+------+----------+
2 rows in set&lt;/p&gt;
&lt;p&gt;name :选择用哪个索引来访问数据。选择的索引的名字会跟在表名后面，如果没有索引的名字，则说明执行的是主表扫描。
这里需要注意，在 OceanBase 数据库中，主表和索引的组织结构是一样的，主表本身也是一个索引。&lt;/p&gt;
&lt;p&gt;##############################################################################################
###统计信息
OceanBase 数据库 V4.0 版本的统计信息收集目前主要依靠手动统计信息收集和自动统计信息收集两种方式。
每日合并不会收集统计信息，统计信息收集在 OceanBase 数据库 MySQL 模式和 Oracle 模式的使用是相同的，不区分模式。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000222327&lt;/p&gt;
&lt;p&gt;1.查看统计信息
Oracle：DBA_TAB_COL_STATISTICS
MySQL：OCEANBASE.DBA_TAB_COL_STATISTICS
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000221487&lt;/p&gt;
&lt;p&gt;#oceanbase.DBA_OB_TABLE_STAT_STALE_INFO	,4.2.1不适用&lt;/p&gt;
&lt;p&gt;2.收集统计信息
#手动收集统计信息
#DBMS_STATS 系统包统计信息收集选项：
PROCEDURE gather_table_stats (
ownname            VARCHAR2,
tabname            VARCHAR2,
partname           VARCHAR2 DEFAULT NULL,
estimate_percent   NUMBER DEFAULT AUTO_SAMPLE_SIZE,
block_sample       BOOLEAN DEFAULT FALSE,
method_opt         VARCHAR2 DEFAULT DEFAULT_METHOD_OPT,
degree             NUMBER DEFAULT NULL,
granularity        VARCHAR2 DEFAULT DEFAULT_GRANULARITY,
cascade            BOOLEAN DEFAULT NULL,
stattab            VARCHAR2 DEFAULT NULL,
statid             VARCHAR2 DEFAULT NULL,
statown            VARCHAR2 DEFAULT NULL,
no_invalidate      BOOLEAN DEFAULT FALSE,
stattype           VARCHAR2 DEFAULT &apos;DATA&apos;,
force              BOOLEAN DEFAULT FALSE
);&lt;/p&gt;
&lt;p&gt;PROCEDURE gather_schema_stats (
ownname            VARCHAR2,
estimate_percent   NUMBER DEFAULT AUTO_SAMPLE_SIZE,
block_sample       BOOLEAN DEFAULT FALSE,
method_opt         VARCHAR2 DEFAULT DEFAULT_METHOD_OPT,
degree             NUMBER DEFAULT NULL,
granularity        VARCHAR2 DEFAULT DEFAULT_GRANULARITY,
cascade            BOOLEAN DEFAULT NULL,
stattab            VARCHAR2 DEFAULT NULL,
statid             VARCHAR2 DEFAULT NULL,
statown            VARCHAR2 DEFAULT NULL,
no_invalidate      BOOLEAN DEFAULT FALSE,
stattype           VARCHAR2 DEFAULT &apos;DATA&apos;,
force              BOOLEAN DEFAULT FALSE
);&lt;/p&gt;
&lt;p&gt;#实际执行命令：
CALL DBMS_STATS.GATHER_TABLE_STATS (&apos;testUser01&apos;, &apos;tbl1&apos;, method_opt=&amp;gt;&apos;FOR ALL COLUMNS SIZE
5&apos;, granularity=&amp;gt;&apos;ALL&apos;, degree=&amp;gt;4, no_invalidate=&amp;gt;FALSE);
Query OK, 0 rows affected&lt;/p&gt;
&lt;p&gt;https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003980722&lt;/p&gt;
&lt;p&gt;#选项介绍：
ownname：用户名，如果用户名设置为 NULL，会默认使用当前登录用户名。
tabname：表名。
partname：分区名，默认为 NULL。
estimate_percent：指定使用多少比例的数据计算其分布特征，范围为 [0.000001,100]，如果指定为 NULL，则使用所有数据；
默认是 AUTO_SAMPLE_SIZE，由优化器内部决定使用多少比例的数据。
block_sample：是否使用块采样代替行采样，默认是 FALSE 的。&lt;/p&gt;
&lt;p&gt;method_opt：设置列级别的统计信息收集方式，主要采用下面的语法方式来设定：
method_opt:
FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]
| FOR COLUMNS [size clause] column [size_clause] [,column [size_clause]...]&lt;/p&gt;
&lt;p&gt;size_clause:
SIZE integer
| SIZE REPEAT
| SIZE AUTO
| SIZE SKEWONLY&lt;/p&gt;
&lt;p&gt;column:
column_name
| (column_name [, column_name])
integer：指定收集列的直方图桶的个数，范围在 [1-2048]。
REPEAT：仅仅只收集已经有收集过的直方图的列的直方图；使用之前收集直方图设置的桶个数。
AUTO：由 OceanBase 数据库优化器来决定是否收集列的直方图，取决于列的使用情况，桶个数使用默认值为 254。
SKEWONLY：仅仅只收集数据分布不均匀的列的直方图；直方图桶个数使用默认值为 254。
degree：统计信息收集时的并行度，默认是 NULL，使用 prefs 配置的并行度（默认为 1）。
granularity：统计信息收集时的分区粒度，目前支持以下几种设置：
&apos;GLOBAL&apos;：收集全局级别的统计信息。
&apos;PARTITION&apos;：收集分区级别的统计信息。
&apos;SUBPARTITION&apos;：收集子分区级别的统计信息。
&apos;ALL&apos;：收集所有的统计信息(GLOBAL、PARTITION、SUBPARTITION)。
&apos;AUTO&apos;：使用默认方式收集(GLOBAL、PARTITION、SUBPARTITION) 统计信息，这个是默认值。
&apos;DEFAULT&apos;：收集 GLOBAL、PATITION 级别的统计信息。
&apos;GLOBAL AND PARTITION&apos;：收集全局、分区级别的统计信息。
&apos;APPROX_GLOBAL AND PARTITION&apos;：收集分区级别的统计信息并根据分区信息推导出全局级别的统计信息。
cascade：是否同时收集表的索引统计信息，默认为 TRUE。
force：是否强制收集统计信息，忽略锁的状态，默认 FALSE。&lt;/p&gt;
&lt;p&gt;https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000222325&lt;/p&gt;
</content:encoded></item><item><title>国内开源大模型下载地址</title><link>https://blog.newworld.help/posts/%E5%9B%BD%E5%86%85%E5%BC%80%E6%BA%90%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%9B%BD%E5%86%85%E5%BC%80%E6%BA%90%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80/</guid><description>1.下载推理引擎llama.cpp</description><pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;开源模型下载地址
https://modelscope.cn/&lt;/p&gt;
&lt;p&gt;1.下载推理引擎llama.cpp
https://github.com/ggml-org/llama.cpp/releases&lt;/p&gt;
&lt;p&gt;2.下载DeepSeek-R1-Distill-Qwen-1.5B-GGUF
#因为 setuptools 70+ 版本开始弃用 pkg_resources，而 modelscope 还依赖这个模块，setuptools&amp;lt;71
pip install setuptools==69.5.1&lt;/p&gt;
&lt;p&gt;#下载说明
modelscope download --model unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF README.md --local_dir F:\浏览器默认下载位置
#下载文件
modelscope download --model unsloth/DeepSeek-R1-Distill-Qwen-1.5B-GGUF --local_dir F:\浏览器默认下载位置\DeepSeek-R1-Distill-Qwen-1.5B&lt;/p&gt;
&lt;p&gt;部分	     含义
unsloth 	 #社区名
/	         #分隔符，前面是组织，后面是模型名
DeepSeek	 #公司品牌 - 深度求索公司
R1	         #模型版本 - Reasoning 1，第一代推理模型
-Distill	 #蒸馏版 - 从大模型蒸馏（压缩）而来
-Qwen	     #基础架构 - 基于 Qwen（通义千问）模型结构
-1.5B	     #参数量 - 15 亿参数（B = Billion = 十亿）
-GGUF	     #文件格式 - GGUF 量化格式，适合本地推理&lt;/p&gt;
&lt;p&gt;3.下载完后，仅使用一个模型
DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf&lt;/p&gt;
&lt;p&gt;_   .-&apos;)                _ .-&apos;) _     (&apos;-.             .-&apos;)                              _ (&lt;code&gt;-.    (&apos;-. ( &apos;.( OO )_             ( (  OO) )  _(  OO)           ( OO ).                           ( (OO  ) _(  OO)  ,--.   ,--.).-&apos;),-----. \     .&apos;_ (,------.,--.     (_)---\_)   .-----.  .-&apos;),-----.  _.&lt;/code&gt;     (,------.
|   &lt;code&gt;.&apos;   |( OO&apos;  .-.  &apos;,&lt;/code&gt;&apos;--...&lt;em&gt;) |  .---&apos;|  |.-&apos;) /    _ |   &apos;  .--./ ( OO&apos;  .-.  &apos;(__...--&apos;&apos; |  .---&apos;
|         |/   |  | |  ||  |  \  &apos; |  |    |  | OO )\  :&lt;code&gt; &lt;/code&gt;.   |  |(&apos;-. /   |  | |  | |  /  | | |  |
|  |&apos;.&apos;|  |_) |  ||  ||  |   &apos; |(|  &apos;--. |  |&lt;code&gt;-&apos; | &apos;..&lt;/code&gt;&apos;&apos;.) /&lt;/em&gt;) |OO  )_) |  ||  | |  |&lt;em&gt;.&apos; |(|  &apos;--.
|  |   |  |  \ |  | |  ||  |   / : |  .--&apos;(|  &apos;---.&apos;.-.&lt;/em&gt;)   \ ||  |&lt;code&gt;-&apos;|   \ |  | |  | |  .___.&apos; |  .--&apos;  |  |   |  |   &lt;/code&gt;&apos;  &apos;-&apos;  &apos;|  &apos;--&apos;  / |  &lt;code&gt;---.|      | \       /(_&apos;  &apos;--&apos;\    &lt;/code&gt;&apos;  &apos;-&apos;  &apos; |  |      |  &lt;code&gt;---.  &lt;/code&gt;--&apos;   &lt;code&gt;--&apos;     &lt;/code&gt;-----&apos; &lt;code&gt;-------&apos;  &lt;/code&gt;------&apos;&lt;code&gt;------&apos;  &lt;/code&gt;-----&apos;    &lt;code&gt;-----&apos;      &lt;/code&gt;-----&apos;  &lt;code&gt;--&apos;      &lt;/code&gt;------&apos;&lt;/p&gt;
&lt;p&gt;Downloading Model from https://www.modelscope.cn to directory: F:\浏览器默认下载位置\DeepSeek-R1-Distill-Qwen-1.5B
Downloading [configuration.json]: 100%|███████████████████████████████████████████████| 73.0/73.0 [00:00&amp;lt;00:00, 140B/s]
Downloading [config.json]: 100%|██████████████████████████████████████████████████████| 679/679 [00:00&amp;lt;00:00, 1.23kB/s]
Downloading [config.json]: 100%|██████████████████████████████████████████████████████| 679/679 [00:00&amp;lt;00:00, 1.23kB/s]
Downloading [DeepSeek-R1-Distill-Qwen-1.5B-Q8_0.gguf]:  17%|███▊                   | 301M/1.76G [03:44&amp;lt;18:49, 1.40MB/s]
Downloading [DeepSeek-R1-Distill-Qwen-1.5B-Q6_K.gguf]:  21%|████▉                  | 299M/1.36G [03:45&amp;lt;14:25, 1.33MB/s]
Downloading [DeepSeek-R1-Distill-Qwen-1.5B-BF16.gguf]:   9%|██▏                    | 321M/3.32G [03:45&amp;lt;31:30, 1.70MB/s]
Downloading [DeepSeek-R1-Distill-Qwen-1.5B-Q2_K.gguf]:  42%|█████████▉              | 298M/718M [03:45&amp;lt;06:03, 1.21MB/s]
Downloading [DeepSeek-R1-Distill-Qwen-1.5B-Q3_K_M.gguf]:  35%|███████▌              | 305M/882M [03:45&amp;lt;07:15, 1.39MB/s]
Downloading [DeepSeek-R1-Distill-Qwen-1.5B-Q2_K_L.gguf]:  41%|████████▉             | 313M/770M [03:45&amp;lt;05:40, 1.41MB/s]
Downloading [DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf]:  29%|█████▉               | 304M/1.04G [03:45&amp;lt;09:04, 1.47MB/s]
Downloading [DeepSeek-R1-Distill-Qwen-1.5B-Q5_K_M.gguf]:  25%|█████▎               | 311M/1.20G [03:45&amp;lt;11:40, 1.37MB/s]&lt;/p&gt;
</content:encoded></item><item><title>Oracle11g运行环境准备</title><link>https://blog.newworld.help/posts/oracle11g%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle11g%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87/</guid><description>关闭selinux iptables ip6tables NetworkManager   yum源配置</description><pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;11g 单机 asm&lt;/p&gt;
&lt;p&gt;关闭selinux iptables ip6tables NetworkManager   yum源配置&lt;/p&gt;
&lt;p&gt;1、设置ip地址
2、设置主机名、修改/etc/hosts,设置主机名和Ip的对应关系&lt;/p&gt;
&lt;p&gt;3、安装oracle依赖的软件包
yum -y install binutils-* compat-libstdc++-* compat-libstdc++-&lt;em&gt;.i686 elfutils-libelf&lt;/em&gt; elfutils-libelf-devel* gcc-* gcc-c++-* glibc-* glibc-&lt;em&gt;.i686 glibc-common&lt;/em&gt; glibc-devel* glibc-devel*.i686 glibc-headers* ksh* libaio* libaio*.i686 libaio* libaio*.i686 libgcc* libgcc*.i686 libstdc++* libstdc++&lt;em&gt;.i686 libstdc++-devel&lt;/em&gt; make* sysstat* unixODBC* unixODBC*.i686 unixODBC-devel* unixODBC-devel*&lt;/p&gt;
&lt;p&gt;4、建立用户和组
oracle10g		安装管理database软件的用户	oracle用户	dba组
oracle11g 	安装管理database软件的用户	oracle用户	oinstall组
安装管理grid软件的用户	grid用户		oinstall组&lt;/p&gt;
&lt;p&gt;/usr/sbin/groupadd -g 501 oinstall
/usr/sbin/groupadd -g 502 dba
/usr/sbin/groupadd -g 504 asmadmin
/usr/sbin/groupadd -g 506 asmdba
/usr/sbin/groupadd -g 507 asmoper
/usr/sbin/useradd -u 501 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
/usr/sbin/useradd -u 502 -g oinstall -G dba,asmdba oracle&lt;/p&gt;
&lt;p&gt;passwd grid
passwd oracle&lt;/p&gt;
&lt;p&gt;5、创建基本目录
创建grid目录结构   grid 软件相关路径   grid用户
mkdir -p /u01/app/oraInventory		oracle清单目录,保存甲骨文信息,10g是/u01/app/oracle/oraInventory
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01/app/oraInventory&lt;/p&gt;
&lt;p&gt;mkdir -p /u01/app/grid			grid用户的oracle_base
chmod -R 775 /u01/app/grid
chown -R grid:oinstall /u01/app/grid&lt;/p&gt;
&lt;p&gt;mkdir -p /u01/app/11.2.0/grid		grid用户的oracle_home
chown -R grid:oinstall /u01/app/11.2.0/grid
chmod -R 775 /u01/app/11.2.0/grid&lt;/p&gt;
&lt;p&gt;创建oracle目录结构		创建的时database软件相关的路径  oracle用户&lt;/p&gt;
&lt;p&gt;/u01/app/oracle/product/11.2/db_1	备注:oracle用户的oracle_home&lt;/p&gt;
&lt;p&gt;/u01/app/oracle		oracle用户的$oracle_base,$oracle_home
mkdir -p /u01/app/oracle/cfgtoollogs		dbca/dbua配置工具日志
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/app/oracle
chown oracle /u01/app/oraInventory&lt;/p&gt;
&lt;p&gt;编写用户.bash_profile
oracle用户操作:
vim ~/.bash_profile
export DISPLAY=192.168.81.1:0.0
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
export PATH=$PATH:$ORACLE_HOME/bin
生效 . .bash_profile
grid用户操作:
vim ~/.bash_profile
export DISPLAY=192.168.81.1:0.0
export ORACLE_BASH=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export PATH=$PATH:$ORACLE_HOME/bin
生效 . .bash_profile&lt;/p&gt;
</content:encoded></item><item><title>WebSphere常用操作</title><link>https://blog.newworld.help/posts/websphere%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C/</link><guid isPermaLink="true">https://blog.newworld.help/posts/websphere%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C/</guid><description>1&gt;创建profile需要先配置/etc/hosts文件，解析本主机主机名</description><pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;https://www.modb.pro/db/506870&lt;/p&gt;
&lt;p&gt;1.创建profile
1&amp;gt;创建profile需要先配置/etc/hosts文件，解析本主机主机名
略
2&amp;gt;命令创建
创建普通的 AppSrv01
cd /was/IBM/WebSphere/AppServer/bin
./manageprofiles.sh -create -templatePath /was/IBM/WebSphere/AppServer/profileTemplates/default &lt;br /&gt;
profileName AppSrv01 -p****** ../profiles/AppSrv01 -nodeName docker-node-01 &lt;br /&gt;
-cellName docker-node-01Cell -hostname docker&lt;/p&gt;
&lt;p&gt;2.启动was
把/was目录属主权限授予给was用户
su - was
cd /was/IBM/WebSphere/AppServer/profiles/AppSrv01/bin
./startServer.sh server1&lt;/p&gt;
&lt;p&gt;#停止
./stopServer.sh server1
密码:admin/P@ssw0rd&lt;/p&gt;
&lt;p&gt;3.配置server.xml文件(看需要做)
cd /was/IBM/WebSphere/AppServer/profiles/AppSrv01/config/cells/xxxxxx/nodes/xxxxx/server/server1/server.xml
目前JVM参数配置如下:
initialHeapSize=&quot;1024&quot; maximumHeapSize=&quot;2048&quot;
初始堆内存设置为1024MB，最大堆内存设置为2048MB
可以根据实际进行修改,生产环境是1546,3069&lt;/p&gt;
&lt;p&gt;4.登陆控制台
http:/xx.xx.xx.xx:9060/ibm/console
密码:admin/P@ssw0rd&lt;/p&gt;
</content:encoded></item><item><title>批量导出O到excel</title><link>https://blog.newworld.help/posts/%E6%89%B9%E9%87%8F%E5%AF%BC%E5%87%BAo%E5%88%B0excel/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%89%B9%E9%87%8F%E5%AF%BC%E5%87%BAo%E5%88%B0excel/</guid><description>pip install cx_Oracle</description><pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.安装依赖
pip install cx_Oracle
pip install xlsxwriter&lt;/p&gt;
&lt;p&gt;2.脚本
import cx_Oracle
import xlsxwriter&lt;/p&gt;
&lt;h1&gt;存储连接串的列表&lt;/h1&gt;
&lt;p&gt;database_connection_strings = [
&apos;oracle/oracle@127.0.0.1:1521/orclpdb&apos;,
&apos;oracle/oracle@192.168.81.221/orcl&apos;,
&apos;oracle/oracle@192.168.81.121/orcl&apos;,
# 更多的连接串
]&lt;/p&gt;
&lt;h1&gt;创建一个Excel工作簿和工作表&lt;/h1&gt;
&lt;p&gt;workbook = xlsxwriter.Workbook(&apos;output.xlsx&apos;)
worksheet = workbook.add_worksheet()&lt;/p&gt;
&lt;h1&gt;初始化行&lt;/h1&gt;
&lt;p&gt;row_num = 0
first_run = True  # 添加标志确定是否为首次运行&lt;/p&gt;
&lt;h1&gt;在每个数据库环境中执行查询并将结果写入Excel&lt;/h1&gt;
&lt;p&gt;for db_connection_string in database_connection_strings:
try:
# 创建连接
conn = cx_Oracle.connect(db_connection_string)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    # 创建游标
    cur = conn.cursor()

    # 执行SQL查询
    cur.execute(&quot;SELECT * FROM emp&quot;)

    # 在第一轮查询时写入字段名称
    if first_run:
        worksheet.write(row_num, 0, &quot;IP_STR&quot;)  # 新增字段名称
        for c, column in enumerate(cur.description, start=1):
            worksheet.write(row_num, c, column[0])
        worksheet.write(row_num, c+1, &quot;Error&quot;)  # 新增&apos;Error&apos;字段
        first_run = False  # 更新首次运行标志

    # 将数据库数据写入Excel工作表
    for r, row in enumerate(cur, start=row_num + 1):
        worksheet.write(r, 0, db_connection_string)  # 在每行的第一列添加数据库连接字符串
        for c, col in enumerate(row, start=1):
            worksheet.write(r, c, col)

    # 更新行号
    row_num = r

    # 关闭数据库连接
    cur.close()
    conn.close()

except Exception as e:
    # 如果有错误发生，将其记录在新行的最后一个字段上，并忽略该错误，继续执行代码
    row_num += 1  # 新行开始
    worksheet.write(row_num, 0, db_connection_string)
    worksheet.write(row_num, c+1, str(e))
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;保存并关闭工作簿&lt;/h1&gt;
&lt;p&gt;workbook.close()&lt;/p&gt;
</content:encoded></item><item><title>KReplay性能验证</title><link>https://blog.newworld.help/posts/kreplay%E6%80%A7%E8%83%BD%E9%AA%8C%E8%AF%81/</link><guid isPermaLink="true">https://blog.newworld.help/posts/kreplay%E6%80%A7%E8%83%BD%E9%AA%8C%E8%AF%81/</guid><description>1、虚拟机【{1}节点 40（Oracle DB 源端、KES 灾备）】还原快照至【[5]全量数据搬迁完成】。</description><pubDate>Sun, 27 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;#######################################前情提要#######################################&lt;/p&gt;
&lt;p&gt;1、虚拟机【{1}节点 40（Oracle DB 源端、KES 灾备）】还原快照至【[5]全量数据搬迁完成】。
2、虚拟机【{2}节点 50（KReplay 业务重放）】还原快照至【[2]KReplay 部署完成】。
3、虚拟机【{4}节点 111（迁移目标 KES DB）】还原快照至【[6]全量数据搬迁完成】。&lt;/p&gt;
&lt;p&gt;编者注：本章实验会借助于测试表 space_layout_dtl、space_seg_dtl 进行验证，因此将虚拟机【{1}
节点 40（Oracle DB 源端、KES 灾备）】和【{4}节点 111（迁移目标 KES DB）】还原快照至【[5]全
量数据搬迁完成】之后的某一个快照或时刻即可&lt;/p&gt;
&lt;p&gt;#########################################源端操作192.168.40.40节点操作
1.源端环境检查
su - oracle
env|grep -i sid
lsnrctl status&lt;/p&gt;
&lt;p&gt;sqlplus / as sysdba
SELECT name,open_mode FROM v$database;&lt;/p&gt;
&lt;p&gt;2.源端基础数据准备
CREATE USER KDTS_RAT IDENTIFIED BY oracle;
GRANT dba,connect TO KDTS_RAT;
GRANT advisor TO KDTS_RAT;
GRANT select any dictionary TO KDTS_RAT;
GRANT administer sql tuning set TO KDTS_RAT;&lt;/p&gt;
&lt;p&gt;#清理部分测试数据。
TRUNCATE TABLE space01.space_layout_dtl;
TRUNCATE TABLE space01.space_seg_dtl;&lt;/p&gt;
&lt;p&gt;3.统计业务用户SPACE01对应的模式下测试对象及数据量、数据类型信息。
exec DBMS_STATS.GATHER_SCHEMA_STATS(&apos;SPACE01&apos;);&lt;/p&gt;
&lt;p&gt;#表信息
col owner for a20
col table_name for a30
SELECT owner,table_name,num_rows,blocks
FROM dba_tab_statistics WHERE owner=&apos;SPACE01&apos;
AND table_name IN(&apos;SPACE_LAYOUT_DTL&apos;, &apos;SPACE_SEG_DTL&apos;);&lt;/p&gt;
&lt;p&gt;col data_type for a30
SELECT distinct owner,table_name,data_type
FROM dba_tab_columns WHERE owner=&apos;SPACE01&apos;
AND table_name IN(&apos;SPACE_LAYOUT_DTL&apos;, &apos;SPACE_SEG_DTL&apos;)
ORDER BY 2;&lt;/p&gt;
&lt;p&gt;#########################################目标端操作192.168.40.111节点操作&lt;/p&gt;
&lt;p&gt;1.目标端KES环境准备
#清理部分测试数据
su - kingbase
ksql -U system -d test&lt;/p&gt;
&lt;p&gt;TRUNCATE TABLE space01.space_layout_dtl;
TRUNCATE TABLE space01.space_seg_dtl;
SELECT count(&lt;em&gt;) FROM space01.space_layout_dtl;
SELECT count(&lt;/em&gt;) FROM space01.space_seg_dtl;&lt;/p&gt;
&lt;p&gt;2.将模式space01中的对象进行碎片整理、统计信息收集。
VACUUM space01.space_base;
VACUUM space01.space_header;
VACUUM space01.space_segment_detail;
VACUUM space01.space_codeshare;
VACUUM space01.space_segment;
ANALYZE space01.space_base;
ANALYZE space01.space_header;
ANALYZE space01.space_segment_detail;
ANALYZE space01.space_codeshare;
ANALYZE space01.space_segment;&lt;/p&gt;
&lt;p&gt;\q&lt;/p&gt;
&lt;p&gt;3.设置KWR相关参数，便于对重放时对KES的负载进行性能信息采集。
su - kingbase
cat &amp;gt;&amp;gt; /data/kingbase.conf &amp;lt;&amp;lt; &quot;EOF&quot;
############KWR add############
track_sql = on
track_instance = on
track_wait_timing = on
track_counts = on
track_io_timing = on
track_functions = &apos;all&apos;
sys_stat_statements.track = &apos;top&apos;
sys_kwr.enable = on
EOF&lt;/p&gt;
&lt;p&gt;tail -10 /data/kingbase.conf
sys_ctl restart&lt;/p&gt;
&lt;p&gt;ksql -U system -d test&lt;/p&gt;
&lt;p&gt;CREATE EXTENSION sys_kwr;&lt;/p&gt;
&lt;p&gt;\q
4.设置免密连接数据库
vi /data/sys_hba.conf
删除对应的3行,将下列3行换进去&lt;/p&gt;
&lt;h1&gt;&quot;local&quot; 只能用于UNIX域套接字&lt;/h1&gt;
&lt;p&gt;local   all             all                                     trust&lt;/p&gt;
&lt;h1&gt;IPv4 本地连接:&lt;/h1&gt;
&lt;p&gt;host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust&lt;/p&gt;
&lt;p&gt;cat /data/sys_hba.conf | grep -i trust&lt;/p&gt;
&lt;p&gt;5.生效后并进行验证。
sys_ctl reload
ksql -Usystem -dtest
\q
ksql -Usystem -dtest -h127.0.0.1 -p54321
\q
ksql -Usystem -dtest -h192.168.40.111 -p54321
\q&lt;/p&gt;
&lt;p&gt;6.目标端用于性能监控的用户
--1、用管理员system连接数据库test。
--2、设置用户space01对数据库kingbase的操作权限。
ksql -Usystem -dtest
\c test system
ALTER USER space01 WITH superuser;
GRANT all ON database kingbase TO space01;
--3、设置用户space01对程序包dbms_output的操作权限。
GRANT all ON package dbms_output TO space01;&lt;/p&gt;
&lt;p&gt;#########################################源端操作192.168.40.40节点操作&lt;/p&gt;
&lt;p&gt;1、登录（或切换至）oracle用户，创建目录db_replay_capture，用于存放工作负载信息。
su - oracle
mkdir db_replay_capture
cd db_replay_capture/
pwd&lt;/p&gt;
&lt;p&gt;2.连接数据库管理员sys，创建目录对象db_replay_capture_dir。
sqlplus / as sysdba
CREATE OR REPLACE directory db_replay_capture_dir AS &apos;/home/oracle/db_replay_capture&apos;;
GRANT read,write ON directory db_replay_capture_dir TO KDTS_RAT;&lt;/p&gt;
&lt;p&gt;#检查数据库的定义信息
set lines 222
col owner for a10
col directory_name for a25
col directory_path for a80
SELECT * FROM dba_directories;
col grantee for a10
col owner for a10
col table_name for a30
col grantor for a10
col privilege for a10
SELECT * FROM dba_tab_privs WHERE grantee=&apos;KDTS_RAT&apos;;&lt;/p&gt;
&lt;p&gt;3.捕获工作负载
#连接数据库管理员sys，查看源端Oracle数据库的当前SCN信息。
col dt for a24
SELECT to_char(systimestamp,&apos;yyyy-mm-dd hh24:mi:ss&apos;)dt, current_scn from v$database;
DT			 CURRENT_SCN&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;2025-02-23 11:03:33	     1084296&lt;/p&gt;
&lt;p&gt;#开启工作负载捕获操作。
BEGIN
DBMS_WORKLOAD_CAPTURE.start_capture (name=&amp;gt;&apos;test_capture_1&apos;,
dir=&amp;gt;&apos;DB_REPLAY_CAPTURE_DIR&apos;, duration=&amp;gt; NULL);
END;
/&lt;/p&gt;
&lt;p&gt;4.上传测试数据的脚本至/home/oracle中。
cd ~
ls -l ora_*&lt;/p&gt;
&lt;p&gt;#新建两个会话窗口，分别执行脚本，模拟数据库操作，以产生相应的工作负载。
nohup sqlplus space01/space01@192.168.40.40:1521/orcl @/home/oracle/ora_space_seg_dtl_V0.01.sql &amp;gt;&amp;gt; /home/oracle/info1.log 2&amp;gt;&amp;amp;1 &amp;amp;
nohup sqlplus space01/space01@192.168.40.40:1521/orcl @/home/oracle/ora_space_layout_dtl_V0.01.sql &amp;gt;&amp;gt; /home/oracle/info2.log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/p&gt;
&lt;p&gt;5.脚本执行完成后，停止工作负载捕获。
sqlplus / as sysdba
BEGIN
DBMS_WORKLOAD_CAPTURE.finish_capture;
END;
/&lt;/p&gt;
&lt;p&gt;6.源端测试表数据信息统计。
SELECT count(&lt;em&gt;) FROM space01.space_layout_dtl;
SELECT count(&lt;/em&gt;) FROM space01.space_seg_dtl;&lt;/p&gt;
&lt;p&gt;7.获取工作负载捕获操作的captureid，查询负载的起止时间时间（或SCN）。
SELECT DBMS_WORKLOAD_CAPTURE.get_capture_info(&apos;DB_REPLAY_CAPTURE_DIR&apos;) FROM dual;
set lines 222
col start_time for a35
col end_time for a35
SELECT start_scn,to_char(scn_to_timestamp(start_scn),&apos;yyyy-mm-dd hh24:mi:ss&apos;) start_time,
end_scn,to_char(scn_to_timestamp(end_scn),&apos;yyyy-mm-dd hh24:mi:ss&apos;) end_time
FROM dba_workload_captures;&lt;/p&gt;
&lt;p&gt;START_SCN START_TIME				  END_SCN END_TIME&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;1084538 2025-02-23 11:04:06			  1084885 2025-02-23 11:04:39&lt;/p&gt;
&lt;p&gt;02/23/25 11:04:06
02/23/25 11:04:39&lt;/p&gt;
&lt;p&gt;8.查看捕获到的工作负载生成的相关文件。
cd ~
cd db_replay_capture/
ls -l
ls -l cap
ls -l capfiles
ls -l capfiles/inst1
ls -l capfiles/inst1/aa&lt;/p&gt;
&lt;p&gt;9.将工作负载生成的相关文件打包、下载。
cd ~
tar -cf db_replay_capture.tar db_replay_capture
ls -ld db_replay*
编者注：
（1）如需过滤 KDTS 迁移过程中的操作，可以添加过滤器：
exec dbms_workload_capture.ADD_FILTER(&apos;FILTER_KDTS&apos;,&apos;USER&apos;,&apos;KDTS_RAT&apos;);
（2）在多个 pdb 容器环境下，如需过滤掉不需要的 pdb，可以添加过滤器：
exec dbms_workload_capture.ADD_FILTER(&apos;FILTER_PDB&apos;,&apos;PDB_NAME&apos;,&apos;PDB&apos;);&lt;/p&gt;
&lt;p&gt;10.收集源端Oracle的AWR、ASH、ADDM报告
#根据负载对应的开始和结束快照id，生成对应的AWR报告。
#根据负载对应的开始和结束快照 id，生成对应的 ASH 报告。
#根据负载对应的开始和结束快照 id，生成对应的 ADDM 报告。
sqlplus / as sysdba
@/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/awrrpt.sql
@/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/ashrpt.sql
@/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/addmrpt.sql&lt;/p&gt;
&lt;p&gt;#查看相关报告，进行性能问题分析和处理。&lt;/p&gt;
&lt;p&gt;#########################################KReplay端操作192.168.40.50节点操作
1.转换工具参数配置
#将工作负载文件上传至/install中，并进行解压。
scp oracle@192.168.40.40:/home/oracle/db_replay_capture.tar /install
ls -ld /install/db*
cd /install
tar -xf db_replay_capture.tar
ls -ld db*&lt;/p&gt;
&lt;p&gt;2.创建目录db_replay_decode，设置属主和权限，用于存放解码后的文件。
cd /install
mkdir db_replay_decode
ls -ld db_replay_decode&lt;/p&gt;
&lt;p&gt;3.配置conf目录中conf.properties参数。
cd /install/OracleDecode-20241114/
ls -l
ls -l conf/&lt;/p&gt;
&lt;p&gt;vi ./conf/conf.properties&lt;/p&gt;
&lt;p&gt;raw.value.char.nchar_charset = UTF-8
raw.value.char.char_charset = UTF-8
raw.cut.output.file.size = 1
raw.parser.source-file = /install/db_replay_capture
raw.parser.target-file = /install/db_replay_decode
raw.parser.name = parser
raw.parser.parallel-count = 8
raw.parser.output-file-xml = false
raw.parser.output-file-binary = true
raw.parser.index-storage = h2
raw.creat.default.login = false
raw.creat.default.logout = true
raw.record.default.transaction.command = false
raw.delete.decode.file = false
raw.parser.kdms-convert = false&lt;/p&gt;
&lt;p&gt;cat ./conf/conf.properties |grep -v ^# |grep -v ^$&lt;/p&gt;
&lt;p&gt;4.获取转换后的工作负载文件
#执行start.sh开始解码。
cd /install/OracleDecode-20241114/
sh start.sh&lt;/p&gt;
&lt;p&gt;#查看目录db_replay_decode中解码后生成的文件。
cd /install/db_replay_decode/
ls -lrt&lt;/p&gt;
&lt;p&gt;5.重放前的预处理准备（节点50）
#将目录db_replay_decode中解码后生成的文件，进行预处理操作。
su - kingbase
sys_ctl start -D /install/KES/bin/data
ksql -U kingbase -d kingbase&lt;/p&gt;
&lt;p&gt;exec dbms_workload_replay.process_capture(&apos;/install/db_replay_decode&apos;,1);&lt;/p&gt;
&lt;p&gt;#执行预处理统计信息显示函数。
SELECT show_process_capture_statistics();
alter system set max_worker_processes=10;
select sys_reload_conf();&lt;/p&gt;
&lt;p&gt;6.备份数据库data目录。
sys_ctl stop -D /install/KES/bin/data
cp -r /install/KES/bin/data /install/KES/bin/databak
sys_ctl start -D /install/KES/bin/data&lt;/p&gt;
&lt;p&gt;7.KReplay重放（节点50）
#初始化重放。
ksql -U kingbase -d kingbase
exec dbms_workload_replay.initialize_replay(&apos;replay1&apos;,&apos;/install/db_replay_decode&apos;);&lt;/p&gt;
&lt;p&gt;SELECT replay_id, conn_id, capture_user, capture_conn
FROM dbms_database_replay.workload_connection_map;&lt;/p&gt;
&lt;p&gt;8.生成重映射SQL命令。
SELECT &apos;exec dbms_workload_replay.remap_connection(&apos; ||conn_id|| &apos;,&apos;||&apos;&apos;&apos;192.168.40.111&apos;&apos;&apos;||&apos;, 54321, &apos;||&apos;&apos;&apos;test&apos;&apos;&apos;||&apos;);&apos;
FROM DBA_WORKLOAD_CONNECTION_MAP
WHERE capture_user=&apos;SPACE01&apos;;&lt;/p&gt;
&lt;p&gt;#执行重映射SQL命令,命令上面获得,ip是111节点
exec dbms_workload_replay.remap_connection(3, &apos;192.168.40.111&apos;, 54321, &apos;test&apos;);
exec dbms_workload_replay.remap_connection(4, &apos;192.168.40.111&apos;, 54321, &apos;test&apos;);&lt;/p&gt;
&lt;p&gt;9.设置重放模式、加压或减压策略。
set dbms_database_replay.debug_level = 3;
exec dbms_workload_replay.prepare_replay(&apos;TIME&apos;, 100, 100);&lt;/p&gt;
&lt;p&gt;10.开始数据库重放操作。
exec dbms_workload_replay.start_replay();
\x
SELECT * FROM dba_workload_replays;
\x&lt;/p&gt;
&lt;p&gt;#########################################各节点操作节点操作
1.重放结束后，源端、目标端数据比对（节点111）
#手工进行数据比对。
ksql -U space01 -d test
\dt+ space01.*
SELECT count(&lt;em&gt;) FROM space01.space_layout_dtl;
SELECT count(&lt;/em&gt;) FROM space01.space_seg_dtl;&lt;/p&gt;
&lt;p&gt;2.通过KFSMC进行数据比对。&lt;/p&gt;
&lt;p&gt;3.重放结束后，收集重放报告（节点50）
SELECT dbms_workload_replay.get_replay_info(&apos;/install/db_replay_decode&apos;);
SELECT dbms_workload_replay.report(1,&apos;HTML&apos;);
SELECT dbms_workload_replay.report(1,&apos;TEXT&apos;);&lt;/p&gt;
&lt;p&gt;4.收集目标端KES的KWR、KSH、KDDM报告（节点111）
ksql -Usystem -dkingbase
SELECT * FROM perf.kwr_snapshots;
SELECT perf.kwr_report_to_file(1,2,&apos;html&apos;,&apos;/home/kingbase/kwr_1_2.html&apos;);
SELECT perf.ksh_report_to_file_by_snapshots(1,2,&apos;/home/kingbase/ksh_1_2.html&apos;,&apos;html&apos;);
SELECT perf.kddm_report_to_file(1,2,&apos;html&apos;,&apos;/home/kingbase/kddm_1_2.txt&apos;);&lt;/p&gt;
</content:encoded></item><item><title>c普通迁库pdb</title><link>https://blog.newworld.help/posts/c%E6%99%AE%E9%80%9A%E8%BF%81%E5%BA%93pdb/</link><guid isPermaLink="true">https://blog.newworld.help/posts/c%E6%99%AE%E9%80%9A%E8%BF%81%E5%BA%93pdb/</guid><description>create user c##user_for_clone identified by user_for_clone container=a</description><pubDate>Thu, 10 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.源库操作CDB
#创建用于克隆的用户
create user c##user_for_clone identified by user_for_clone container=all;
grant create session, sysoper, create pluggable database to c##user_for_clone container=all;&lt;/p&gt;
&lt;p&gt;#重启PDB到READONLY状态
alter pluggable database AKIMSG01 close immediate instances=all;
alter pluggable database AKIMSG01 open read only  instances=all;&lt;/p&gt;
&lt;p&gt;alter pluggable database AKIMSG02 close immediate instances=all;
alter pluggable database AKIMSG02 open read only  instances=all;&lt;/p&gt;
&lt;p&gt;2.目库操作CDB
#创建克隆源dblink
create public database link dblink_clone_pdb
connect to c##user_for_clone identified by user_for_clone
using &apos;(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.14)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = UATUTF)))&apos;;&lt;/p&gt;
&lt;p&gt;#克隆数据库
CREATE PLUGGABLE DATABASE AKIMSG01 FROM AKIMSG01@dblink_clone_pdb;
CREATE PLUGGABLE DATABASE AKIMSG02 FROM AKIMSG02@dblink_clone_pdb;&lt;/p&gt;
&lt;p&gt;#OPEN PDB
ALTER PLUGGABLE DATABASE AKIMSG01 OPEN;
ALTER PLUGGABLE DATABASE AKIMSG02 OPEN;&lt;/p&gt;
&lt;p&gt;#更新补丁字典  （检查是否成功，否则db是受限模式）
cd $ORACLE_HOME/OPatch
./datapatch -pdb AKIMSG01,AKIMSG02&lt;/p&gt;
&lt;p&gt;#重启pdb
alter pluggable database AKIMSG01 close instances=all;
alter pluggable database AKIMSG01 open instances=all;
alter pluggable database AKIMSG02 close instances=all;
alter pluggable database AKIMSG02 open instances=all;&lt;/p&gt;
&lt;p&gt;3.添加服务：
主库：&lt;/p&gt;
&lt;p&gt;oracle用户：&lt;/p&gt;
&lt;p&gt;PDB_NAME=&quot;AKIMSG01 AKIMSG02&quot;
CDB_NAME=C19U05UT&lt;/p&gt;
&lt;p&gt;for tmp_pdbname in ${PDB_NAME}
do&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;srvctl add service -d ${CDB_NAME} -s ${tmp_pdbname}_R1_S1  -r ${CDB_NAME}1 -a  ${CDB_NAME}2   -pdb ${tmp_pdbname}   -failback yes
srvctl add service -d ${CDB_NAME} -s ${tmp_pdbname}_R2_S1  -r ${CDB_NAME}2 -a  ${CDB_NAME}1   -pdb ${tmp_pdbname}   -failback yes
srvctl add service -d ${CDB_NAME} -s ${tmp_pdbname}_S1     -r ${CDB_NAME}1,${CDB_NAME}2       -pdb ${tmp_pdbname}
srvctl start service -d  ${CDB_NAME} -s ${tmp_pdbname}_R1_S1
srvctl start service -d  ${CDB_NAME} -s ${tmp_pdbname}_R2_S1
srvctl start service -d  ${CDB_NAME} -s ${tmp_pdbname}_S1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;done&lt;/p&gt;
&lt;p&gt;PDB_NAME=&quot;AKIMSG01 AKIMSG02&quot;
for tmp_pdb in $PDB_NAME
do
export ORACLE_SID=&lt;code&gt;ps -ef|grep ora_pmon|grep -v grep |awk &apos;{print $8}&apos;|awk -F&apos;_&apos; &apos;{printf $3}&apos;&lt;/code&gt;
sqlplus -s / as sysdba &amp;lt;&amp;lt;EOF
alter session set container=${tmp_pdb};
alter system set sga_target            =4000M   ;
alter system set shared_pool_size      =500M    ;
alter system set db_cache_size         =1000M   ;
alter system set pga_aggregate_limit   =4000M   ;
alter system set pga_aggregate_target  =2000M    ;
alter system set sessions              =300     ;
alter system set job_queue_processes   =20       ;
alter system set cpu_count             =0        ;
alter system set db_performance_profile=smallplan;
EOF
done&lt;/p&gt;
</content:encoded></item><item><title>mysql存过汇总2020</title><link>https://blog.newworld.help/posts/mysql%E5%AD%98%E8%BF%87%E6%B1%87%E6%80%BB2020/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mysql%E5%AD%98%E8%BF%87%E6%B1%87%E6%80%BB2020/</guid><description>create table db_sqltext_1 (	 id         int(11) unsigned,</description><pubDate>Fri, 04 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;#################################前期测试数据###########################################
-- 建表
create table db_sqltext_1 (	 id         int(11) unsigned,
gmt_create datetime,
db_pk      int(11) unsigned,
sql_pk	 int(11) unsigned,
snap_id    int(11) unsigned,
sql_id	 varchar(13),
fms		 decimal(65,30),
psn		 varchar(30),
sqltext	 varchar(128),
sql_fulltext mediumtext,
origin_id	 int(11) unsigned,
gmt_modified datetime,
first_load_time datetime);
create table db_sqltext_2 (	 id         int(11) unsigned,
gmt_create datetime,
db_pk      int(11) unsigned,
sql_pk	 int(11) unsigned,
snap_id    int(11) unsigned,
sql_id	 varchar(13),
fms		 decimal(65,30),
psn		 varchar(30),
sqltext	 varchar(128),
sql_fulltext mediumtext,
origin_id	 int(11) unsigned,
gmt_modified datetime,
first_load_time datetime);
create table db_sqltext_3 (	 id         int(11) unsigned,
gmt_create datetime,
db_pk      int(11) unsigned,
sql_pk	 int(11) unsigned,
snap_id    int(11) unsigned,
sql_id	 varchar(13),
fms		 decimal(65,30),
psn		 varchar(30),
sqltext	 varchar(128),
sql_fulltext mediumtext,
origin_id	 int(11) unsigned,
gmt_modified datetime,
first_load_time datetime);&lt;/p&gt;
&lt;p&gt;-- 插入数据
insert into  db_sqltext_1 values(1,sysdate(),1,1,1,&apos;sql_id&apos;,6.6,&apos;psn&apos;,&apos;sqltext&apos;,&apos;sql_fulltext&apos;,1,now(),now());
insert into  db_sqltext_2 values(2,sysdate(),1,1,1,&apos;sql_id&apos;,6.6,&apos;psn&apos;,&apos;sqltext&apos;,&apos;sql_fulltext&apos;,1,now(),now());
insert into  db_sqltext_2 values(3,sysdate(),1,1,1,&apos;sql_id&apos;,6.6,&apos;psn&apos;,&apos;sqltext&apos;,&apos;sql_fulltext&apos;,1,now(),now());
insert into  db_sqltext_3 values(4,sysdate(),1,1,1,&apos;sql_id&apos;,6.6,&apos;psn&apos;,&apos;sqltext&apos;,&apos;sql_fulltext&apos;,1,now(),now());
insert into  db_sqltext_3 values(5,sysdate(),1,1,1,&apos;sql_id&apos;,6.6,&apos;psn&apos;,&apos;sqltext&apos;,&apos;sql_fulltext&apos;,1,now(),now());
insert into  db_sqltext_3 values(6,sysdate(),1,1,1,&apos;sql_id&apos;,6.6,&apos;psn&apos;,&apos;sqltext&apos;,&apos;sql_fulltext&apos;,1,now(),now());
truncate db_sqltext_1;
truncate db_sqltext_2;
truncate db_sqltext_3;
#################################数据汇总###########################################
--创建汇总表
create table db_sqltext_all_2020 (table_name varchar(36),
id         int(11) unsigned,
gmt_create datetime,
db_pk      int(11) unsigned,
sql_pk	 int(11) unsigned,
snap_id    int(11) unsigned,
sql_id	 varchar(13),
fms		 decimal(65,30),
psn		 varchar(30),
sqltext	 varchar(128),
sql_fulltext mediumtext,
origin_id	 int(11) unsigned,
gmt_modified datetime,
first_load_time datetime);&lt;/p&gt;
&lt;p&gt;-- 如果存储过程存在，先删除存储过程
DROP PROCEDURE IF EXISTS proc_sqltext_all_2020
-- 定义存储过程
CREATE PROCEDURE proc_sqltext_all_2020()
BEGIN
-- 定义变量记录循环处理是否完成
DECLARE done BOOLEAN DEFAULT FALSE;
-- 定义变量传递表名
DECLARE v_tablename BIGINT(12);
-- 定义游标值
DECLARE cursor_student CURSOR FOR select substr(table_name,12) from information_schema.tables
where table_name like &apos;db_sqltext_%&apos;
and substr(table_name,12) regexp &apos;^[0-9]&apos;;
-- 定义CONTINUE HANDLER，当循环结束时 done=true
DECLARE CONTINUE HANDLER FOR not FOUND SET done=1;
-- 打开游标
OPEN cursor_student;
-- 开始循环
read_loop: LOOP
-- 每次读取一次游标
FETCH cursor_student INTO v_tablename;
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
-- 汇总表
set @sql_run1= concat(&apos;insert into db_sqltext_all_2020 select &apos;,v_tablename,&apos; ,t.*
from db_sqltext_&apos;,v_tablename,&apos; t &apos;);
--  where date_format(gmt_create,&apos;&apos;%Y&apos;&apos;)=2020&apos;
prepare stmt1 from @sql_run1;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;execute stmt1;

deallocate prepare stmt1;

-- 结束循环，意思是等到done=true时，结束循环REPEAT
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;END LOOP;
-- 查询结果，仅会展示查出的最后一条
SELECT v_tablename;
-- 关闭游标
CLOSE cursor_student;
END;&lt;/p&gt;
&lt;p&gt;-- 执行存储过程
CALL proc_sqltext_all_2020();&lt;/p&gt;
</content:encoded></item><item><title>linux网络管理</title><link>https://blog.newworld.help/posts/linux%E7%BD%91%E7%BB%9C%E7%AE%A1%E7%90%86/</link><guid isPermaLink="true">https://blog.newworld.help/posts/linux%E7%BD%91%E7%BB%9C%E7%AE%A1%E7%90%86/</guid><description>/etc/sysconfig/network		RHEL6修改主机名</description><pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;网络管理
/etc/sysconfig/network		RHEL6修改主机名
hostnamectl set-hosename oracle	RHEL7修改主机名
本地主机名映射&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root_@oracle ~]# vim /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;service 软件名 restart	RHEL6重启指定服务
systemctl restart  软件名	RHEL7重启指定服务
chkconfig 软件名 off	设置指定服务开机关闭
systemctl disable 软件名 	设置指定服务开机关闭&lt;/p&gt;
&lt;p&gt;NetworkManager		图形页面网络
iptables,ip6tables		RHEL6防火墙
firewalld			RHEL7防火墙
关闭RHEL安全机制(防火墙策略)
getenforce	查看selinux状态
setenfoce	 0/1	临时设置selinux状态
/etc/selinux/config	持久设置selinux状态&lt;/p&gt;
&lt;p&gt;ifconfig if_name up(down) 				临时激活(关闭)网络接口
ifconfig if_name ip地址 /网络前缀(netmask 子网掩码)	临时设置ip
who		查看连接终端的ip&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@oracle ~]# vim  /etc/sysconfig/network-scripts/ifcfg-eth0	配置网卡
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DEVICE=eth0			配置文件的设备名称
TYPE=Ethernet			网卡类型
ONBOOT=yes			是否启动服务激活网卡
BOOTPROTO=none			ip主机配置协议(dhcp动态,none不使用协议,static使用静态)
IPADDR=192.168.81.2		ip地址
NETMASK=255.255.255.0		定义子网掩码
PREFIX=24			定义网络前缀（网络位数量）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@oracle ~]# vim /etc/udev/rules.d/70-p******-net.rules		网卡和网络接口的映射关系
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;start_udev	重新扫描设备并产生对应关系
单网卡配置多ip ：0&lt;/p&gt;
&lt;p&gt;双网卡
MASTER=虚拟网卡名	归属
SLAVE=yes		确认归属
虚拟网卡正常配置&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@oracle ~]# vim /etc/modprobe.d/dist.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;alias 虚拟网卡名 bonding
options bonding miimon=100 mode=1 fail_over_mac=1
使用bonding模块生成虚拟网卡，options定义bonding选项，miimon检测间隔100ms,mode0负载均衡1自动主备模式
fail_over_mac=1虚拟机用&lt;/p&gt;
</content:encoded></item><item><title>os_db_version_check</title><link>https://blog.newworld.help/posts/os_db_version_check/</link><guid isPermaLink="true">https://blog.newworld.help/posts/os_db_version_check/</guid><description>IP_LIST=($(&lt; /root/demo/ipfile.txt))</description><pubDate>Wed, 18 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;#!/bin/sh
#===============================================================================&lt;/p&gt;
&lt;h1&gt;文件名: os_db_version_check.sh&lt;/h1&gt;
&lt;h1&gt;创建时间: 2025-05-22 12:00:00&lt;/h1&gt;
&lt;h1&gt;修改时间: 2025-05-26 12:00:00&lt;/h1&gt;
&lt;h1&gt;描述: 检查不同操作系统软件配置信息&lt;/h1&gt;
&lt;h1&gt;路径: /root/demo/os_db_version_check.sh&lt;/h1&gt;
&lt;h1&gt;版本: 1.0.0&lt;/h1&gt;
&lt;h1&gt;作者: demo(user@example.com)&lt;/h1&gt;
&lt;h1&gt;版权所有 (C) 2025-2099 Sihan Liu&lt;/h1&gt;
&lt;p&gt;#===============================================================================&lt;/p&gt;
&lt;h1&gt;定义需要修改的ip列表&lt;/h1&gt;
&lt;p&gt;IP_LIST=($(&amp;lt; /root/demo/ipfile.txt))&lt;/p&gt;
&lt;h1&gt;定义日志文件名，cvs文件名称，包含时间标识&lt;/h1&gt;
&lt;p&gt;LOG_FILE=&quot;OS_check_$(date +&apos;%F_%H%M%S&apos;).log&quot;
CSV_FILE=&quot;OS_check_$(date +&apos;%F_%H%M%S&apos;).csv&quot;
echo &quot;check_type,IP,os,db_version&quot; &amp;gt; &quot;$CSV_FILE&quot;&lt;/p&gt;
&lt;p&gt;cat &amp;gt; &quot;/root/demo/.OS_check&quot; &amp;lt;&amp;lt; &apos;EOF&apos;&lt;/p&gt;
&lt;h1&gt;获取操作系统信息&lt;/h1&gt;
&lt;p&gt;if [ &quot;$(uname -s)&quot; = &quot;AIX&quot; ]; then
# 获取 os 版本
pretty_name=&quot;$(uname) $(oslevel)&quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  # 获取 DB 环境变量
  profile_name=/home/oracle/.profile
  unset MAIL
  MAILCHECK=0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;else
libc_version=$(ldd --version | head -n 1 | awk &apos;{print $NF}&apos; | cut -d &apos;.&apos; -f 2)
# 获取 cpu 类型
cpu_type=$(uname -m)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  # 获取 os 类型
  if [[ -e /etc/os-release ]]; then
    os_type=$(grep -oP &apos;^ID=&quot;?(\K[^&quot;]+|[^&quot;]+$)&apos; /etc/os-release)
    pretty_name=$(grep &apos;^PRETTY_NAME=&apos; /etc/os-release | cut -d&apos;&quot;&apos; -f2)
  else
    os_file=$(if [[ -f &quot;/etc/system-release&quot; ]]; then echo /etc/system-release; else echo /etc/redhat-release; fi)
    os_type=$(grep -oP &apos;^[A-Za-z]+&apos; &quot;$os_file&quot;)
    pretty_name=$(cat /etc/system-release)
  fi

  # 获取 os 版本
  if ((libc_version &amp;gt;= 12 &amp;amp;&amp;amp; libc_version &amp;lt;= 16)); then
    os_version=6
  elif ((libc_version &amp;gt;= 17 &amp;amp;&amp;amp; libc_version &amp;lt;= 27)); then
    os_version=7
  elif ((libc_version &amp;gt;= 28 &amp;amp;&amp;amp; libc_version &amp;lt;= 33)); then
    os_version=8
  elif ((libc_version &amp;gt;= 34 &amp;amp;&amp;amp; libc_version &amp;lt;= 38)); then
    os_version=9
  elif ((libc_version &amp;gt;= 39)); then
    os_version=10
  else
    color_printf red &quot;当前操作系统版本 [ $pretty_name ] 不在脚本支持列表中&quot;
  fi

  # 获取 profile 名称
  case &quot;$os_type&quot; in
  sles|opensuse-leap|opensuse-tumbleweed|ubuntu|debian|Deepin)
      profile_name=/home/oracle/.profile
      ;;
  *)
      profile_name=/home/oracle/.bash_profile
      ;;
  esac
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;fi&lt;/p&gt;
&lt;h1&gt;判断是否存在oracle用户&lt;/h1&gt;
&lt;p&gt;if ! id oracle &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then
printf &apos;%s, &apos; &quot;$pretty_name&quot;; &lt;br /&gt;
echo &quot;非标安装无法判断数据库版本&quot;
else
. $profile_name
printf &apos;%s, &apos; &quot;$pretty_name&quot;; &lt;br /&gt;
sqlplus -v 2&amp;gt;&amp;amp;1 | awk &apos;/Release|Version/ {for(i=1;i&amp;lt;=NF;i++) if($i ~ /^[0-9.]+$/) print $i}&apos;|tail -1
fi&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;h1&gt;读取IP&lt;/h1&gt;
&lt;p&gt;for IP_LINE in &quot;${IP_LIST[@]}&quot;; do
IP=&quot;${IP_LINE}&quot;&lt;/p&gt;
&lt;p&gt;{
date
echo &quot;----------------------begin----------------------&quot;
echo &quot;开始对$IP 进行操作&quot;
scp /root/demo/.OS_check root@$IP:/tmp/.OS_check&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 登录远程服务器并执行命令
# Pseudo-terminal will not be allocated because stdin is not a terminal.为正常输出
ssh -t &quot;$IP&quot; &amp;lt;&amp;lt; EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;echo OS_check,$IP, | tr -d &apos;\n&apos;&lt;/p&gt;
&lt;p&gt;sh /tmp/.OS_check&lt;/p&gt;
&lt;p&gt;EOF&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 检查任务执行是否成功
if [ $? -ne 0 ]; then
  echo &quot;注意: IP $IP 任务执行失败&quot;
  continue
fi
date
echo &quot;----------------------end----------------------&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;} &amp;gt;&amp;gt; &quot;$LOG_FILE&quot;&lt;/p&gt;
&lt;p&gt;done&lt;/p&gt;
&lt;p&gt;grep &quot;OS_check&quot; &quot;$LOG_FILE&quot;  &amp;gt;&amp;gt; &quot;$CSV_FILE&quot;&lt;/p&gt;
</content:encoded></item><item><title>ob导数</title><link>https://blog.newworld.help/posts/ob%E5%AF%BC%E6%95%B0/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ob%E5%AF%BC%E6%95%B0/</guid><description>ob-loader-dumper-4.x.0-RELEASE需要单独下载,导数工具 V4.2.1 及之后的版本不再区分企业版和社区版</description><pubDate>Sun, 08 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ob-loader-dumper-4.x.0-RELEASE需要单独下载,导数工具 V4.2.1 及之后的版本不再区分企业版和社区版
https://www.oceanbase.com/softwarecenter&lt;/p&gt;
&lt;p&gt;java安装下载地址
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html&lt;/p&gt;
&lt;p&gt;软件安装官档
https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000000775409&lt;/p&gt;
&lt;p&gt;obdumper 和 obloader 的使用
https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000000775398&lt;/p&gt;
&lt;p&gt;#########################################软件安装#########################################&lt;/p&gt;
&lt;p&gt;1.解压软件
unzip ob-loader-dumper-4.2.x-RELEASE.zip
cd ob-loader-dumper-4.2.x-RELEASE&lt;/p&gt;
&lt;p&gt;2.配置运行环境
用户的本地环境中必须安装 Java 8+ 并配置 JAVA_HOME 环境变量。强烈建议安装 JDK 1.8.0_3xx 及之后的版本。
vi ~/.bash_profile
PATH=$PATH:{ob-loader-dumper}/bin/
export PATH&lt;/p&gt;
&lt;p&gt;source ~/.bash_profile
ps:java安装变量设置不在赘述...&lt;/p&gt;
&lt;p&gt;3.修改 JVM 参数。
JVM 内存太小可能会影响导入导出的性能，甚至影响导入导出功能的稳定性。例如：Full GC 或者 GC Crash。
编辑 JAVA_OPTS 选项所在的文件。&lt;/p&gt;
&lt;p&gt;Linux 操作系统下，编辑 {ob-loader-dumper}/bin/ 目录下的 obloader 和 obdumper 脚本。
Windows 操作系统下，编辑 {ob-loader-dumper}/bin/windows/ 目录下的 obloader.bat 和 obdumper.bat 脚本。&lt;/p&gt;
&lt;p&gt;示例：运行机器可用内存为 16G，将 JVM 堆内存设置为 8G。
JAVA_OPTS=&quot;$JAVA_OPTS -server -Xms8G -Xmx8G -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=128M -Xss352K&quot;
JAVA_OPTS=&quot;$JAVA_OPTS -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -Xnoclassgc -XX:+DisableExplicitGC&lt;/p&gt;
&lt;p&gt;#########################################软件使用#########################################&lt;/p&gt;
&lt;p&gt;该软件只能一个库一个库的导,无法一个租户导&lt;/p&gt;
&lt;p&gt;1.参数
导出dumper：
https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000001953270
导入loader：
https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000001953286
######必要的
-h(--host)                 连接 ODP 或者 OceanBase 物理节点的主机地址
-p(--port)	               连接 ODP 或者 OceanBase 物理节点的主机端口
-u(--user)	               指定数据库用户名、集群的租户名、集群名,格式:&amp;lt;user&amp;gt;@&amp;lt;tenant&amp;gt;#&amp;lt;cluster&amp;gt;
-c                         OB集群名
-t                         OB租户名
-D                         库名/用户名
--sys-user                 sys租户下的用户,用于查询系统表,默认值root,4.0及之后的版本无需指定该选项
--sys-password             sys租户下的密码
-f                         指定导出文件的存放路径
--file-name                指定最终导出的文件名称
--log-path                 指定 OBDUMPER 运行日志的输出目录
--thread                   导出任务的并发数,官档建议不超4,默认值：CPU 乘以 2&lt;/p&gt;
&lt;p&gt;######业务需要
--all --ddl                     导出所有的数据库对象定义,默认的文件后缀是-schema.sql
--all [--csv,--sql,--cut]       只会导出表中的数据,不会导出数据库对象
--all --ddl [--csv,--sql,--cut] 导出所有的数据库对象定义和表数据
--column-splitter               指定列分隔字符串。（区别于 CSV 格式中的列分隔符）
--file-encoding                 表示导出数据文件时使用的文件编码，该编码不是数据库编码
--exclude-data-types	        排除导出指定的数据类型所对应的数据
--query-sql                     导出自定义结果集&lt;/p&gt;
&lt;p&gt;######特殊需要
--drop-object		导出 DDL 时，前置追加 DROP 语句。 该选项仅与 --ddl 选项搭配使用。
--page-size                导出查询语句的分页大小。默认值：1000000
--skip-check-dir           用于标识跳过检查导出的数据目录是否为空。导出目录非空时，程序停止导出
--skip-header	           CSV 格式忽略导出表中的字段,配合--csv使用&lt;/p&gt;
&lt;p&gt;--table-group		导出 表组 定义。	3.1.0
--table		        导出 表 定义或者 表 数据。
--view		        导出 视图 定义。
--function		    导出 函数 定义。
--procedure		    导出 存储过程 定义。
--trigger		    导出 触发器 定义。
--sequence		    导出 序列 定义。
--synonym		    导出 同义词 定义。（暂不支持 MySQL 租户）
--type		        导出 类型 定义。	4.0.0
--type-body		    导出 类型体 定义。
--package		    导出 程序包 定义。
--package-body		导出 程序包体 定义。
--thread            默认值为 CPU 乘以 2，如果 CPU 大于 16，则默认上限为 32。
--batch             批量写入的事务大小,该选项的值与表的宽度成反比的关系,默认值：200。&lt;/p&gt;
&lt;p&gt;2.网络不通打包上传
1&amp;gt;打包
cd tmp_dump
tar -zcvf tmp_dump.tar *&lt;/p&gt;
&lt;p&gt;2&amp;gt;将文件放置目标端口解压
mkdir -p tmp_dump
tar -xzvf tmp_dump.tar -C /xxx/xxx/tmp_dump&lt;/p&gt;
&lt;p&gt;3.导入导出语句&lt;/p&gt;
&lt;p&gt;导出模板（不能一次性全库导出，每次只能导单用户/单数据库）
obdumper -h 172.30.199.49 -P 2883 -uroot -c obcluster -t test_tenant_1 -p Root@2021 -D db1 &lt;br /&gt;
--sys-user=root --sys-password=****** -f /tmp/test_tenant_1 --thread 32 &lt;br /&gt;
--all --ddl --csv --skip-check-dir --skip-header  --log-path /tmp/test_tenant_1/&lt;/p&gt;
&lt;p&gt;ps:多次不同用户导出可以使用相同- f 路径&lt;/p&gt;
&lt;p&gt;导入模板
obloader -h 172.30.199.49 -P 2883 -uroot -c obcluster -t test_tenant_1 -p Root@2021 -D db1 &lt;br /&gt;
-sys-user=root --sys-password=****** -f /tmp/test_tenant_1 --thread 32 &lt;br /&gt;
--all --ddl --csv&lt;/p&gt;
&lt;p&gt;#密码有特殊符号执行方法
-p&apos;gZGd%n8K5&amp;amp;&apos;&lt;/p&gt;
&lt;p&gt;4.常用模板
#将sql语句导出成csv格式
obdumper -h 172.30.199.49 -P 2881 -uroot -t test_tenant_1 -p Root@2021 -D db1 &lt;br /&gt;
-f /tmp/test_tenant_1 --csv --skip-check-dir --skip-header  &lt;br /&gt;
--query-sql &quot;select regexp_replace(empno,&apos;[\n\r]+&apos;,&apos; &apos;)empno from tbl_test limit 100&quot;&lt;/p&gt;
&lt;p&gt;##regexp_replace(empno,&apos;[\n\r]+&apos;,&apos; &apos;)empno
处理文本使用
\n：表示换行符（newline），即 ASCII 字符 \n,CHR(10)。
\r：表示回车符（carriage return），即 ASCII 字符 \r,CHR(13)。
+：加号表示匹配前面的字符集合一次或多次（即至少匹配一次）&lt;/p&gt;
&lt;p&gt;#########################################报错#########################################
官方报错文档
https://www.oceanbase.com/knowledge-base/obloader-obdumper-1000000000486922&lt;/p&gt;
&lt;p&gt;报错1.
[ERROR] Load failed! Error: The system config &lt;code&gt;open_cursors&lt;/code&gt; value(50) may be not enough.
并行太高了,要么--thread 低于50,要么修改 open_cursors 参数&lt;/p&gt;
&lt;p&gt;报错2.
[ERROR] Dump failed. Reason: Timeout, query has reached the maximum query timeout:300000000(us)
修改 ob-loader-dumper-192.168.1.13-RELEASE/conf 文件中的 session.config.json 的参数
set session ob_query_timeout=180000000000&lt;/p&gt;
&lt;p&gt;报错3.
[ERROR] java.lang.OutOfMemoryError: Java heap space。
https://www.oceanbase.com/docs/common-oceanbase-dumper-loader-1000000002401648
可能涉及到宽表
vi {ob-loader-dumper}/bin/obdumper          修改 -Xms 与 -Xmx 同时调大
减小 --thread
减小 --batch&lt;/p&gt;
&lt;p&gt;报错4.
ORA-00600:internal error code,arguments:-5031,Column not found.
这个库之前做过oms导数，有隐藏列的注释没删赶紧
sed -i &apos;/Reserved for data migration tasks of OMS/d&apos; /数据包路径/data/schema名/TABLE/*-schema.sql&lt;/p&gt;
</content:encoded></item><item><title>mysql存过循环游标使用</title><link>https://blog.newworld.help/posts/mysql%E5%AD%98%E8%BF%87%E5%BE%AA%E7%8E%AF%E6%B8%B8%E6%A0%87%E4%BD%BF%E7%94%A8/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mysql%E5%AD%98%E8%BF%87%E5%BE%AA%E7%8E%AF%E6%B8%B8%E6%A0%87%E4%BD%BF%E7%94%A8/</guid><description>DROP TABLE IF EXISTS t_student;</description><pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;-- 学生信息表
DROP TABLE IF EXISTS t_student;
CREATE TABLE &lt;code&gt;t_student&lt;/code&gt; (
&lt;code&gt;id&lt;/code&gt; BIGINT(12) NOT NULL AUTO_INCREMENT COMMENT &apos;主键&apos;,
&lt;code&gt;code&lt;/code&gt; VARCHAR(10) NOT NULL COMMENT &apos;学号&apos;,
&lt;code&gt;name&lt;/code&gt; VARCHAR(20) NOT NULL COMMENT &apos;姓名&apos;,
&lt;code&gt;age&lt;/code&gt; INT(2) NOT NULL COMMENT &apos;年龄&apos;,
&lt;code&gt;gender&lt;/code&gt; CHAR(1) NOT NULL COMMENT &apos;性别（M：男，F：女）&apos;,
PRIMARY KEY (&lt;code&gt;id&lt;/code&gt;),
UNIQUE KEY UK_STUDENT (&lt;code&gt;code&lt;/code&gt;)
) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;&lt;/p&gt;
&lt;p&gt;-- 学生成绩表
DROP TABLE IF EXISTS t_achievement;
CREATE TABLE &lt;code&gt;t_achievement&lt;/code&gt; (
&lt;code&gt;id&lt;/code&gt; BIGINT(12) NOT NULL AUTO_INCREMENT COMMENT &apos;主键&apos;,
&lt;code&gt;year&lt;/code&gt; INT(4) NOT NULL COMMENT &apos;学年&apos;,
&lt;code&gt;subject&lt;/code&gt; CHAR(2) NOT NULL COMMENT &apos;科目（01：语文，02：数学，03：英语）&apos;,
&lt;code&gt;score&lt;/code&gt; INT(3) NOT NULL COMMENT &apos;得分&apos;,
&lt;code&gt;student_id&lt;/code&gt; BIGINT(12) NOT NULL COMMENT &apos;所属学生id&apos;,
PRIMARY KEY (&lt;code&gt;id&lt;/code&gt;)
) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;&lt;/p&gt;
&lt;p&gt;-- 成绩汇总表
DROP TABLE IF EXISTS t_achievement_report;
CREATE TABLE &lt;code&gt;t_achievement_report&lt;/code&gt; (
&lt;code&gt;id&lt;/code&gt; BIGINT(12) NOT NULL AUTO_INCREMENT COMMENT &apos;主键&apos;,
&lt;code&gt;student_id&lt;/code&gt; BIGINT(12) NOT NULL COMMENT &apos;学生id&apos;,
&lt;code&gt;year&lt;/code&gt; INT(4) NOT NULL COMMENT &apos;学年&apos;,
&lt;code&gt;total_score&lt;/code&gt; INT(4) NOT NULL COMMENT &apos;总分&apos;,
&lt;code&gt;avg_score&lt;/code&gt; DECIMAL(4,2) NOT NULL COMMENT &apos;平均分&apos;,
PRIMARY KEY (&lt;code&gt;id&lt;/code&gt;)
) CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;&lt;/p&gt;
&lt;p&gt;-- 学生信息表插入数据
INSERT INTO t_student(id, CODE, NAME, age, gender) VALUES
(1, &apos;2022010101&apos;, &apos;小张&apos;, 18, &apos;M&apos;),
(2, &apos;2022010102&apos;, &apos;小李&apos;, 18, &apos;F&apos;),
(3, &apos;2022010103&apos;, &apos;小明&apos;, 18, &apos;M&apos;);
-- 学生成绩表插入数据
INSERT INTO t_achievement(YEAR, SUBJECT, score, student_id) VALUES
(2022, &apos;01&apos;, 80, 1),
(2022, &apos;02&apos;, 85, 1),
(2022, &apos;03&apos;, 90, 1),
(2022, &apos;01&apos;, 60, 2),
(2022, &apos;02&apos;, 90, 2),
(2022, &apos;03&apos;, 98, 2),
(2022, &apos;01&apos;, 75, 3),
(2022, &apos;02&apos;, 100, 3),
(2022, &apos;03&apos;, 85, 3);&lt;/p&gt;
&lt;p&gt;-- 如果存储过程存在，先删除存储过程
DROP PROCEDURE IF EXISTS statistics_achievement;
-- 定义存储过程
CREATE PROCEDURE statistics_achievement()
BEGIN
-- 定义变量记录循环处理是否完成
DECLARE done BOOLEAN DEFAULT FALSE;
-- 定义变量传递学生id
DECLARE studentid BIGINT(12);
-- 定义游标
DECLARE cursor_student CURSOR FOR SELECT id FROM t_student;
-- 定义CONTINUE HANDLER，当循环结束时 done=true
DECLARE CONTINUE HANDLER FOR SQLSTATE &apos;02000&apos; SET done=TRUE;
-- 打开游标
OPEN cursor_student;
-- 重复遍历
REPEAT
-- 每次读取一次游标
FETCH cursor_student INTO studentid;
-- 计算总分、平均分插入汇总表
INSERT INTO t_achievement_report(student_id, &lt;code&gt;YEAR&lt;/code&gt;, total_score, avg_score)
SELECT studentid, &lt;code&gt;YEAR&lt;/code&gt;, SUM(score), ROUND(SUM(score) / 3, 2) FROM t_achievement t1 WHERE student_id = studentid AND NOT EXISTS(
SELECT 1 FROM t_achievement_report t2 WHERE student_id = studentid AND t1.year = t2.year
) GROUP BY &lt;code&gt;YEAR&lt;/code&gt;;
-- 结束循环，意思是等到done=true时，结束循环REPEAT
UNTIL done END REPEAT;
-- 查询结果，仅会展示查出的最后一条
SELECT studentid;
-- 关闭游标
CLOSE cursor_student;
END$$
DELIMITER ;&lt;/p&gt;
&lt;p&gt;-- 执行存储过程
CALL statistics_achievement();&lt;/p&gt;
&lt;p&gt;https://www.ab62.cn/article/19763.html
http://www.popnic.cn/article/297237&lt;/p&gt;
</content:encoded></item><item><title>基本操作</title><link>https://blog.newworld.help/posts/%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/</guid><description>1.用户创建，授权(参考mysql)</description><pubDate>Sat, 24 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.用户创建，授权(参考mysql)
CREATE USER &apos;edpusr&apos;@&apos;%&apos; IDENTIFIED BY &apos;123123&apos;;&lt;/p&gt;
&lt;p&gt;--业务用户
GRANT CREATE, ALTER, DROP, INDEX, CREATE TEMPORARY TABLES ON &lt;em&gt;.&lt;/em&gt; TO &apos;edpusr&apos;@&apos;%&apos;;
GRANT SELECT,INSERT,UPDATE,DELETE ON &lt;em&gt;.&lt;/em&gt; TO &apos;edpusr&apos;@&apos;%&apos;;
GRANT ALTER ROUTINE,CREATE ROUTINE,EXECUTE ON &lt;em&gt;.&lt;/em&gt; TO &apos;edpusr&apos;@&apos;%&apos;;&lt;/p&gt;
&lt;p&gt;--dba用户
GRANT ALL ON edpusr.* TO &apos;edpusr&apos;@&apos;%&apos;;&lt;/p&gt;
&lt;p&gt;2.审计日志
#设置参数
SET GLOBAL audit_log = 1;   -- 开启审计日志
SET GLOBAL log_output = &apos;table&apos;;  -- 将日志存储到系统表（默认为文件）
SET GLOBAL long_query_time = 2;  -- 单位：秒（例如记录执行超过 2 秒的 SQL，0 表示记录所有 SQL）&lt;/p&gt;
&lt;p&gt;#创建策略
CREATE AUDIT POLICY audit_slow (
Sql_commands = &apos;SELECT,INSERT&apos;,  -- 指定记录的操作类型
Enable = &apos;Y&apos;
);&lt;/p&gt;
&lt;p&gt;#查看慢 SQL（执行超过 2 秒）
SELECT start_time,
user_host,
user,db,
query_time,
sql_text
FROM gbase.audit_log
WHERE 1=1
AND sql_text like &apos;sql内容&apos;
AND query_time &amp;gt; &apos;00:00:10&apos;;&lt;/p&gt;
&lt;p&gt;3.客户端安装&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;解压客户端安装文件：（生成gccli_install目录） # tar xjf gccli-8.6.2_build43-R7-redhat6.2-x86_64.tar.bz2&lt;/li&gt;
&lt;li&gt;进入gccli_install目录，执行以下命令： # cd gccli_install/ # ./gccli_install.sh gccli_standalone.tar.bz2&lt;/li&gt;
&lt;li&gt;安装成功后，连接集群： # /opt/gccli_install/gcluster/server/bin/gccli -uUSER -p****** -hGCLUSTER_NODE_IP&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>binlog2sql-master闪回教程</title><link>https://blog.newworld.help/posts/binlog2sql-master%E9%97%AA%E5%9B%9E%E6%95%99%E7%A8%8B/</link><guid isPermaLink="true">https://blog.newworld.help/posts/binlog2sql-master%E9%97%AA%E5%9B%9E%E6%95%99%E7%A8%8B/</guid><description>参考网址https://www.cnblogs.com/plluoye/p/12995350.html#1-%E7%8E%AF%E5%A2%</description><pubDate>Sat, 10 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;参考网址https://www.cnblogs.com/plluoye/p/12995350.html#1-%E7%8E%AF%E5%A2%83&lt;/p&gt;
&lt;p&gt;下载Binlog2sql: https://codeload.github.com/danfengcao/binlog2sql/zip/master&lt;/p&gt;
&lt;p&gt;该工具的使用依赖以下三个包：
PyMySQL==0.7.8
wheel==0.24.0
mysql-replication==0.9&lt;/p&gt;
&lt;p&gt;1.安装依赖
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc libffi-devel&lt;/p&gt;
&lt;p&gt;2.安装pymysql库
pip3 install pymysql
pip3 install mysql-replication
pip3 install replication&lt;/p&gt;
&lt;p&gt;或(可省略第三步)
git clone https://github.com/danfengcao/binlog2sql.git
cd binlog2sql  //进入下载的源码目录里
pip3 install -r requirements.txt&lt;/p&gt;
&lt;p&gt;#检查配置
pip3 list&lt;/p&gt;
&lt;p&gt;Package           Version&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;deepdiff          5.7.0
mysql-replication 0.44.0
ordered-set       4.0.2
pip               23.2.1
PyMySQL           1.1.0
pyzmq             25.1.1
replication       0.9.9
setuptools        65.5.0
wheel             0.41.2&lt;/p&gt;
&lt;p&gt;3.下载Binlog2sql,解压即可使用
wget https://codeload.github.com/danfengcao/binlog2sql/zip/master
unzip master&lt;/p&gt;
&lt;p&gt;##########################################binlog2sql使用##########################################
1.检查MySQL测试库配置
SHOW VARIABLES LIKE &apos;log_bin&apos;;
SET GLOBAL log_bin = ON;&lt;/p&gt;
&lt;p&gt;2.案例准备
create database cym;
use cym;
create table t1(id int,name varchar(10),addtime datetime default now());
insert into t1 values(1,&apos;赵&apos;,now()),(2,&apos;钱&apos;,now()),(3,&apos;孙&apos;,&apos;2022-01-12 12:12:12&apos;),(4,&apos;李&apos;,&apos;2000-12-12 1:00:00&apos;);
select * from t1;&lt;/p&gt;
&lt;p&gt;+------+------+---------------------+
| id   | name | addtime             |
+------+------+---------------------+
|    1 | 赵   | 2023-09-22 16:50:53 |
|    2 | 钱   | 2023-09-22 16:50:53 |
|    3 | 孙   | 2022-01-12 12:12:12 |
|    4 | 李   | 2000-12-12 01:00:00 |
+------+------+---------------------+
4 rows in set (0.00 sec)&lt;/p&gt;
&lt;p&gt;3.故障模拟
select now();
delete from cym.t1;
select * from cym.t1;&lt;/p&gt;
&lt;p&gt;Empty set (0.00 sec)  -- 确定数据丢失&lt;/p&gt;
&lt;p&gt;4.故障恢复
可以使用root 操作，也可以设置专门的最小权限binlog挖掘用户
create user binlog2sql identified by &apos;binlog2sql&apos;;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON &lt;em&gt;.&lt;/em&gt; TO binlog2sql;&lt;/p&gt;
&lt;p&gt;#检索需要用到的binlog文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@localhost][(none)]&amp;gt; show master status;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;+------------------+----------+--------------+------------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
+------------------+----------+--------------+------------------+---------------------------------------------+
| mysql-bin.000024 |     1805 |              |                  | f475cd3a-e62f-11ed-be51-000c2967fa34:1-8594 |
+------------------+----------+--------------+------------------+---------------------------------------------+
1 row in set (0.00 sec)&lt;/p&gt;
&lt;p&gt;如果删除的时间比较久，需要根据大概的时间范围，结合binlog最后更新时间，确定可能用到的binlog 文件&lt;/p&gt;
&lt;p&gt;获取binlog 位置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[root@localhost][(none)]&amp;gt; select @@log_bin_basename;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;+-----------------------------------+
| @@log_bin_basename                |
+-----------------------------------+
| /mysql/mysqldata/binlog/mysql-bin |
+-----------------------------------+
1 row in set (0.00 sec)&lt;/p&gt;
&lt;p&gt;5.获取误删除操作的undo语句
已知：
误操作时间范围：2023-09-22 16:00:00 之后
mysql-bin.000024 包含的16:00之前的操作
所以我们要挖掘的binlog文件为：mysql-bin.000024
获取Undo语句
python3 /root/binlog2sql-master/binlog2sql/binlog2sql.py -ubinlog2sql -p****** -dcym -t t1 -B --start-file=&apos;mysql-bin.000024&apos; --start-datetime=&apos;2023-09-22 16:00:00&apos; --only-dml&lt;/p&gt;
&lt;p&gt;python3 /root/binlog2sql/binlog2sql/binlog2sql.py -ubinlog2sql -p****** -dcym -t t1 -B --start-file=&apos;mysql-bin.000024&apos; --start-datetime=&apos;2023-09-22 16:00:00&apos; --only-dml&lt;/p&gt;
&lt;p&gt;python3 /root/binlog2sql/binlog2sql/binlog2sql.py -uroot -p123123 -dcym -t t1 -B --start-file=&apos;mysql-bin.000024&apos; --start-datetime=&apos;2023-09-22 16:00:00&apos; --only-dml&lt;/p&gt;
&lt;p&gt;报错:
Traceback (most recent call last):
File &quot;/root/binlog2sql/binlog2sql/binlog2sql.py&quot;, line 145, in &amp;lt;module&amp;gt;
binlog2sql = Binlog2sql(connection_settings=conn_setting, start_file=args.start_file, start_pos=args.start_pos,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File &quot;/root/binlog2sql/binlog2sql/binlog2sql.py&quot;, line 48, in &lt;strong&gt;init&lt;/strong&gt;
cursor.execute(&quot;SHOW MASTER STATUS&quot;)
^^^^^^^^^^^^^^
AttributeError: &apos;Connection&apos; object has no attribute &apos;execute&apos;&lt;/p&gt;
</content:encoded></item><item><title>单机变主备</title><link>https://blog.newworld.help/posts/%E5%8D%95%E6%9C%BA%E5%8F%98%E4%B8%BB%E5%A4%87/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%8D%95%E6%9C%BA%E5%8F%98%E4%B8%BB%E5%A4%87/</guid><description>vi /dm8_data/rural/dm.ini</description><pubDate>Tue, 06 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;修改参数
备份恢复
注册服务
启动数据库&lt;/p&gt;
&lt;p&gt;####################################修改参数####################################&lt;/p&gt;
&lt;p&gt;1.修改dm.ini
vi /dm8_data/rural/dm.ini
INSTANCE_NAME                   = rural_01    #数据库实例名                          ?!
ALTER_MODE_STATUS               = 0           #不允许手工方式修改实力模式/状态/OGUID ?
ENABLE_OFFLINE_TS               = 2           #不允许备库OFFLINE表空间               ?
MAL_INI                         = 1           #打开 MAL 系统                         ?
ARCH_INI                        = 1           #打开归档配置                          ?
SVR_LOG                         = 1           #开启异步SQL日志                       ?&lt;/p&gt;
&lt;p&gt;2.新增dmarch.ini
vi /dm8_data/rural/dmarch.ini
ARCH_WAIT_APPLY            = 0            #0：高性能   1：事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE                = LOCAL        #本地归档类型
ARCH_DEST                = /dm8_arch    #本地归档存放路径
ARCH_FILE_SIZE           = 1024         #单个归档大小，单位 MB
ARCH_SPACE_LIMIT         = 51200        #归档上限，单位 MB&lt;/p&gt;
&lt;p&gt;[ARCHIVE_REALTIME]
ARCH_TYPE                = REALTIME     #实时归档类型
ARCH_DEST                = rural_02     #实时归档目标实例名&lt;/p&gt;
&lt;p&gt;3.新增dmmal.ini
vi /dm8_data/rural/dmmal.ini&lt;/p&gt;
&lt;p&gt;MAL_CHECK_INTERVAL       = 10                  #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL   = 10                  #判定 MAL 链路断开的时间
MAL_TEMP_PATH            = /dm8_data/malpath/  #临时文件目录
MAL_BUF_SIZE             = 512                 #单个 MAL 缓存大小，单位 MB
MAL_SYS_BUF_SIZE         = 2048                #MAL 总大小限制，单位 MB
MAL_COMPRESS_LEVEL       = 0                   #MAL 消息压缩等级，0 表示不压缩&lt;/p&gt;
&lt;p&gt;[MAL_INST1]
MAL_INST_NAME            = rural_01       #实例名，和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST                 = 192.168.81.81  #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT                 = 5336           #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST            = 192.168.56.81  #实例的对外服务 IP 地址
MAL_INST_PORT            = 5236           #实例对外服务端口，和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT              = 5436           #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT         = 5536           #实例监听守护进程 TCP 连接的端口&lt;/p&gt;
&lt;p&gt;[MAL_INST2]
MAL_INST_NAME            = rural_02
MAL_HOST                 = 192.168.81.82
MAL_PORT                 = 5336
MAL_INST_HOST            = 192.168.56.82
MAL_INST_PORT            = 5236
MAL_DW_PORT              = 5436
MAL_INST_DW_PORT         = 5536&lt;/p&gt;
&lt;p&gt;4.新增dmwatcher.ini
vi /dm8_data/rural/dmwatcher.ini&lt;/p&gt;
&lt;p&gt;[GRP1]
DW_TYPE                  = GLOBAL  #全局守护类型
DW_MODE                  = AUTO  #MANUAL：故障手切 AUTO：故障自切
DW_ERROR_TIME            = 20  #远程守护进程故障认定时间
INST_ERROR_TIME          = 20  #本地实例故障认定时间
INST_RECOVER_TIME        = 60  #主库守护进程启动恢复的间隔时间
INST_OGUID               = 45331  #守护系统唯一 OGUID 值
INST_INI                 = /dm8_data/rural/dm.ini  #dm.ini 文件路径
INST_AUTO_RESTART        = 1  #打开实例的自动启动功能
INST_STARTUP_CMD         = /dm8/bin/dmserver  #命令行方式启动
RLOG_SEND_THRESHOLD      = 0  #指定主库发送日志到备库的时间阈值，默认关闭
RLOG_APPLY_THRESHOLD     = 0  #指定备库重演日志的时间阈值，默认关闭&lt;/p&gt;
&lt;p&gt;5.新增dmmonitor_rural_P.ini(只有两台就配备库)
vi /dm8/bin/dmmonitor_rural_P.ini
MON_DW_CONFIRM             = 1                #0：非确认（故障手切） 1：确认（故障自切）
MON_LOG_PATH               = /dm8/log/rural/  #监视器日志文件存放路径?
MON_LOG_INTERVAL           = 60               #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE          = 512              #单个日志大小，单位 MB
MON_LOG_SPACE_LIMIT        = 2048             #日志上限，单位 MB&lt;/p&gt;
&lt;p&gt;################单监视器不用配置这6个参数################
MON_INST_NUM = 2        #监视器系统中的实例总数
MON_HB_INTERVAL = 60    #各实例通信的心跳校验间隔
MON_BRO_INTERVAL = 100  #各实例通信的心跳间隔
MON_VOTE_INTERVAL = 100 #各实例通信的基础投票间隔
MON_ID =1               #注意修改P=1，S=2
MON_MIN =45633          #使用与现有其他确认监视器端口不同的MID（递增），登记入数数据库信息表&lt;/p&gt;
&lt;p&gt;[GRP1]
MON_INST_OGUID           = 45331       #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组GRP1的守护进程的连接信息,以一IP:POST||的形式配置
#IP,PORT 对应dmmal.ini中的 MAL_HOST , MAL_DW_PORT
MON_DW_IP                = 192.168.81.81:5436  #IP 对应 MAL_HOST，PORT 对应 MAL_DW_PORT
MON_DW_IP                = 192.168.81.82:5436&lt;/p&gt;
&lt;p&gt;####################################备份恢复####################################&lt;/p&gt;
&lt;p&gt;1.关库备份
/dm8/bin/DmService_rural_01 stop&lt;/p&gt;
&lt;p&gt;2.备份
cd /dm8/bin
./dmrman
backup database &apos;/dm8_data/rural/dm.ini&apos; backupset &apos;/backup/backup_file&apos;;&lt;/p&gt;
&lt;p&gt;3.传输scp
scp -r /backup/backup_file dmdba@192.168.81.82:/backup&lt;/p&gt;
&lt;p&gt;4.恢复
/dm8/bin/dmrman CTLSTMT=&quot;RESTORE DATABASE TO &apos;/dm8_data/rural&apos; FROM BACKUPSET &apos;/backup/backup_file&apos;&quot;
/dm8/bin/dmrman CTLSTMT=&quot;RECOVER DATABASE &apos;/dm8_data/rural/dm.ini&apos; FROM BACKUPSET &apos;/backup/backup_file&apos;&quot;
/dm8/bin/dmrman CTLSTMT=&quot;RECOVER DATABASE &apos;/dm8_data/rural/dm.ini&apos; UPDATE DB_MAGIC&quot;&lt;/p&gt;
&lt;p&gt;####################################注册服务####################################&lt;/p&gt;
&lt;p&gt;1.注册dmservice服务
#主库注册
/dm8/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8_data/rural/dm.ini -p _rural_01&lt;/p&gt;
&lt;p&gt;#备库注册
/dm8/script/root/dm_service_installer.sh -t dmserver -dm_ini /dm8_data/rural/dm.ini -p _rural_02&lt;/p&gt;
&lt;p&gt;#回退
/dm8/script/root/dm_service_uninstaller.sh -n DmService_rural_01&lt;/p&gt;
&lt;p&gt;2.注册dmwatcher服务
#主库注册
/dm8/script/root/dm_service_installer.sh -t dmwatcher -p _rural_01 -watcher_ini /dm8_data/rural/dmwatcher.ini&lt;/p&gt;
&lt;p&gt;#备库注册
/dm8/script/root/dm_service_installer.sh -t dmwatcher -p _rural_02 -watcher_ini /dm8_data/rural/dmwatcher.ini&lt;/p&gt;
&lt;p&gt;备注:如果配错了,使用删除自启
/dm8/script/root/dm_service_uninstaller.sh -n DmWatcherService_rural_01&lt;/p&gt;
&lt;p&gt;3.注册monitor服务
JK-1机：
/dm8/script/root/dm_service_installer.sh -t dmmonitor -p &lt;br /&gt;
DMMONITOR_rural_P -monitor_ini /dm8/bin/dmmonitor_rural_P.ini&lt;/p&gt;
&lt;p&gt;9.修改启动模式为mount(AB机器)
vim /dm8/bin/DmService_rural_01
vim /dm8/bin/DmService_rural_02&lt;/p&gt;
&lt;p&gt;#mount or open
START_MODE=mount&lt;/p&gt;
&lt;p&gt;10.启动数据库
启动数据库,执行命令(AB机器)
--主库
/dm8/bin/DmService_rural_01 start
/dm8/bin/disql SYSDBA/SYSDBA@192.168.81.81:5236
select STATUS$  from v$instance;
sp_set_para_value(1,&apos;alter_mode_status&apos;,1);
sp_set_oguid(45331);
alter database primary;
sp_set_para_value(1,&apos;alter_mode_status&apos;,0);&lt;/p&gt;
&lt;p&gt;--备库
/dm8/bin/DmService_rural_02 start
/dm8/bin/disql SYSDBA/SYSDBA@192.168.81.82:5236
select STATUS$  from v$instance;
sp_set_para_value(1,&apos;alter_mode_status&apos;,1);
sp_set_oguid(45331);
alter database standby;
sp_set_para_value(1,&apos;alter_mode_status&apos;,0);&lt;/p&gt;
&lt;p&gt;11.启动守护进程
/dm8/bin/DmWatcherService_rural_01 start
/dm8/bin/DmWatcherService_rural_02 start&lt;/p&gt;
&lt;p&gt;确保两个节点全部为open再进行下一步&lt;/p&gt;
&lt;p&gt;12.启动监视器
/dm8/bin/DmMonitorServiceDMMONITOR_rural_P start&lt;/p&gt;
</content:encoded></item><item><title>OGG-02028归档丢失处理</title><link>https://blog.newworld.help/posts/ogg-02028%E5%BD%92%E6%A1%A3%E4%B8%A2%E5%A4%B1%E5%A4%84%E7%90%86/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ogg-02028%E5%BD%92%E6%A1%A3%E4%B8%A2%E5%A4%B1%E5%A4%84%E7%90%86/</guid><description>GGSCI (memogg0501kf as c##ggadm@STUTF1/CDB$ROOT) 36&gt; info all</description><pubDate>Sat, 26 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.查看状态
GGSCI (memogg0501kf as c##ggadm@STUTF1/CDB$ROOT) 36&amp;gt; info all&lt;/p&gt;
&lt;p&gt;Program     Status      Group       Lag at Chkpt  Time Since Chkpt&lt;/p&gt;
&lt;p&gt;MANAGER     RUNNING
JAGENT      RUNNING
PMSRVR      RUNNING
EXTRACT     ABENDED     EXTPDK10    00:00:02      19:14:29&lt;/p&gt;
&lt;p&gt;2.查看报错信息
GGSCI (memogg0501kf as c##ggadm@STUTF1/CDB$ROOT) 37&amp;gt; view report EXTPDK10&lt;/p&gt;
&lt;p&gt;2022-06-16 16:30:25  ERROR   OGG-02028  Failed to attach to logmining server OGG$EXTPDK10 error 1,292 - ORA-01292: LogMiner for upstream capture cannot find log file.&lt;/p&gt;
&lt;p&gt;2022-06-16 16:30:25  ERROR   OGG-01668  PROCESS ABENDING.&lt;/p&gt;
&lt;p&gt;报错信息显示找不到用于上游捕捉的logminer日志&lt;/p&gt;
&lt;p&gt;3.查看信息
GGSCI (memogg0501kf as c##ggadm@STUTF1/CDB$ROOT) 38&amp;gt; view params EXTPDK10&lt;/p&gt;
&lt;p&gt;EXTRACT EXTPDK10
USERID c##ggadm@C06U30ST_ogg PASSWORD Cmb#2020
TRANLOGOPTIONS CHECKPOINTRETENTIONTIME 1
TRANLOGOPTIONS ASYNCTRANSPROCESSING 1024
TRANLOGOPTIONS _READAHEADCOUNT 64&lt;/p&gt;
&lt;p&gt;EXTTRAIL /u01/app/replicat/dirdat/a8&lt;/p&gt;
&lt;p&gt;CACHEMGR CACHESIZE 4GB
REPORTCOUNT EVERY 1 MINUTES, RATE
TRANLOGOPTIONS EXCLUDETAG 00
DISCARDFILE ./dirrpt/EXTPDK10.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 6:00
WARNLONGTRANS 1h, CHECKINTERVAL 5m, SKIPEMPTYTRANS&lt;/p&gt;
&lt;p&gt;DDL INCLUDE MAPPED
SOURCECATALOG PDKTRX05
TABLE PDKTRX05.PDK_TFN_PZC_T;&lt;/p&gt;
&lt;p&gt;4.登录数据库
dblogin USERID c##ggadm@C06U30ST_ogg PASSWORD Cmb#2020&lt;/p&gt;
&lt;p&gt;5.如果是ds库，先登录源库再登录ds库
miningdblogin USERID c##ggadm@C06U30ST_ogg PASSWORD Cmb#2020&lt;/p&gt;
&lt;p&gt;6.取消注册
unregister extract EXTPDK10 database&lt;/p&gt;
&lt;p&gt;7.从前时间点重新抽数，重新注册
alter extract EXTPDK10 begin now
register extract EXTPDK10 database container (PDKTRX05)&lt;/p&gt;
&lt;p&gt;8.启动进程
start EXTPDK10&lt;/p&gt;
&lt;p&gt;9.检查进程状态，等待同步
info all&lt;/p&gt;
</content:encoded></item><item><title>达梦修改数据文件目录</title><link>https://blog.newworld.help/posts/%E8%BE%BE%E6%A2%A6%E4%BF%AE%E6%94%B9%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E8%BE%BE%E6%A2%A6%E4%BF%AE%E6%94%B9%E6%95%B0%E6%8D%AE%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95/</guid><description>1.关闭数据库服务，迁移数据目录路径</description><pubDate>Sat, 19 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.关闭数据库服务，迁移数据目录路径
启停集群(方法备用)
启动数据库
启动主库实例:/dm8/bin/DmService_rural_01 start
启动备库实例:/dm8/bin/DmService_rural_02 start
启动主库守护:/dm8/bin/DmWatcherService_rural_01 start
启动备库守护:/dm8/bin/DmWatcherService_rural_02 start
启动主监视器:/dm8/bin/DmMonitorServiceDMMONITOR_rural_P start
启动备监视器:/dm8/bin/DmMonitorServiceDMMONITOR_rural_S start&lt;/p&gt;
&lt;p&gt;停止数据库
关闭顺序：监控器、守护、实例
停止备监视器:/dm8/bin/DmMonitorServiceDMMONITOR_rural_S stop
停止主监视器:/dm8/bin/DmMonitorServiceDMMONITOR_rural_P stop
停止备库守护:/dm8/bin/DmWatcherService_rural_02 stop
停止主库守护:/dm8/bin/DmWatcherService_rural_01 stop
停止主库实例:/dm8/bin/DmService_rural_01 stop
停止备库实例:/dm8/bin/DmService_rural_02 stop&lt;/p&gt;
&lt;p&gt;2.创建目标目录
mkdir /data2
chown -R dmdba.dinstall /data2
mv /data/dmdata  /data2/dmdata&lt;/p&gt;
&lt;p&gt;3.修改dm.ini (将涉及的目录都修改)
vi /data/dmdata/DAMENG/dm.ini
#file location of dm.ctl
CTL_PATH        = /data2/dmdata/DAMENG/dm.ctl    #ctl file path
CTL_BAK_PATH    = /data2/dmdata/DAMENG/ctl_bak   #dm.ctl backup path
SYSTEM_PATH     = /data2/dmdata/DAMENG           #system path
CONFIG_PATH     = /data2/dmdata/DAMENG           #config path
TEMP_PATH       = /data2/dmdata/DAMENG           #temporary file path
BAK_PATH        = /data2/dmdata/DAMENG/bak       #backup file path
DFS_PATH        =                                #path of db_file in dfs&lt;/p&gt;
&lt;p&gt;4.修改ctl文件
1.将ctl转为txt
./dmctlcvt  TYPE=1  SRC=/data2/dmdata/DAMENG/dm.ctl  DEST=/data2/dmdata/DAMENG/dmctl.txt
2.批量修改txt中的涉及目录的部分
3.将txt转回ctl
./dmctlcvt  TYPE=2  SRC=/data2/dmdata/DAMENG/dmctl.txt  DEST=/data2/dmdata/DAMENG/dm.ctl&lt;/p&gt;
&lt;p&gt;5.修改服务
1.修改DmServiceXX
INI_PATH=&quot;/data2/dm218data/DAMENG/dm.ini&quot;
2.修改数据目录dmwatcher.ini
vi /data/dmdata/DAMENG/dmwatcher.ini
[GRWC1]
INST_INI                 = /data/dmdata/DAMENG/dm.ini  #dm.ini 文件路径&lt;/p&gt;
&lt;p&gt;数据库启动，验证主备情况&lt;/p&gt;
&lt;p&gt;6.通过dmrman备份，恢复时指定 REUSE DMINI参数，即可自动修改dm.ini中的路径参数
./dmrman
backup database  &apos;/data/dmdata/damengdb/dm.ini&apos; backupset &apos;/data/dmbak/20251217fullbak&apos;
compressed level 1 parallel 4;
check backupset &apos;/data/dmbak/20251217fullbak&apos;&lt;/p&gt;
</content:encoded></item><item><title>ACS（自适应游标）</title><link>https://blog.newworld.help/posts/acs%E8%87%AA%E9%80%82%E5%BA%94%E6%B8%B8%E6%A0%87/</link><guid isPermaLink="true">https://blog.newworld.help/posts/acs%E8%87%AA%E9%80%82%E5%BA%94%E6%B8%B8%E6%A0%87/</guid><description>Oracle使用ACS（自适应游标）有二个前提条件：</description><pubDate>Fri, 18 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Oracle使用ACS（自适应游标）有二个前提条件：
1、绑定变量使用了bind peeking。
2、绑定变量的列上有直方图信息。&lt;/p&gt;
&lt;p&gt;官档(mos)
Adaptive Cursor Sharing in 11G[ID 836256.1]
Adaptive Cursor SharingOverview [ID 740052.1]&lt;/p&gt;
&lt;p&gt;相关介绍
https://blog.csdn.net/tianlesoftware/article/details/7573502
https://www.modb.pro/db/14541#
http://www.itpub.net/thread-1779225-1-1.html&lt;/p&gt;
&lt;p&gt;使用测试
http://www.itpub.net/thread-1762279-1-1.html
http://blog.itpub.net/15415488/viewspace-621535
http://blog.itpub.net/53956/viewspace-1384122/
https://blog.csdn.net/leshami/article/details/6923670&lt;/p&gt;
&lt;p&gt;（1）已禁用扩展游标共享
（2）查询没有绑定变量
（3）使用并行查询
（4）设置了某些参数，例如（“_optim_peek_user_binds”=false）
（5）使用 /*+ NO_BIND_AWARE &lt;em&gt;/ hint
（6）使用Outlines锁定执行计划
（7）递归查询
（8） sql 语句中的绑定数大于 14。&lt;/em&gt;* 可能会更少，具体取决于 Bug 10182051 的版本和fix_control设置。See Document : 1983132.1&lt;/p&gt;
&lt;p&gt;########################################确认ACS是否能启用确认########################################&lt;/p&gt;
&lt;p&gt;一、相关参数
自适应游标共享ACS(adaptiver cursor sharing)默认参数，默认启用
_optim_peek_user_binds=TRUE                          --启用用户绑定变量的窥探（binds）
_optimizer_adaptive_cursor_sharing=TRUE              --优化器自适应光标共享
_optimizer_extended_cursor_sharing=UDO               --优化器扩展光标共享
_optimizer_extended_cursor_sharing_rel=SIMPLE        --关系运算符的优化器扩展游标共享&lt;/p&gt;
&lt;p&gt;修改后关闭ACS
alter system set &quot;_optimizer_extended_cursor_sharing_rel&quot;=none;
alter system set &quot;_optimizer_extended_cursor_sharing&quot;=none;
alter system set &quot;_optimizer_adaptive_cursor_sharing&quot;=false;&lt;/p&gt;
&lt;p&gt;二、绑定变量的列上有直方图信息&lt;/p&gt;
&lt;p&gt;查看直方图信息
select a.column_name 字段名字,
       b.num_rows   行数,
       a.num_distinct  基数,
        round(a.num_distinct / b.num_rows * 100, 2)  选择性,
       a.histogram  直方图的种类,
       a.num_buckets 桶
  from dba_tab_col_statistics a, dba_tables b
 where a.owner = b.owner
   and a.table_name = b.table_name
   and a.owner = &apos;SCOTT&apos;
   and a.table_name = &apos;TEST&apos;;&lt;/p&gt;
&lt;p&gt;收集/清除 直方图信息
1.收集
BEGIN
DBMS_STATS.GATHER_TABLE_STATS --统计表,列,索引的统计信息(对表进行直方图信息收集)
(ownname          =&amp;gt; &apos;oracle&apos;, --要分析表的拥有者
tabname          =&amp;gt; &apos;T231020_1&apos;, --要分析的表名.
estimate_percent =&amp;gt; 100, --采样行的百分比,取值范围[0.000001,100],null为全部分析,不采样.
method_opt       =&amp;gt; &apos;for all columns size skewonly&apos;, --决定histograms(直方图)信息是怎样被统计的.method_opt的取值如下(默认值为FOR ALL COLUMNS SIZE AUTO):
no_invalidate    =&amp;gt; FALSE, --如果将依赖游标设置为TRUE，则不使其无效。如果将依赖游标设置为FALSE，则该过程将立即使依赖游标无效
degree           =&amp;gt; 6, --决定并行度.默认值为null.
cascade          =&amp;gt; TRUE); --是收集索引的信息.默认为FALSE.
END;&lt;/p&gt;
&lt;p&gt;--自动收集
begin dbms_stats.set_table_prefs(ownname =&amp;gt; &apos;oracle&apos;,
tabname =&amp;gt; &apos;T231020_1&apos;,
pname   =&amp;gt; &apos;method_opt&apos;,
pvalue  =&amp;gt; &apos;for all columns size auto for columns size SKEWONLY OBJECT_NAME&apos;
);
--参考https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_STATS.html#GUID-CDAA4742-5398-4A64-B871-E39F38D0021F
END;&lt;/p&gt;
&lt;p&gt;2.清除
BEGIN
DBMS_STATS.DELETE_COLUMN_STATS(ownname       =&amp;gt; &apos;oracle&apos;,
tabname       =&amp;gt; &apos;T231020_1&apos;,
colname       =&amp;gt; &apos;OBJECT_NAME&apos;,
--p******      =&amp;gt; ,要删除统计信息的表分区的名称。如果表已分区且partname为NULL，则删除全局列统计信息。
--stattab       =&amp;gt; ,用户统计表标识符描述从哪里删除统计信息。如果stattab是NULL，则直接从字典中删除统计信息。
--statid        =&amp;gt; ,与这些统计数据相关联的标识符（可选）stattab（仅在stattab不相关时才相关NULL）。
--cascade_parts =&amp;gt; ,如果表已分区并且 ifpartname是NULL，则将其设置为 true 会导致删除所有基础分区的该列的统计信息。
--statown       =&amp;gt; ,架构包含stattab（如果不同于ownname）
--no_invalidate =&amp;gt; ,收集统计信息时控制相关游标的失效。该参数采用以下值：TRUE,FALSE,AUTO(default)
--force         =&amp;gt; ,当此参数的值为 时TRUE，即使锁定也会删除列统计信息
col_stat_type =&amp;gt; &apos;HISTOGRAM&apos; --要删除的列统计信息的类型：HISTOGRAM- 仅删除列直方图,ALL- 删除基列统计数据和直方图
);
END;&lt;/p&gt;
&lt;p&gt;--避免下次收集统计信息又恢复：
begin dbms_stats.set_table_prefs(ownname =&amp;gt; &apos;oracle&apos;,
tabname =&amp;gt; &apos;T231020_1&apos;,
pname   =&amp;gt; &apos;method_opt&apos;,
pvalue  =&amp;gt; &apos;for all columns size auto for columns size 1 OBJECT_NAME&apos;
);
END;&lt;/p&gt;
&lt;p&gt;三、自适应游标共享的外在体现
自适应游标共享主要通过三个字段来得以体现，即is_bind_sensitive,is_bind_aware,is_shareable。(注:此三个字段仅在Oracle 11g
中存在)。通过上面从v$sql(v$sqlarea中不存在is_shareable)的查询可知，三个字段分别被赋予了不同的值，代表了不同的含义。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  is_bind_sensitive(绑定是否敏感)
      表示该子游标中是否使用了绑定变量要素，且采用bind peeking方法进行执行计划生成。如果执行计划依赖于窥探到的值，此处为Y，
      否则为N。

  is_bind_aware(绑定是否可知)
      表示该子游标是否使用了extended cursor sharing技术，是则为Y，否则为N，如为N，则该游标将废弃，不再可用。

  is_shareable(是否可共享)
      表示该子游标可否被下次软解析是否可共享使用。可共享则为Y，否则为N，表示该子游标失去了共享价值，按LRU算法淘汰。

  由于该SQL语句为首次执行，因此从v$sql查询的结果中得知
      is_bind_sensitive 为Y值(首次运行，执行了bind peeking)
      is_bind_aware     为N值(首次运行，不被extended cursor sharing支持)
      is_shareable      为Y值(执行计划可共享)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/V-SQL.html
https://blog.csdn.net/leshami/article/details/6923670&lt;/p&gt;
&lt;p&gt;################################################################################################
1.建表
create table tab_acs(id int,value int);&lt;/p&gt;
&lt;p&gt;2.插数据
begin
for i in 1 .. 20000
loop
execute immediate &apos;insert into tab_acs values(1,&apos;||i||&apos;)&apos;;
end loop;
COMMIT;
end;
/&lt;/p&gt;
&lt;p&gt;begin
for i in 1 .. 10
loop
execute immediate &apos;insert into tab_acs values(2,&apos;||i||&apos;)&apos;;
end loop;
COMMIT;
end;
/&lt;/p&gt;
&lt;p&gt;3.检查数据
select id,count(&lt;em&gt;) from tab_acs group by id;
ID   COUNT(&lt;/em&gt;)&lt;/p&gt;
&lt;hr /&gt;
&lt;pre&gt;&lt;code&gt;     1      20000
     2         10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4.建索引,收集统计信息直方图
create index idx_tab_acs on tab_acs(id);
begin dbms_stats.gather_table_stats(user,&apos;TAB_ACS&apos;,cascade=&amp;gt;true); END;&lt;/p&gt;
&lt;h2&gt;5.查看直方图信息
select dbms_stats.get_param(&apos;method_opt&apos;) from dual;
DBMS_STATS.GET_PARAM(&apos;METHOD_OPT&apos;)&lt;/h2&gt;
&lt;p&gt;FOR ALL COLUMNS SIZE AUTO&lt;/p&gt;
&lt;p&gt;select table_name,column_name,histogram from dba_tab_col_statistics where table_name=&apos;TAB_ACS&apos;;
TABLE_NAME                     COLUMN_NAME                    HISTOGRAM&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;TAB_ACS                        VALUE                          NONE
TAB_ACS                        ID                             FREQUENCY&lt;/p&gt;
&lt;p&gt;结果表明测试表tab_acs列上有直方图统计信息。&lt;/p&gt;
&lt;p&gt;6.查看未使用绑定变量时的执行计划
sqlplus oracle/oracle@127.0.0.1:1521/orclpdb&lt;/p&gt;
&lt;p&gt;set autotrace trace exp;
select count(value) from tab_acs where id=1;&lt;/p&gt;
&lt;h2&gt;Execution Plan&lt;/h2&gt;
&lt;h2&gt;| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |&lt;/h2&gt;
&lt;h2&gt;|   0 | SELECT STATEMENT   |         |     1 |     8 |   105   (3)| 00:00:02 |
|   1 |  SORT AGGREGATE    |         |     1 |     8 |            |          |
|*  2 |   TABLE ACCESS FULL| TAB_ACS |   199K|  1561K|   105   (3)| 00:00:02 |&lt;/h2&gt;
&lt;p&gt;select count(value) from tab_acs where id=2;&lt;/p&gt;
&lt;h2&gt;Execution Plan&lt;/h2&gt;
&lt;h2&gt;| Id  | Operation                    | Name        | Rows  | Bytes | Cost (%CPU)| Time     |&lt;/h2&gt;
&lt;h2&gt;|   0 | SELECT STATEMENT             |             |     1 |     8 |     2   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE              |             |     1 |     8 |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| TAB_ACS     |   265 |  2120 |     2   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_TAB_ACS |   265 |       |     1   (0)| 00:00:01 |&lt;/h2&gt;
&lt;p&gt;可见谓词条件为1时走全表扫描，谓词条件为2时走index range scan。&lt;/p&gt;
&lt;p&gt;7.查看使用绑定变量时的执行计划
sqlplus oracle/oracle@127.0.0.1:1521/orclpdb&lt;/p&gt;
&lt;p&gt;alter session set optimizer_mode=all_rows;
alter system flush shared_pool;
variable x number;
exec :x:=1;
select count(value) from tab_acs where id=:x;&lt;/p&gt;
&lt;h2&gt;COUNT(VALUE)&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;  200000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SELECT sql_id,
child_number,
executions,
loads,
buffer_gets,
is_bind_sensitive AS &quot;bind_sensi&quot;,
is_bind_aware     AS &quot;bind_aware&quot;,
is_shareable      AS &quot;bind_share&quot;
FROM v$sql
WHERE sql_text LIKE &apos;select count(value) from tab_acs where id=:x&apos;;&lt;/p&gt;
&lt;p&gt;SQL_ID        CHILD_NUMBER EXECUTIONS      LOADS BUFFER_GETS b b b&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;5gy2wu883n8ac            0          1          1         251 Y N Y&lt;/p&gt;
&lt;h2&gt;设置绑定变量值为2后的第一次查询：
exec :x:=2;
select count(value) from tab_acs where id=:x;
COUNT(VALUE)&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;     100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SELECT sql_id,
child_number,
executions,
loads,
buffer_gets,
is_bind_sensitive AS &quot;bind_sensi&quot;,
is_bind_aware     AS &quot;bind_aware&quot;,
is_shareable      AS &quot;bind_share&quot;
FROM v$sql
WHERE sql_text LIKE &apos;select count(value) from tab_acs where id=:x&apos;;&lt;/p&gt;
&lt;p&gt;SQL_ID        CHILD_NUMBER EXECUTIONS      LOADS BUFFER_GETS b b b&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;5gy2wu883n8ac            0          2          1         288 Y N Y
结果表明，谓词条件为2时的第一次查询，沿用了谓词等于1时的执行计划。&lt;/p&gt;
&lt;p&gt;设置绑定变量值为2后的第二次查询：
exec :x:=2;
select count(value) from tab_acs where id=:x;
SELECT sql_id,
child_number,
executions,
loads,
buffer_gets,
is_bind_sensitive AS &quot;bind_sensi&quot;,
is_bind_aware     AS &quot;bind_aware&quot;,
is_shareable      AS &quot;bind_share&quot;
FROM v$sql
WHERE sql_text LIKE &apos;select count(value) from tab_acs where id=:x&apos;;&lt;/p&gt;
&lt;p&gt;SQL_ID        CHILD_NUMBER EXECUTIONS      LOADS BUFFER_GETS b b b&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;5gy2wu883n8ac            0          2          1         288 Y N N
5gy2wu883n8ac            1          1          1           4 Y Y Y
结果表明，谓词条件为2时的第二次查询，重新生成了新的执行计划。&lt;/p&gt;
&lt;p&gt;设置绑定变量值为2后的第三次查询：
exec :x:=2;
select count(value) from tab_acs where id=:x;
SELECT sql_id,
child_number,
executions,
loads,
buffer_gets,
is_bind_sensitive AS &quot;bind_sensi&quot;,
is_bind_aware     AS &quot;bind_aware&quot;,
is_shareable      AS &quot;bind_share&quot;
FROM v$sql
WHERE sql_text LIKE &apos;select count(value) from tab_acs where id=:x&apos;;&lt;/p&gt;
&lt;p&gt;SQL_ID        CHILD_NUMBER EXECUTIONS      LOADS BUFFER_GETS b b b&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;5gy2wu883n8ac            0          2          1         288 Y N Y
5gy2wu883n8ac            1          2          1           8 Y Y Y
结果表明，谓词条件为2时的第三次查询，沿用了新生成的执行计划。&lt;/p&gt;
&lt;p&gt;设置绑定变量值为2后的第四次查询：
exec :x:=2;
select count(value) from tab_acs where id=:x;
SELECT sql_id,
child_number,
executions,
loads,
buffer_gets,
is_bind_sensitive AS &quot;bind_sensi&quot;,
is_bind_aware     AS &quot;bind_aware&quot;,
is_shareable      AS &quot;bind_share&quot;
FROM v$sql
WHERE sql_text LIKE &apos;select count(value) from tab_acs where id=:x&apos;;&lt;/p&gt;
&lt;p&gt;SQL_ID        CHILD_NUMBER EXECUTIONS      LOADS BUFFER_GETS b b b&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;5gy2wu883n8ac            0          2          1         288 Y N Y
5gy2wu883n8ac            1          3          1          12 Y Y Y
结果表明，谓词条件为2时的第四次查询，继续沿用了新生成的执行计划。&lt;/p&gt;
&lt;p&gt;Oracle从11g开始，在v$sql视图中增加了is_bind_sensitive、is_bind_aware和is_shareable三列。其中：
1、is_bind_sensitive
表示游标是否对绑定变量敏感。数值如果为Y，表示当绑定变量的数值发生变化后，优化器有可能会产生一个不同的执行计划，简单说就是ACS生效了。
2、is_bind_aware
表示该游标是否使用了extended cursor sharing技术，数值如果为Y，表示oracle认为此处cursor的值可能会改变执行计划。
3、is_shareable
表示该游标能否重用，能否被下次共享。数值如果为Y表示能够共享，数值如果为N表示该子游标失去了共享价值，等待被Age Out出内存；&lt;/p&gt;
&lt;p&gt;查看绑定变量为1时的执行计划：
select * from table(dbms_xplan.display_cursor(&apos;5gy2wu883n8ac&apos;,format =&amp;gt; &apos;advanced&apos;));&lt;/p&gt;
&lt;h2&gt;PLAN_TABLE_OUTPUT&lt;/h2&gt;
&lt;h2&gt;SQL_ID  5gy2wu883n8ac, child number 0&lt;/h2&gt;
&lt;h2&gt;select count(value) from tab_acs where id=:x
Plan hash value: 3684903434&lt;/h2&gt;
&lt;h2&gt;| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |&lt;/h2&gt;
&lt;h2&gt;|   0 | SELECT STATEMENT   |         |       |       |   105 (100)|          |
|   1 |  SORT AGGREGATE    |         |     1 |     8 |            |          |
|*  2 |   TABLE ACCESS FULL| TAB_ACS |   199K|  1561K|   105   (3)| 00:00:02 |&lt;/h2&gt;
&lt;h2&gt;Query Block Name / Object Alias (identified by operation id):&lt;/h2&gt;
&lt;h2&gt;1 - SEL$1
2 - SEL$1 / TAB_ACS@SEL$1
Outline Data&lt;/h2&gt;
&lt;h2&gt;/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE(&apos;11.2.0.1&apos;)
DB_VERSION(&apos;11.2.0.1&apos;)
ALL_ROWS
OUTLINE_LEAF(@&quot;SEL$1&quot;)
FULL(@&quot;SEL$1&quot; &quot;TAB_ACS&quot;@&quot;SEL$1&quot;)
END_OUTLINE_DATA
*/
Peeked Binds (identified by position):&lt;/h2&gt;
&lt;h2&gt;1 - :X (NUMBER): 1
Predicate Information (identified by operation id):&lt;/h2&gt;
&lt;h2&gt;2 - filter(&quot;ID&quot;=:X)
Column Projection Information (identified by operation id):&lt;/h2&gt;
&lt;p&gt;1 - (#keys=0) COUNT(&quot;VALUE&quot;)[22]
2 - &quot;VALUE&quot;[NUMBER,22]
50 rows selected.&lt;/p&gt;
&lt;p&gt;查看绑定变量为2时，新生成的执行计划：
select * from table(dbms_xplan.display_cursor(&apos;5gy2wu883n8ac&apos;,1,format =&amp;gt; &apos;advanced&apos;));&lt;/p&gt;
&lt;h2&gt;PLAN_TABLE_OUTPUT&lt;/h2&gt;
&lt;h2&gt;SQL_ID  5gy2wu883n8ac, child number 1&lt;/h2&gt;
&lt;h2&gt;select count(value) from tab_acs where id=:x
Plan hash value: 3029888215&lt;/h2&gt;
&lt;h2&gt;| Id  | Operation                    | Name        | Rows  | Bytes | Cost (%CPU)| Time     |&lt;/h2&gt;
&lt;h2&gt;|   0 | SELECT STATEMENT             |             |       |       |     2 (100)|          |
|   1 |  SORT AGGREGATE              |             |     1 |     8 |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID| TAB_ACS     |   265 |  2120 |     2   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_TAB_ACS |   265 |       |     1   (0)| 00:00:01 |&lt;/h2&gt;
&lt;h2&gt;Query Block Name / Object Alias (identified by operation id):&lt;/h2&gt;
&lt;h2&gt;1 - SEL$1
2 - SEL$1 / TAB_ACS@SEL$1
Outline Data&lt;/h2&gt;
&lt;h2&gt;/*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE(&apos;11.2.0.1&apos;)
DB_VERSION(&apos;11.2.0.1&apos;)
ALL_ROWS
OUTLINE_LEAF(@&quot;SEL$1&quot;)
INDEX_RS_ASC(@&quot;SEL$1&quot; &quot;TAB_ACS&quot;@&quot;SEL$1&quot; (&quot;TAB_ACS&quot;.&quot;ID&quot;))
END_OUTLINE_DATA
*/
Peeked Binds (identified by position):&lt;/h2&gt;
&lt;h2&gt;1 - :X (NUMBER): 2
Predicate Information (identified by operation id):&lt;/h2&gt;
&lt;h2&gt;3 - access(&quot;ID&quot;=:X)
Column Projection Information (identified by operation id):&lt;/h2&gt;
&lt;p&gt;1 - (#keys=0) COUNT(&quot;VALUE&quot;)[22]
2 - &quot;VALUE&quot;[NUMBER,22]
3 - &quot;TAB_ACS&quot;.ROWID[ROWID,10]
53 rows selected.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  由执行计划可知，设置绑定变量为2后，第二次以后的执行计划是正确的执行计划。由此可知，ACS技术弥补了bind peeking的不足，保证了绑定变量数值发生变化后，sql语句能够选择正确的执行计划。
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>ssl证书问题</title><link>https://blog.newworld.help/posts/ssl%E8%AF%81%E4%B9%A6%E9%97%AE%E9%A2%98/</link><guid isPermaLink="true">https://blog.newworld.help/posts/ssl%E8%AF%81%E4%B9%A6%E9%97%AE%E9%A2%98/</guid><description>WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=No</description><pubDate>Fri, 28 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;pip软件安装报错
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by &apos;SSLError(SSLCertVerificationError(1, &apos;[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)&apos;))&apos;: /simple/pyopenssl/
Could not fetch URL https://pypi.org/simple/pyopenssl/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host=&apos;pypi.org&apos;, port=443): Max retries exceeded with url: /simple/pyopenssl/ (Caused by SSLError(SSLCertVerificationError(1, &apos;[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)&apos;))) - skipping
ERROR: Could not find a version that satisfies the requirement pyopenssl (from versions: none)
ERROR: No matching distribution found for pyopenssl&lt;/p&gt;
&lt;p&gt;解决方法：
参考https://www.cnblogs.com/shimmernight/p/13441760.html
https://www.cnblogs.com/aimed/p/10178048.html&lt;/p&gt;
&lt;p&gt;1.将pip源调整为国内的源
pip install ssl -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com&lt;/p&gt;
&lt;p&gt;2.永久修改pip源，可按照如下操作：
Windows：
1.找到系统盘下C:\Users\用户名\AppData\Roaming&lt;/p&gt;
&lt;p&gt;2.查看在Roaming文件夹下有没有一个pip文件夹，如果没有创建一个；&lt;/p&gt;
&lt;p&gt;3.进入pip文件夹，创建一个pip.ini文件；&lt;/p&gt;
&lt;p&gt;4.使用记事本的方式打开pip.ini文件，写入:&lt;/p&gt;
&lt;p&gt;[global]
index-url = http://mirrors.aliyun.com/pypi/simple # 指定下载源
trusted-host = mirrors.aliyun.com # 指定域名&lt;/p&gt;
&lt;p&gt;Linux:&lt;/p&gt;
&lt;h1&gt;找到~/.pip/pip.conf,如果不存在就创建,加入内容如下&lt;/h1&gt;
&lt;p&gt;[global]
timeout = 10 # 设置超时，单位s
index-url =  http://mirrors.aliyun.com/pypi/simple/   # 指定优先下载源
extra-index-url= http://pypi.douban.com/simple/   # 第二下载源
[install]
trusted-host=
mirrors.aliyun.com
pypi.douban.com&lt;/p&gt;
</content:encoded></item><item><title>redis性能测试</title><link>https://blog.newworld.help/posts/redis%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/</link><guid isPermaLink="true">https://blog.newworld.help/posts/redis%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/</guid><description>序号	  选项	                描述	                                           </description><pubDate>Thu, 27 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;参考
https://www.runoob.com/redis/redis-benchmarks.html
https://www.bilibili.com/video/BV1S54y1R7SB?p=10&amp;amp;spm_id_from=pageDriver&amp;amp;vd_source=b48a21f0ce58055f66209ce8081c63cd&lt;/p&gt;
&lt;p&gt;序号	  选项	                描述	                                            默认值
1	      -h	                指定服务器主机名	                                127.0.0.1
2	      -p	                指定服务器端口	                                    6379
3	      -s	                指定服务器 socket
4	      -c	                指定并发连接数	                                    50
5	      -n	                指定请求数	                                        10000
6	      -d	                以字节的形式指定 SET/GET 值的数据大小	            2
7	      -k	                1=keep alive 0=reconnect	                        1
8	      -r	                SET/GET/INCR 使用随机 key, SADD 使用随机值
9	      -P	                通过管道传输 &amp;lt;numreq&amp;gt; 请求	                        1
10	      -q	                强制退出 redis。仅显示 query/sec 值
11	      --csv	                以 CSV 格式输出
12	      -l（L 的小写字母）	生成循环，永久执行测试
13	      -t	                仅运行以逗号分隔的测试命令列表。
14	      -I（i 的大写字母）	Idle 模式。仅打开 N 个 idle 连接并等待。&lt;/p&gt;
&lt;p&gt;redis-benchmark -h localhost -p 6379 -c 100 -n 10000&lt;/p&gt;
&lt;p&gt;测试结果
10000 requests completed in 0.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1&lt;/p&gt;
&lt;p&gt;99.91% &amp;lt;= 1 milliseconds
100.00% &amp;lt;= 1 milliseconds
175438.59 requests per second&lt;/p&gt;
&lt;p&gt;############
0.06秒内完成10000个请求
100个并行客户端
3字节有效载荷
保持活力：1&lt;/p&gt;
&lt;p&gt;99.91%&amp;lt;=1毫秒
100.00%&amp;lt;=1毫秒
每秒175438.59个请求&lt;/p&gt;
</content:encoded></item><item><title>redo被删</title><link>https://blog.newworld.help/posts/redo%E8%A2%AB%E5%88%A0/</link><guid isPermaLink="true">https://blog.newworld.help/posts/redo%E8%A2%AB%E5%88%A0/</guid><description>scn推进方法:https://blog.csdn.net/u014596132/article/details/135824919</description><pubDate>Fri, 21 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;scn推进方法:https://blog.csdn.net/u014596132/article/details/135824919&lt;/p&gt;
&lt;p&gt;查看文件scn确定数据库一致性
select checkpoint_change# from v$database;               --控制文件检查点SCN号
select file#,checkpoint_change# from v$datafile_header; --数据文件检查点SCN号&lt;/p&gt;
&lt;p&gt;####################################redo被删####################################&lt;/p&gt;
&lt;p&gt;场景1：redo被删,数据库mount到open报错,shutdown immediate一致性关闭数据库
ORA-03113:end-of-file on communication channel
Process ID:52978
Session ID:lSerial number:5&lt;/p&gt;
&lt;p&gt;重建控制文件即可，仅支持一致性关闭数据库
--alter database backup controlfile to &apos;/home/oracle/control12.trc&apos;;  --备份一下以防万一
alter database backup controlfile to trace as &apos;/home/oracle/control12.sql&apos;;&lt;/p&gt;
&lt;p&gt;场景2：redo被删,数据库mount到open报错，shutdown abort非一致性关闭数据库
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1:&quot;/oradata/orcl/redo03.log
ORA-27037: lunable to obtain file status&lt;/p&gt;
&lt;p&gt;1.修改参数
alter system set &quot;_allow_resetlogs_corruption&quot;=TRUE scope=spfile;
show parameter _allow_resetlogs_corruption
--alter system set &quot;_allow_resetlogs_corruption&quot;=false scope=spfile;&lt;/p&gt;
&lt;p&gt;2.使用event参数推进scn（19c）
alter system set event=&quot;21307096 trace name context forever,level 3&quot; scope=spfile;
show parameter event
--alter system set event=&apos;&apos; scope=spfile;&lt;/p&gt;
&lt;p&gt;#21307096为特殊事件编号，专门用于推进SCN&lt;/p&gt;
&lt;p&gt;#重启生效（控制文件里需要删除被删的redo的内容）
shutdown immediate
startup mount&lt;/p&gt;
&lt;p&gt;######11g使用debug方式推scn,19c是event
判断大小端：https://mp.weixin.qq.com/s?__biz=MzI3MzE5Mjg1Mg==&amp;amp;mid=2247484299&amp;amp;idx=1&amp;amp;sn=ad52dcecd634aa68c7d5e4c8cd6d6bfd&amp;amp;chksm=ea81ec73423c501b2f8c291ba5e01cadc112843943b4b966fc99bafe9d1dc344472c1cca86ff#rd
命令参数介绍：https://mp.weixin.qq.com/s?__biz=MzYzNDE5MzE4Nw==&amp;amp;mid=2247483667&amp;amp;idx=1&amp;amp;sn=c3680c238f94325f2a1eba1d642fe2a3&amp;amp;chksm=f1dc4ef3d731cfdf68ae2c869c07efcc824cfa54409832b6a575d56106bb0adc28aa43347ac6#rd
推进scn方法：https://blog.csdn.net/u014596132/article/details/135824919
3.判断大小端
echo -n I | od -o | head -n1 | cut -f2 -d&quot; &quot; | cut -c6
echo -n I | od -o | head -n1 | awk &apos;{print $2}&apos;| cut -c6
输出：1为小端模式，0为大端模式
内存存储顺序​
HP-UX (大端模式/Big Endian)：       SCN_WRAP（高位）在前，SCN_BASE（低位）在后
Linux x86 (小端模式/Little Endian)：SCN_BASE（低位）在前，SCN_WRAP（高位）在后&lt;/p&gt;
&lt;p&gt;ora-600 [2662]参数说明：
ORA-00600: internal error code, arguments: [2662], [a], [b], [c], [d], [e], [], []
a–CRUUENT SCN WRAP
b–CURRENT SCN BASE
c–DEPENDENT SCN WRAP
d–DEPENDENT SCN BASE
e–where present this is the dba where the dependent scn came from.&lt;/p&gt;
&lt;p&gt;Linux端（推8位）：
ORA-00600: internal error code, arguments: [2662], [0], [13413310], [0], [13413467], [29360288], [], [], [], [], [], []
操作如下:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug setmypid
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Statement processed.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug dumpvar sga kcsgscn_
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;kcslf kcsgscn_ [06001AE70, 06001AEA0) = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 6001AB50 00000000&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; select 2*power(2,32)+13413467 from dual;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2*POWER(2,32)+13413467&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;    8603348059
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug poke 0x06001AE70 8 8603348059
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BEFORE: [06001AE70, 06001AE78) = 00000000 00000000
AFTER:	[06001AE70, 06001AE78) = 00CCAC5B 00000002&lt;/p&gt;
&lt;p&gt;#oradebug poke 内存地址、修改长度和要写入的值
内存地址：oradebug dumpvar sga kcsgscn_查出
修改长度：LINUX是 8 字节
要写入的值：ORA-00600报错的 2*power(2,32)+SCN BASE&lt;/p&gt;
&lt;p&gt;#再检查一遍（无所谓了）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug dumpvar sga kcsgscn_
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;kcslf kcsgscn_ [06001AE70, 06001AEA0) = 00CCAC5B 00000002 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 6001AB50 00000000&lt;/p&gt;
&lt;p&gt;UNIX端（推4位）：
ORA-00600: internal error code, arguments: [2662], [4045], [1528369959],[4045], [1528646410], [4194545], [], [], [], [], [], []
操作如下:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug setmypid
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Statement processed.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug DUMPvar SGA kcsgscn_
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;kcslf kcsgscn_ [C00000006FDF9670, C00000006FDF96A0) = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 C0000000 ...&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; SELECT TO_CHAR(4045+1, &apos;0XXXXXXX&apos;) FROM DUAL; --一般就8位，X占位，0填充
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;TO_CHAR(4&lt;/h2&gt;
&lt;p&gt;00000FCE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug poke 0xC00000006FDF9670 4 0x00000fce
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BEFORE: [C00000006FDF9670, C00000006FDF9674) = 00000000
AFTER:  [C00000006FDF9670, C00000006FDF9674) = 00000FCE&lt;/p&gt;
&lt;p&gt;如果不知道当前scn直接写 0x00000001&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug poke 0xC00000006FDF9670 4 0x00000001
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BEFORE: [C00000006FDF9670, C00000006FDF9674) = 00000000
AFTER:  [C00000006FDF9670, C00000006FDF9674) = 00000001&lt;/p&gt;
&lt;p&gt;4.尝试open，或执行recover,选择cancel
alter database open;&lt;/p&gt;
&lt;p&gt;recover database until cancel;
cancel&lt;/p&gt;
&lt;p&gt;5.打开数据库
alter database open;
alter database open resetlogs;&lt;/p&gt;
&lt;p&gt;6.拉起来
sqlplus / as sysdba
startup&lt;/p&gt;
&lt;p&gt;7.恢复后可能有坏块,尽快数据泵导出新库&lt;/p&gt;
&lt;p&gt;####################################recover还原报错####################################&lt;/p&gt;
&lt;p&gt;1.SQL&amp;gt; alter database open;
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: &apos;/u01/app/oracle/oradata/ogg/system01.dbf&apos;
或者&lt;/p&gt;
&lt;p&gt;ERROR at line 1:
ORA-01172: recovery of thread 1 stuck at block 72804 of file 59
ORA-01151: use media recovery to recover block, restore backup if needed&lt;/p&gt;
&lt;p&gt;需要恢复数据库使控制文件和数据文件scn追平
recover database;                                   --直到数据库恢复到最新状态
recover database until cancel;                      --直到你手动输入 CANCEL
recover database until time &apos;2025-01-01 10:00:00&apos;;  --直到它恢复到这个时间点,或者CANCEL&lt;/p&gt;
&lt;p&gt;2.SQL&amp;gt; RECOVER DATABASE;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done&lt;/p&gt;
&lt;p&gt;控制文件的scn小于数据文件，需要使用备份集控制文件恢复(用于控制文件被重建过)
set lines 200 pages 200
set num 50
select checkpoint_change# from v$database;
select file#,checkpoint_change# from v$datafile_header;&lt;/p&gt;
&lt;p&gt;recover database using backup controlfile;
recover database using backup controlfile until cancel;
recover database using backup controlfile until time &apos;2025-01-01 10:00:00&apos;;&lt;/p&gt;
&lt;p&gt;Specify log: {&amp;lt;RET&amp;gt;=suggested | filename | AUTO | CANCEL}
suggested  按回车键（即选择默认选项）将使用 Oracle 推荐的下一个日志文件。
filename   手动输入一个具体的日志文件名（如 log_file.arc）
AUTO       自动选择下一个需要应用的日志文件并继续恢复过程,与suggested相似
CANCEL     将终止当前的恢复操作&lt;/p&gt;
&lt;p&gt;3.SQL&amp;gt;recover database using backup controlfile;
ORA-00289:suggestion :/home/oracle/orcl_arch/118_1027712840.dbf
ORA-00280:change 1272135 for thread lis in sequence #18&lt;/p&gt;
&lt;p&gt;找不到#18号归档日志，日志可能还在redo log中没有被归档，recover时，输入filename路径
recover database using backup controlfile;
/oradata/orcl/redo01.log&lt;/p&gt;
&lt;p&gt;ORA-00310:archived log contains sequence 16;sequence 18 required
ORA-00334:archived log:&apos;/oradata/orcl/redo01.log&apos;
#报错，则说明redo01.log是16号归档文件，需要使用18-16=2，redo01.log切2次后的redo日志文件&lt;/p&gt;
&lt;p&gt;####################################句柄恢复####################################
1.寻找句柄
#数据文件句柄
ps -ef |grep dbw0 |grep -v grep&lt;/p&gt;
&lt;p&gt;#日志文件句柄
ps -ef |grep lgwr |grep -v grep&lt;/p&gt;
&lt;p&gt;2.进到pid的fd目录
cd /proc/$PID/fd&lt;/p&gt;
&lt;p&gt;3.通过符号链接恢复文件(deleted文件)
cp 4 /xxx/xxx/xxx&lt;/p&gt;
&lt;p&gt;####################################其他redo异常场景####################################
###black块只是涉及活动事物才需要改 只是块清除的话 推scn即可&lt;/p&gt;
&lt;p&gt;场景一：alert报错
Incomplete read from log member &apos;/ora_data/batch/redo05.log&apos;. Trying next member.
Aborting crash recovery due to error 333
Errors in file /oracle/diag/rdbms/batch/batch/trace/batch_ora_18337.trc:
ORA-00333: redo log read error block 425008 count 8063&lt;/p&gt;
&lt;p&gt;1.mount状态recover
recover database until cancel;
cancel
alter database open resetlogs; --失败后准备强开&lt;/p&gt;
&lt;p&gt;2.open打开
alter system set &quot;_allow_resetlogs_corruption&quot;=TRUE scope=spfile;
shutdown immediate
startup&lt;/p&gt;
&lt;p&gt;3.发现报错
ORA-00600: internal error code, arguments: [2662]&lt;/p&gt;
&lt;p&gt;4.重推完scn直接open，不需要resetlogs
alter database open;&lt;/p&gt;
&lt;p&gt;场景二：open报错
ORA-00742: Log read detects lost write in thread 1 sequence 1009881 block 195724
ORA-00312: online log 3 thread 1: &apos;/ora_data/idcssrv0101/redo03.log&apos;&lt;/p&gt;
&lt;p&gt;1.mount状态recover
recover database until cancel;
cancel
alter database open resetlogs; --失败后准备强开&lt;/p&gt;
&lt;p&gt;2.open打开
alter system set &quot;_allow_resetlogs_corruption&quot;=TRUE scope=spfile;
shutdown immediate
startup&lt;/p&gt;
&lt;p&gt;3.发现报错
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01555: snapshot too old: rollback segment number 9 with name &quot;_SYSSMU9_3739287458$&quot; too small
Process ID: 32560
Session ID: 387 Serial number: 31586&lt;/p&gt;
&lt;p&gt;4.重推完scn直接open，发现12.1.0.2不支持oradebug
http://www.minniebaby.tech/2021/10/28/%e6%a1%88%e4%be%8b%ef%bc%9aoracle-12-1%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93%e5%a6%82%e4%bd%95%e6%8e%a8%e8%bf%9bscn/&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug setmypid
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Statement processed.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug dumpvar sga kcsgscn_
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;kcslf kcsgscn_ [06001FBB0, 06001FBE0) = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 6001F6B0 00000000&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug poke 0x06001FBB0 8 0x00000001
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ORA-32521: error parsing ORADEBUG command:&lt;/p&gt;
&lt;p&gt;5.找额外一台机器B
sqlplus / as sysdba
oradebug setmypid&lt;/p&gt;
&lt;p&gt;ps -ef|grep -i local=yes&lt;/p&gt;
&lt;p&gt;6.使用gdb
gdb $ORACLE_HOME/bin/oracle 10210
(gdb) set *((int *) 0x06001FBB0) = 0xffffffff  --推 base
(gdb) set *((int *) 0x06001FBB4) = 0x000a      --推 wrap（base+4）
(gdb) q&lt;/p&gt;
&lt;p&gt;Quit anyway? (y or n) y&lt;/p&gt;
&lt;p&gt;7.机器B验证重推结果&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; oradebug DUMPvar SGA kcsgscn_
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;kcslf kcsgscn_ [06001FBB0, 06001FBE0) = FFFFFFFF 0000000A 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 6001F6B0 00000000&lt;/p&gt;
&lt;p&gt;8.起库
alter database open;&lt;/p&gt;
&lt;p&gt;剩下undo段报错：修undo的方法解决
ORA-00600: internal error code, arguments: [4194], [5], [8], [], [], [], [],[], [], [], [], []&lt;/p&gt;
</content:encoded></item><item><title>g参数优化</title><link>https://blog.newworld.help/posts/g%E5%8F%82%E6%95%B0%E4%BC%98%E5%8C%96/</link><guid isPermaLink="true">https://blog.newworld.help/posts/g%E5%8F%82%E6%95%B0%E4%BC%98%E5%8C%96/</guid><description>AMM (Automatic Memory Management)自动内存管理；(11G才有的特性）</description><pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;所有参数查看方法:
https://blog.csdn.net/tianlesoftware/article/details/5583655&lt;/p&gt;
&lt;p&gt;amm使用
https://www.modb.pro/db/612130
https://www.modb.pro/db/397229&lt;/p&gt;
&lt;p&gt;AMM (Automatic Memory Management)自动内存管理；(11G才有的特性）
ASMM(Automatic shared Memory Management）自动共享内存管理；（10G有的特性）
AMM不支持HugePage，而ASMM支持HugePage；
AMM让数据库完全管理SGA、PGA的大小；
ASMM只能管理SGA的大小。&lt;/p&gt;
&lt;p&gt;启用AMM：
将 MEMORY_TARGET 设为非0值，则启用。会自动调整SGA、PGA。
注：如果手动也设置了SGA、PGA，则表示自动调整时不小于手动设定的值。&lt;/p&gt;
&lt;p&gt;启用ASMM:
将MEMORY_TARGET设为0，SGA_TARGET设为非0，STATISTICS_LEVEL参数设置为TYPICAL（默认值）或者ALL才能启用ASMM功能。&lt;/p&gt;
&lt;p&gt;A、内存都是以页的形式划分的，默认情况下每页是4K，如果物理内存很大，则映射表的条目将会非常多，会影响CPU查询映射表效率;
B、系统中使用了大页（huge page），则内存页的数量会减少，映射表的条目少，会提升CPU的查询映射表的效率
###当SGA大于32G时，可以启用大页，以便减少Oracle SGA的页交换次数;&lt;/p&gt;
&lt;p&gt;有关大页  use_large_pages参数
TRUE表示如果系统配置好了HugePage，则会使用，如果没有，SGA也可以使用通常页大小的内存，也就是说SGA可以运行在混合模式下。
FALSE表示，实例不会使用HugePage。
ONLY表示只使用Huge。
https://blog.csdn.net/qq_24353335/article/details/76255058
http://blog.itpub.net/17203031/viewspace-775004/&lt;/p&gt;
&lt;p&gt;ALTER SYSTEM SET SHARED_POOL_SIZE = 0;
ALTER SYSTEM SET LARGE_POOL_SIZE = 0;
ALTER SYSTEM SET JAVA_POOL_SIZE = 0;
ALTER SYSTEM SET STREAMS_POOL_SIZE = 0;
ALTER SYSTEM SET DB_CACHE_SIZE = 0;&lt;/p&gt;
&lt;p&gt;--SGA调整
alter system set memory_target=0 scope=spfile;
alter system set sga_max_size=12G scope=spfile;
alter system set sga_target=12G scope=spfile;
alter system set pga_aggregate_target=8G scope=spfile;
alter system set processes=1000 scope=spfile;&lt;/p&gt;
&lt;p&gt;--512G
--oracle_instance
alter system set memory_target=0 scope=spfile ;
alter system set pga_aggregate_target=45G scope=spfile;
alter system set sga_max_size=252G scope=spfile;
alter system set sga_target=252G scope=spfile;
alter system set processes=3000 scope=spfile;
--查看物理内存
--禁用自适应游标共享，关闭11g新特性adaptive cursor sharing，避免Oracle根据绑定变量的值改变执行计划，从而造成性能的波动
alter system set &quot;_optimizer_extended_cursor_sharing&quot;=&apos;NONE&apos;;
--关闭直接路径读
alter system set &quot;_serial_direct_read&quot;=never;
--关闭自适应log file sync
alter system set &quot;_use_adaptive_log_file_sync&quot;=false;
--禁用自适应游标共享，避免出现cursor sharing导致的子游标过多的问题
alter system set &quot;_optimizer_adaptive_cursor_sharing&quot;=FALSE;
alter system set &quot;_optimizer_extended_cursor_sharing_rel&quot;=&apos;NONE&apos;;
--关闭优化器反馈（Feedback），避免根据返回结果确定cardinality，该功能在11g中不稳定易导致性能问题。
alter system set &quot;_optimizer_use_feedback&quot;=FALSE;
--关闭错误输入密码时的密码延迟验证特性，避免用户持续输入错误密码时产生大量的library cache lock等待，严重时使数据库完全不能登录
alter system set event=&apos;28401 trace name context forever,level 1&apos;,&apos;10949 trace name context forever,level 1&apos; scope=spfile;
--关闭RAC的DRM（dynamic remastering）特性，避免频繁的DRM使系统性能不稳定、严重的时候使数据库挂起。同时也关闭Read-mostly Locking新特性，这个特性目前会触发大量的BUG，严重时使数据库实例宕掉
alter system set &quot;_gc_policy_time&quot;=0 scope=spfile;
alter system set &quot;_gc_undo_affinity&quot;=FALSE scope=spfile;
--建议关闭回滚段（Undo）的自动优化功能，避免出现UNDO表空间利用率过高或者UNDO段争用的问题。
alter system set &quot;_undo_autotune&quot;=FALSE;
--关闭优化器对反连接（Anti-Join）中的空值(Null)探测，避免相关的BUG。
alter system set &quot;_optimizer_null_aware_antijoin&quot;=FALSE;
--11g中引入的行级逻辑读优化功能会破坏READ COMMIT隔离制度的读一致性问题，建议金融相关客户关闭此功能
alter system set &quot;_row_cr&quot;=FALSE;
--在11G版本中，建议关闭延迟段创建的特性。
alter system set deferred_segment_creation=false sid=&apos;*&apos; scope=spfile;
--在11G版本中，建议关闭优化器对反连接（Anti-Join）中的空值(Null)探测，避免相关的BUG。
alter system set &quot;_optimizer_null_aware_antijoin&quot;=FALSE;
--在11G版本中，建议关闭回滚段（Undo）的自动优化。
alter system set &quot;_undo_autotune&quot;=FALSE;
--在11G版本中，为了降低集群间的数据交互，建议并行进程强制在本地实例分配。
alter system set parallel_force_local=TRUE;
--在11G版本中，建议启用大池（Large Pool）分配并行进程内存，减少对共享池（Shared Pool）的争用。
alter system set &quot;_PX_use_large_pool&quot;=TRUE scope=spfile;
--在11G版本中，若无特殊的安全需求，建议关闭密码大小写敏感策略。
alter system set sec_case_sensitive_logon=FALSE;
--在11G版本中，建议关闭分区使用大的初始化区（Extent）。
alter system set &quot;_partition_large_extents&quot;=FALSE;
--在11G版本中，建议关闭审计选项。
alter system set audit_trail=&apos;none&apos; scope=spfile;
--修改11g Default Profile中的默认选项
alter profile &quot;DEFAULT&quot; limit PASSWORD_GRACE_TIME UNLIMITED;
alter profile &quot;DEFAULT&quot; limit PASSWORD_LIFE_TIME UNLIMITED;
alter profile &quot;DEFAULT&quot; limit PASSWORD_LOCK_TIME UNLIMITED;
alter profile &quot;DEFAULT&quot; limit FAILED_LOGIN_ATTEMPTS UNLIMITED;
--禁用sql tuning advisor&lt;/p&gt;
&lt;p&gt;BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name =&amp;gt; &apos;sql tuning advisor&apos;,
operation   =&amp;gt; NULL,
window_name =&amp;gt; NULL);
END;
/
commit;&lt;/p&gt;
&lt;p&gt;--禁用auto space advisor&lt;/p&gt;
&lt;p&gt;BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name =&amp;gt; &apos;auto space advisor&apos;,
operation   =&amp;gt; NULL,
window_name =&amp;gt; NULL);
END;
/
commit;&lt;/p&gt;
&lt;p&gt;select client_name,status from dba_autotask_client;&lt;/p&gt;
</content:encoded></item><item><title>Oracle查找UNDO段信息脚本</title><link>https://blog.newworld.help/posts/oracle%E6%9F%A5%E6%89%BEundo%E6%AE%B5%E4%BF%A1%E6%81%AF%E8%84%9A%E6%9C%AC/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle%E6%9F%A5%E6%89%BEundo%E6%AE%B5%E4%BF%A1%E6%81%AF%E8%84%9A%E6%9C%AC/</guid><description>use Sys::Hostname;</description><pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mount 状态
perl xx.p
#!/usr/bin/perl&lt;/p&gt;
&lt;p&gt;use strict;
use warnings;
use English;
use Sys::Hostname;
use Term::ANSIColor qw(:constants);
use Getopt::Long qw(:config no_ignore_case bundling);
use POSIX qw/strftime/;
use Data::Dumper;
use Env qw(PATH LD_LIBRARY_PATH DISPLAY);
use Fcntl qw(:mode);
use Encode qw(from_to);&lt;/p&gt;
&lt;p&gt;our $versionNum = 1.1;
our $trcfd;
our $traceFile;
our $dbstatus = &apos;NO&apos;;
our $dbversion;&lt;/p&gt;
&lt;p&gt;our %undosegblock = (
&quot;102010&quot;  =&amp;gt; 105,
&quot;102020&quot;  =&amp;gt; 105,
&quot;102030&quot;  =&amp;gt; 105,
&quot;102040&quot;  =&amp;gt; 105,
&quot;102050&quot;  =&amp;gt; 105,
&quot;112010&quot;  =&amp;gt; 224,
&quot;112020&quot;  =&amp;gt; 224,
&quot;112030&quot;  =&amp;gt; 224,
&quot;112040&quot;  =&amp;gt; 224,
&quot;190000&quot;  =&amp;gt; 224
);
our %dbfname;
our %filemap;
our @undosegname;&lt;/p&gt;
&lt;h2&gt;&amp;lt;&amp;lt;---------------------[ Begin Function ]---------------------------&amp;gt;&amp;gt;&lt;/h2&gt;
&lt;p&gt;sub MsgPrint
{
my ($type, $msg, $step) = @&lt;em&gt;;
my $printMsg = $msg;
if ($type eq &quot;E&quot; || $type eq &quot;EE&quot;)
{
print BOLD, RED, &quot;ERROR: &quot;, RESET;
if ($trcfd)
{
print $trcfd &quot;ERROR: &quot;;
}
}
elsif ($type eq &quot;I&quot;)
{
print BOLD, BLUE, &quot;INFO: &quot;, RESET;
if ($trcfd)
{
print $trcfd &quot;INFO: &quot;;
}
}
elsif ($type eq &quot;W&quot;)
{
print BOLD, MAGENTA, &quot;WARNING: &quot;, RESET;
if ($trcfd)
{
print $trcfd &quot;WARNING: &quot;;
}
}
elsif ($type eq &quot;S&quot;)
{
print BOLD, GREEN, &quot;SUCCESS: &quot;, RESET;
if ($trcfd)
{
print $trcfd &quot;SUCCESS: &quot;;
}
}
if (defined $step)
{
$printMsg = &quot;$msg #Step $step#&quot;;
}
print &quot;$printMsg\n&quot;;
# Trace(&quot;$printMsg&quot;);
if ($trcfd)
{
print $trcfd &quot;$printMsg\n&quot;;
}
}
sub Trace
{
my ($output) = @&lt;/em&gt;;
my ($sec, $min, $hour, $day, $month, $year) =
(localtime)[ 0, 1, 2, 3, 4, 5 ];
$month = $month + 1;
$year  = $year + 1900;
$output =~ s/%/%%/g;
printf $trcfd &quot;%04d-%02d-%02d %02d:%02d:%02d: $output\n&quot;, $year, $month, $day, $hour, $min, $sec;
}
sub DieTrap
{
my ($msg) = @_;
# if ($trcfd)
# {
#     print $trcfd &quot;$msg\n&quot;;
# }
MsgPrint(&quot;E&quot;,&quot;$msg&quot;);
die(&quot;$msg\n&quot;);
}
sub InitLogfile
{
my ($dt, $hname, $logPrefix);
# $runstartTime = time();
$dt = strftime(&quot;%Y%m%d%H%M%S&quot;, localtime);
$hname = GetHostName();
$logPrefix = $hname;
$traceFile = &quot;/tmp/analyzeundo-$logPrefix.trc&quot;;
MsgPrint(&apos;I&apos;, &quot;InitLogfile Logfile : $traceFile&quot;);
open($trcfd, &quot;&amp;gt; $traceFile&quot;);
}&lt;/p&gt;
&lt;p&gt;sub DoCleanExit
{
MsgPrint(&quot;I&quot;, &quot;Log file is $traceFile ...&quot;);
print &quot;Exiting...\n&quot;;
exit 0;
}
sub PrintVersionNum {
print &quot;\n\tanlyzeundo Version is $versionNum by Travel.liu. \n&quot;;
print &quot;Copyright (c) 2015-2016, Enmotech and/or its affiliates. All rights reserved.\n\n&quot;;
exit 0;
}&lt;/p&gt;
&lt;p&gt;sub ParseArgs
{
our ($opt_v);
GetOptions(
&apos;version|v!&apos;    =&amp;gt; $opt_v
);
if (defined $opt_v)
{
PrintVersionNum();
}
}&lt;/p&gt;
&lt;p&gt;sub to_upper
{
my $var = $_[0];
$var =~ tr/a-z/A-Z/;
return $var;
}
sub TrimSpace
{
my $str = shift;
$str =~ s/^[\s]+//;
$str =~ s/\s+$//;
$str =~ s/^\s*\n//;
return $str;
}
sub GetHostName
{
my $host = hostname() or return &quot;&quot;;
my $shorthost;
if ($host =~ /^[0-9]+.[0-9]+.[0-9]+.[0-9]+$/)
{
$shorthost = $host;
}
else
{
($shorthost,) = split(/./, $host);
}
$shorthost =~ tr/A-Z/a-z/;
return $shorthost;
}&lt;/p&gt;
&lt;p&gt;sub run_system_cmd
{
my $rc  = 0;
my $prc = 0;
my @output;
# print &quot;@&lt;em&gt;\n&quot;;
Trace(&quot;Executing cmd: @&lt;/em&gt;&quot;);
if (!open(CMD, &quot;@_ 2&amp;gt;&amp;amp;1 |&quot;)) { $rc = -1; }
else
{
@output = (&amp;lt;CMD&amp;gt;);
close CMD;
$prc = $CHILD_ERROR &amp;gt;&amp;gt; 8;    # get program return code right away
chomp(@output);
}
if (scalar(@output) &amp;gt; 0)
{
Trace(join(&quot;\n&amp;gt;  &quot;, (&quot;Command output:&quot;, @output)), &quot;\n&amp;gt;End Command output&quot;);
}
if ($prc != 0)
{
$rc = $prc;
}
# elsif ($rc &amp;lt; 0 || ($rc = $CHILD_ERROR) &amp;lt; 0)
# {
#     MsgPrint(&quot;E&quot;, &quot;Failure in execution (rc=$rc, $CHILD_ERROR, $!) for command @&lt;em&gt;&quot;);
# }
elsif ($rc &amp;amp; 127)
{
my $sig = $rc &amp;amp; 127;
# MsgPrint(&quot;E&quot;, &quot;Failure with signal $sig from command: @&lt;/em&gt;&quot;);
}
elsif ($rc)
{
Trace(&quot;Failure with return code $rc from command @_&quot;);
}
return ($rc, @output);
}&lt;/p&gt;
&lt;p&gt;sub executeSQL{
my $sqlExec     = $&lt;em&gt;[0];
my $sqltype     = $&lt;/em&gt;[1];
my $checkErrors = 1;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if (defined $_[2])
{
    $checkErrors = 0;
}
return executeSQLSQLPLUS( $sqlExec, $sqltype, $checkErrors);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;sub executeSQLSQLPLUS
{
# Build SQL Scripts
my ($sqlExec,$sqltype,$checkErrors) = @_;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;my $scriptsFile = &apos;.sql_script.tmp&apos;;

my $connectRole = &quot;/ as sysdba&quot;;

$sqlExec = $sqlExec . &quot;;&quot;;

open SQLSCRIPTTEMP, &quot;&amp;gt;&quot;, $scriptsFile;
printf SQLSCRIPTTEMP &quot;%s\n&quot;, &quot;SET LINES 11111 PAGES 0 TRIM ON TRIMS ON TI OFF TIMI OFF AUTOT OFF FEED OFF SERVEROUTPUT ON SIZE UNLIMITED&quot;;
if (defined $sqltype)
{
    printf SQLSCRIPTTEMP &quot;%s\n&quot;,&quot;SET FEED ON&quot;;
}
printf SQLSCRIPTTEMP &quot;%s\n%s\n&quot;,$sqlExec, &quot;EXIT&quot;;
close SQLSCRIPTTEMP;

Trace(&quot;SQL-connectRole cmd: $connectRole&quot;);
Trace(&quot;SQL-sqlExec cmd: $sqlExec&quot;);

my ($rc,@output ) = run_system_cmd(&quot;sqlplus -s -L &apos;$connectRole&apos; \@$scriptsFile;&quot;);

Trace(&quot;SQL-sqlResult cmd: &apos;&apos;&apos; @output &apos;&apos;&apos; &quot;);

# Check Result File
# @output =~ s/%/%%/g;

if ($checkErrors == 1){
    foreach (@output){
        chomp;
        my $errorLine = $_;
        if ($errorLine =~ m/\AORA\-[0-9]{5}/){
            MsgPrint(&apos;E&apos;, &quot;\033[31mSQL Error : [$errorLine]\033[0m&quot;);
        }
        elsif($errorLine =~ m/command\snot\sfound/){
            MsgPrint(&apos;E&apos;, &quot;\033[31mCMD Error : SQL*Plus Not Found \033[0m&quot;);
        }
    }
}
# unlink $scriptsFile;
# Result SQL Result
return @output;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;h2&gt;&amp;lt;&amp;lt;----------------------[ End Function ]----------------------------&amp;gt;&amp;gt;&lt;/h2&gt;
&lt;p&gt;sub CheckVersion
{
my @sqlResult = executeSQL(&quot;SELECT BANNER from v$version where rownum = 1&quot;);
# print &quot;$sqlResult[0]\n&quot;;
my @temp = split(/\s+/ ,$sqlResult[0]);
$dbversion =  $temp[6];
$dbversion =~ s/.//g;
MsgPrint(&apos;I&apos;, &quot;Database Version is : $dbversion &quot;);
MsgPrint(&apos;I&apos;, &quot;Undo$ Segment Block on datafile 1 block $undosegblock{$dbversion}&quot;);
}&lt;/p&gt;
&lt;p&gt;sub CheckDBStatus
{
my @inst_status = executeSQL(&quot;SELECT STATUS FROM V$INSTANCE&quot;);
if ($inst_status[0] eq &quot;MOUNTED&quot;) {
$dbstatus = &quot;OK&quot;;
}
elsif ($inst_status[0] eq &quot;OPEN&quot;)
{
$dbstatus = &quot;OK&quot;;
}
}
sub CheckTS
{
my $sql = &quot;select rfile#,name from v$datafile where ts#=0&quot;;
my @sqlResult = executeSQL($sql);
foreach (@sqlResult)
{
my @temp = split(/\s+/);
$dbfname{$temp[1]} = $temp[2];
MsgPrint(&quot;I&quot;,&quot;Datafile rfile : $temp[1] name : $temp[2]&quot; );
}
}&lt;/p&gt;
&lt;p&gt;sub DumpUndoSegment
{
my $sql = &quot;alter system dump datafile&apos;&quot;.$dbfname{&apos;1&apos;}.&quot;&apos; block &quot;.$undosegblock{$dbversion};
my $sql1 = &quot;SELECT d.VALUE || &apos;/&apos; || LOWER(RTRIM(i.INSTANCE, CHR(0))) || &apos;&lt;em&gt;ora&lt;/em&gt;&apos; ||
p.spid || &apos;.trc&apos; trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1
AND s.SID = m.SID
AND p.addr = s.paddr) p,
(SELECT t.INSTANCE
FROM v$thread t, v$parameter v
WHERE v.NAME = &apos;thread&apos;
AND (v.VALUE = &apos;0&apos; OR to_char(t.thread#) = v.VALUE)) i,
(select value from v$diag_info WHERE name=&apos;Diag Trace&apos;) d&quot;;
$sql = $sql . &quot;;\n&quot;.$sql1;
my @sqlResult = executeSQL($sql);
my $findMap = 0;
my $tracefile = $sqlResult[0];&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;MsgPrint(&quot;I&quot;,&quot;Undo Segment Block Dump Trace $tracefile&quot;);
Trace(&quot;Undo Segment Block Dump Trace : $tracefile&quot;);

if (open(GRIDINSTLOG, &quot;&amp;lt; $tracefile&quot;))
{
    while (&amp;lt;GRIDINSTLOG&amp;gt;)
    {
        chomp();
        next unless /\S/;
        if ($_ =~ /Extent Map/)
        {
            $findMap = 1;
        }
        if ($_ =~ /nfl = 1/)
        {
            $findMap = 0;
        }
        if ($findMap == 1) {
            if ($_ =~ /----/ || $_ =~ /Extent Map/) {
                next
            } else {
               my @temp = split(/\s+/,TrimSpace($_));
               $filemap{$temp[0]} = $temp[2];
               Trace(&quot;Undo Block Map RDBA $temp[0] Blocks $temp[2]&quot;);
               MsgPrint(&quot;I&quot;,&quot;Undo Block Map RDBA $temp[0] Blocks $temp[2]&quot;);
            }
        }
    }
    close(GRIDINSTLOG);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;sub ParseMap
{
my $key = shift;
my $b=substr($key,2);
my $fileNum  =  hex($b) &amp;gt;&amp;gt; 22;
my $blockNum =  hex($b) &amp;amp; 4194303;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Trace(&quot;Undo Block Map RDBA $key($fileNum/$blockNum)&quot;);
MsgPrint(&quot;I&quot;,&quot;Undo Block Map RDBA $key($fileNum/$blockNum)&quot;);

return $fileNum , $blockNum;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;sub DumpMap
{
my @dumpsql;
foreach my $key (sort keys %filemap)
{
my ($fileNum , $blockNum) = ParseMap($key);
for my $i ( 0 .. $filemap{$key} )
{
MsgPrint(&quot;I&quot;,&quot;Will Dump Datafile : $dbfname{$fileNum} Block : &quot;.(int($blockNum) + $i));
push (@dumpsql,&quot;alter system dump datafile &apos;&quot;.$dbfname{$fileNum}.&quot;&apos; block &quot;. (int($blockNum) + $i) . &quot;;&quot;)
}
}
my $sql = &apos;&apos;;
foreach(@dumpsql)
{
$sql =  $sql.$_.&quot;\n&quot;;
}
$sql = $sql.&quot;SELECT d.VALUE || &apos;/&apos; || LOWER(RTRIM(i.INSTANCE, CHR(0))) || &apos;&lt;em&gt;ora&lt;/em&gt;&apos; ||
p.spid || &apos;.trc&apos; trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1
AND s.SID = m.SID
AND p.addr = s.paddr) p,
(SELECT t.INSTANCE
FROM v$thread t, v$parameter v
WHERE v.NAME = &apos;thread&apos;
AND (v.VALUE = &apos;0&apos; OR to_char(t.thread#) = v.VALUE)) i,
(select value from v$diag_info WHERE name=&apos;Diag Trace&apos;) d&quot;;
# print &quot;$sql\n&quot;;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;my @sqlResult = executeSQL($sql);
my $tracefile = $sqlResult[0];
MsgPrint(&quot;I&quot;,&quot;Undo Data Block Dump Trace : $tracefile&quot;);
Trace(&quot;Undo Data Block Dump Trace : $tracefile&quot;);
if (open(GRIDINSTLOG, &quot;&amp;lt; $tracefile&quot;))
{
    while (&amp;lt;GRIDINSTLOG&amp;gt;)
    {
        chomp();
        next unless /\S/;
        if ($_ =~ /5f/)  # col 1改5f
        {
            # print $_.&quot;\n&quot;;
            my $line = $_;
            if (length($line) &amp;gt; 32)  # 12改32
            {
                # my @undoname = split(/]/,$line);
                # push @undosegname,TrimSpace($undoname[1]);
				my @undoname;

                if ($line =~ /\]/) {
                    # 如果包含 `]`，按 `]` 分割
                    @undoname = split(/\]/, $line);
                    push @undosegname, TrimSpace($undoname[1]);
                } else {
                    # 如果不包含 `]`，按空格分割
                    @undoname = split(/\s+/, $line);  # 按空格分割
                    push @undosegname, join(&apos; &apos;, @undoname);  # 使用空格连接所有分割的元素，保留十六进制格式
                }
            }
        }
    }
    close(GRIDINSTLOG);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;sub converNamebySQL
{
my $sql = &apos;&apos;;
foreach my $name (@undosegname)
{
Trace(&quot;Undo Segment Name: $name&quot;);
$name =~ s/\s+//g;
Trace(&quot;Covert Undo Segment Name: $name&quot;);
my $sql1= &quot;select UTL_RAW.CAST_TO_VARCHAR2(&apos;&quot;.$name.&quot;&apos;) from dual&quot;;
$sql = $sql.$sql1.&quot;\nunion\n&quot;;
}
$sql .= &quot;select UTL_RAW.CAST_TO_VARCHAR2(&apos;756e646f&apos;) from dual&quot;;
my @sqlResult = executeSQL($sql);&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;my $PREFIX  = &quot;_CORRUPTED_ROLLBACK_SEGMENTS = (&quot;;
my $FSP     = &quot;,&quot;;
my $POSTFIX = &quot;)&quot;;
my $str;
$str = &quot;$PREFIX&quot;;
foreach (@sqlResult)
{
    if ($_ =~ /SYSTEM/ || $_ =~ /undo/) {
        next
    } else {
        $str = &quot;$str$_$FSP&quot;;
    }
}
if ($str =~ /$FSP$/)
{
    chop($str);
}
$str = &quot;$str$POSTFIX&quot;;
MsgPrint(&quot;I&quot;,&quot;$str&quot;);
# 5f535953534d55323024
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;sub converNamebyPerl
{
my @undoRname;
foreach my $name (@undosegname)
{
Trace(&quot;Undo Segment Name: $name&quot;);
my @str1 = split (/\s+/,$name);
my $str;
foreach my $item (@str1)
{
$str.=chr(hex($item));
}
# print &quot;$str\n&quot;;
push @undoRname,$str;
}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;my $PREFIX  = &quot;_CORRUPTED_ROLLBACK_SEGMENTS = (&quot;;
my $FSP     = &quot;,&quot;;
my $POSTFIX = &quot;)&quot;;
my $str;
$str = &quot;$PREFIX&quot;;
foreach (@undoRname)
{
    if ($_ =~ /SYSTEM/ || $_ =~ /undo/) {
        next
    } else {
        $str = &quot;$str$_$FSP&quot;;
    }
}
if ($str =~ /$FSP$/)
{
    chop($str);
}
$str = &quot;$str$POSTFIX&quot;;
MsgPrint(&quot;I&quot;,&quot;$str&quot;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;h1&gt;## &amp;lt;&amp;lt;-----------------------[ Begin Main ]-----------------------------&amp;gt;&amp;gt;&lt;/h1&gt;
&lt;p&gt;ParseArgs();
InitLogfile();
CheckDBStatus();
if ($dbstatus eq &apos;NO&apos;) {
DieTrap(&quot;Database Must be Mounted and Opened&quot;)
}
CheckVersion();
CheckTS();
DumpUndoSegment();
DumpMap();&lt;/p&gt;
&lt;h1&gt;converNamebySQL();&lt;/h1&gt;
&lt;p&gt;converNamebyPerl();&lt;/p&gt;
</content:encoded></item><item><title>有道云的rac备份</title><link>https://blog.newworld.help/posts/%E6%9C%89%E9%81%93%E4%BA%91%E7%9A%84rac%E5%A4%87%E4%BB%BD/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%9C%89%E9%81%93%E4%BA%91%E7%9A%84rac%E5%A4%87%E4%BB%BD/</guid><description>19c主节点内存8G,次节点4G</description><pubDate>Fri, 10 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;19c主节点内存8G,次节点4G
1.配置ip
#节点1
echo &apos;DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.81.191
NETMASK=255.255.255.0
PREFIX=24&apos;&amp;gt; /etc/sysconfig/network-scripts/ifcfg-ens33&lt;/p&gt;
&lt;p&gt;echo &apos;DEVICE=ens34
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.19.191
NETMASK=255.255.255.0
PREFIX=24&apos;&amp;gt; /etc/sysconfig/network-scripts/ifcfg-ens34&lt;/p&gt;
&lt;p&gt;#节点2
echo &apos;DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.81.192
NETMASK=255.255.255.0
PREFIX=24&apos;&amp;gt; /etc/sysconfig/network-scripts/ifcfg-ens33&lt;/p&gt;
&lt;p&gt;echo &apos;DEVICE=ens34
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.19.192
NETMASK=255.255.255.0
PREFIX=24&apos;&amp;gt; /etc/sysconfig/network-scripts/ifcfg-ens34&lt;/p&gt;
&lt;h1&gt;调整network(两个节点执行)&lt;/h1&gt;
&lt;p&gt;service network restart&lt;/p&gt;
&lt;h1&gt;调整network(两个节点执行)&lt;/h1&gt;
&lt;p&gt;echo &quot;NOZEROCONF=yes&quot;  &amp;gt;&amp;gt;/etc/sysconfig/network &amp;amp;&amp;amp; cat /etc/sysconfig/network
删除virbr0
#手动关闭virbr0网卡
ifconfig virbr0 down
#将libvirtd服务开机自启动关闭
systemctl disable libvirtd.service
#重启
reboot
虚拟机网卡名称混乱修改
vim /etc/udev/rules.d/70-p******-net.rules网卡和网络接口的映射关系
start_udev重新扫描设备并产生对应关系&lt;/p&gt;
&lt;p&gt;2.双节点修改主机名
#节点1
hostnamectl --static set-hostname rac19c1
#节点2
hostnamectl --static set-hostname rac19c2
3.调整hosts文件
echo &apos;#public ip
192.168.81.191  rac19c1
192.168.81.192  rac19c2
#private ip
192.168.19.191  rac19c1-priv
192.168.19.192  rac19c2-priv
#vip
192.168.81.91  rac19c1-vip
192.168.81.92  rac19c2-vip
#scanip
192.168.81.19   rac19c-cluster-scan1&apos;&amp;gt;&amp;gt; /etc/hosts
4.关闭防火墙和SELinux
chkconfig NetworkManager off
systemctl list-unit-files|grep firewalld
systemctl status firewalld
systemctl disable firewalld
systemctl stop firewalld&lt;/p&gt;
&lt;p&gt;setenforce Permissive
setenforce 0
sed -i &quot;/^SELINUX=/s#enforcing#disabled#&quot; /etc/selinux/config
cat /etc/selinux/config
5.配置软件yum源
cd /etc/yum.repos.d/
rm -rf  *
cat &amp;lt;&amp;lt;EOF&amp;gt;&amp;gt;/etc/yum.repos.d/rhel-source.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1
EOF
6.挂盘,安装软件包
mount /dev/cdrom /mnt
yum groupinstall -y &quot;Server with GUI&quot;
yum install -y bc gcc gcc-c++  binutils  make gdb cmake  glibc ksh &lt;br /&gt;
elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc-devel  &lt;br /&gt;
libaio libaio-devel libXrender libXrender-devel libX11 libXau sysstat &lt;br /&gt;
libXi libXtst libgcc librdmacm-devel libstdc++ libstdc++-devel libxcb &lt;br /&gt;
net-tools nfs-utils compat-libcap1 compat-libstdc++  smartmontools  &lt;br /&gt;
targetcli python python-configshell python-rtslib python-six &lt;br /&gt;
unixODBC unixODBC-devel e2fsprogs e2fsprogs-libs expect &lt;br /&gt;
openssh-clients readline* tigervnc* psmisc --skip-broken&lt;/p&gt;
&lt;p&gt;由于RHEL7 缺失compat-libstdc+±33包，需要单独下载安装
下载链接
http://www.rpmfind.net/linux/rpm2html/search.php?query=Compat-libstdc&amp;amp;submit=Search+...&amp;amp;system=&amp;amp;arch=
rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm&lt;/p&gt;
&lt;p&gt;scp /tmp/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm  root@192.168.81.192:/tmp&lt;/p&gt;
&lt;p&gt;rpm -ivh /tmp/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
#检查依赖包
rpm -q bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ elfutils-libelf elfutils-libelf-devel glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXtst libXrender libXrender-devel make net-tools nfs-utils smartmontools sysstat e2fsprogs e2fsprogs-libs fontconfig-devel expect unzip openssh-clients readline | grep &quot;not installed&quot;
7.增加组、用户、目录
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba&lt;/p&gt;
&lt;p&gt;useradd -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,racdba -u 10000 oracle
useradd -g oinstall -G dba,asmdba,asmoper,asmadmin,racdba -u 10001 grid&lt;/p&gt;
&lt;p&gt;echo &quot;oracle&quot; | passwd --stdin oracle
echo &quot;grid&quot; | passwd --stdin grid&lt;/p&gt;
&lt;p&gt;mkdir -p /u01/app/19.3.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/
8.修改环境变量
#节点1
cat &amp;gt;&amp;gt; /home/grid/.bash_profile &amp;lt;&amp;lt; &quot;EOF&quot;
################add#########################
umask 022
export DISPLAY=192.168.81.1:0.0
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=+ASM1
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
alias sas=&apos;sqlplus / as sysasm&apos;
export PS1=&quot;[`whoami`@`hostname`:&quot;&apos;$PWD]$ &apos;
EOF&lt;/p&gt;
&lt;p&gt;cat &amp;gt;&amp;gt; /home/oracle/.bash_profile &amp;lt;&amp;lt; &quot;EOF&quot;
################ add#########################
umask 022
export DISPLAY=192.168.81.1:0.0
export TMP=/tmp
export TMPDIR=$TMP
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_HOSTNAME=oracle19c-rac1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=orcl1
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
alias sas=&apos;sqlplus / as sysdba&apos;
export PS1=&quot;[`whoami`@`hostname`:&quot;&apos;$PWD]$ &apos;
EOF&lt;/p&gt;
&lt;p&gt;#节点2
cat &amp;gt;&amp;gt; /home/grid/.bash_profile &amp;lt;&amp;lt; &quot;EOF&quot;
################ enmo add#########################
umask 022
export DISPLAY=192.168.81.1:0.0
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=+ASM2
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
alias sas=&apos;sqlplus / as sysasm&apos;
export PS1=&quot;[`whoami`@`hostname`:&quot;&apos;$PWD]$ &apos;
EOF&lt;/p&gt;
&lt;p&gt;cat &amp;gt;&amp;gt; /home/oracle/.bash_profile &amp;lt;&amp;lt; &quot;EOF&quot;
################ add#########################
umask 022
export DISPLAY=192.168.81.1:0.0
export TMP=/tmp
export TMPDIR=$TMP
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORACLE_HOSTNAME=oracle19c-rac2
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=orcl2
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
alias sas=&apos;sqlplus / as sysdba&apos;
export PS1=&quot;[`whoami`@`hostname`:&quot;&apos;$PWD]$ &apos;
EOF
9、修改系统参数
#安装 Oracle 数据库需要配置系统参数
##配置参数文件
memTotal=$(grep MemTotal /proc/meminfo | awk &apos;{print $2}&apos;)
totalMemory=$((memTotal / 2048))
shmall=$((memTotal / 4))
if [ $shmall -lt 2097152 ]; then
shmall=2097152
fi
shmmax=$((memTotal * 1024 - 1))
if [ &quot;$shmmax&quot; -lt 4294967295 ]; then
shmmax=4294967295
fi
cat &amp;lt;&amp;lt;EOF&amp;gt;&amp;gt;/etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = $shmall
kernel.shmmax = $shmmax
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.wmem_default = 16777216
fs.aio-max-nr = 6194304
vm.dirty_ratio=20
vm.dirty_background_ratio=3
vm.dirty_writeback_centisecs=100
vm.dirty_expire_centisecs=500
vm.swappiness=10
vm.min_free_kbytes=524288
net.core.netdev_max_backlog = 30000
net.core.netdev_budget = 600
#vm.nr_hugepages =
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.ipfrag_time = 60
net.ipv4.ipfrag_low_thresh=6291456
net.ipv4.ipfrag_high_thresh = 8388608
EOF&lt;/p&gt;
&lt;p&gt;##生效
sysctl -p&lt;/p&gt;
&lt;p&gt;#系统资源限制配置&lt;/p&gt;
&lt;h1&gt;修改login配置&lt;/h1&gt;
&lt;p&gt;cat &amp;gt;&amp;gt; /etc/pam.d/login &amp;lt;&amp;lt;EOF
session required pam_limits.so
EOF&lt;/p&gt;
&lt;h1&gt;配置用户限制&lt;/h1&gt;
&lt;p&gt;cat &amp;gt;&amp;gt; /etc/security/limits.conf &amp;lt;&amp;lt;EOF
grid  soft  nproc  2047
grid  hard  nproc  16384
grid  soft   nofile  1024
grid  hard  nofile  65536
grid  soft   stack  10240
grid  hard  stack  32768&lt;/p&gt;
&lt;p&gt;oracle  soft  nproc  2047
oracle  hard  nproc  16384
oracle  soft  nofile  1024
oracle  hard  nofile  65536
oracle  soft  stack  10240
oracle  hard  stack  32768
oracle soft memlock 3145728
oracle hard memlock 3145728
EOF
10.上传grid软件在/tmp，解压缩，配置互信&lt;/p&gt;
&lt;h1&gt;解压缩grid 软件(节点一grid用户)&lt;/h1&gt;
&lt;p&gt;su - grid
cd /tmp
unzip LINUX.X64_193000_grid_home.zip -d $ORACLE_HOME
exit&lt;/p&gt;
&lt;p&gt;root用户执行
/u01/app/19.3.0/grid/oui/prov/resources/scripts/sshUserSetup.sh -user grid  -hosts &quot;rac19C1 rac19C2&quot;  -advanced -exverify –confirm
/u01/app/19.3.0/grid/oui/prov/resources/scripts/sshUserSetup.sh -user oracle  -hosts &quot;rac19C1 rac19C2&quot;  -advanced -exverify –confirm&lt;/p&gt;
&lt;p&gt;#互信检查
ssh rac19c1       date
ssh rac19c2       date
ssh rac19c1-priv  date
ssh rac19c2-priv  date
11.检验时间和时区确认正确
date
timedatectl set-timezone Asia/Shanghai
timedatectl status|grep Local
12.chrony服务，移除chrony配置文件（后续使用ctss）
systemctl list-unit-files|grep chronyd
systemctl status chronyd
systemctl disable chronyd
systemctl stop chronyd
mv /etc/chrony.conf /etc/chrony.conf_bak
mv /etc/ntp.conf /etc/ntp.conf_bak
systemctl list-unit-files|grep -E &apos;ntp|chrony&apos;
13.修改其他参数&lt;/p&gt;
&lt;h1&gt;调整/dev/shm,需要把/dev/shm调整到4G&lt;/h1&gt;
&lt;p&gt;cp /etc/fstab /etc/fstab_&lt;code&gt;date +&quot;%Y%m%d_%H%M%S&quot;&lt;/code&gt;
echo &quot;tmpfs    /dev/shm    tmpfs    rw,exec,size=4G    0 0&quot;&amp;gt;&amp;gt;/etc/fstab
mount -o remount /dev/shm
df -h&lt;/p&gt;
&lt;h1&gt;关闭THP和numa&lt;/h1&gt;
&lt;h1&gt;检查：&lt;/h1&gt;
&lt;p&gt;cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag&lt;/p&gt;
&lt;h1&gt;修改&lt;/h1&gt;
&lt;p&gt;sed -i &apos;s/quiet/quiet transparent_hugepage=never numa=off/&apos; /etc/default/grub
grep quiet  /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg&lt;/p&gt;
&lt;h1&gt;不重启生效&lt;/h1&gt;
&lt;p&gt;echo never &amp;gt; /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
14.关闭服务
#关闭avahi服务
systemctl stop    avahi-daemon
systemctl disable avahi-daemon
#关闭其他服务
#禁用开机启动
systemctl disable accounts-daemon.service
systemctl disable atd.service
systemctl disable avahi-daemon.service
systemctl disable avahi-daemon.socket
systemctl disable bluetooth.service
systemctl disable brltty.service
--systemctl disable chronyd.service
systemctl disable colord.service
systemctl disable cups.service
systemctl disable debug-shell.service
systemctl disable firewalld.service
systemctl disable gdm.service
systemctl disable ksmtuned.service
systemctl disable ktune.service
systemctl disable libstoragemgmt.service
systemctl disable mcelog.service
systemctl disable ModemManager.service
--systemctl disable ntpd.service
systemctl disable postfix.service
systemctl disable postfix.service
systemctl disable rhsmcertd.service
systemctl disable rngd.service
systemctl disable rpcbind.service
systemctl disable rtkit-daemon.service
systemctl disable tuned.service
systemctl disable upower.service
systemctl disable wpa_supplicant.service&lt;/p&gt;
&lt;h1&gt;停止服务&lt;/h1&gt;
&lt;p&gt;systemctl stop accounts-daemon.service
systemctl stop atd.service
systemctl stop avahi-daemon.service
systemctl stop avahi-daemon.socket
systemctl stop bluetooth.service
systemctl stop brltty.service
--systemctl stop chronyd.service
systemctl stop colord.service
systemctl stop cups.service
systemctl stop debug-shell.service
systemctl stop firewalld.service
systemctl stop gdm.service
systemctl stop ksmtuned.service
systemctl stop ktune.service
systemctl stop libstoragemgmt.service
systemctl stop mcelog.service
systemctl stop ModemManager.service
--systemctl stop ntpd.service
systemctl stop postfix.service
systemctl stop postfix.service
systemctl stop rhsmcertd.service
systemctl stop rngd.service
systemctl stop rpcbind.service
systemctl stop rtkit-daemon.service
systemctl stop tuned.service
systemctl stop upower.service
systemctl stop wpa_supplicant.service
15.配置ssh服务&lt;/p&gt;
&lt;h1&gt;配置LoginGraceTime参数为0, 将timeout wait设置为无限制&lt;/h1&gt;
&lt;p&gt;cp /etc/ssh/sshd_config /etc/ssh/sshd_config_&lt;code&gt;date +&quot;%Y%m%d_%H%M%S&quot;&lt;/code&gt; &amp;amp;&amp;amp; sed -i &apos;/#LoginGraceTime 2m/ s/#LoginGraceTime 2m/LoginGraceTime 0/&apos; /etc/ssh/sshd_config &amp;amp;&amp;amp; grep LoginGraceTime /etc/ssh/sshd_config
#加快SSH登陆速度，禁用DNS
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_&lt;code&gt;date +&quot;%Y%m%d_%H%M%S&quot;&lt;/code&gt; &amp;amp;&amp;amp; sed -i &apos;/#UseDNS yes/ s/#UseDNS yes/UseDNS no/&apos; /etc/ssh/sshd_config &amp;amp;&amp;amp; grep UseDNS /etc/ssh/sshd_config&lt;/p&gt;
&lt;p&gt;16.安装cvuqdisk软件&lt;/p&gt;
&lt;h1&gt;安装cvuqdisk软件(root用户)&lt;/h1&gt;
&lt;p&gt;cd /u01/app/19.3.0/grid/cv/rpm
export CVUQDISK_GRP=oinstall
rpm -ivh cvuqdisk-1.0.10-1.rpm&lt;/p&gt;
&lt;h1&gt;传输到第 2 个节点上和安装&lt;/h1&gt;
&lt;p&gt;scp cvuqdisk-1.0.10-1.rpm root@192.168.81.192:/tmp&lt;/p&gt;
&lt;p&gt;cd /tmp
export CVUQDISK_GRP=oinstall
rpm -ivh /tmp/cvuqdisk-1.0.10-1.rpm
17.安装前检查
su - grid
cd $ORACLE_HOME
export CVUQDISK_GRP=oinstall
/u01/app/19.3.0/grid/runcluvfy.sh stage -post hwos -n rac19c1,rac19c2 -verbose&lt;/p&gt;
&lt;p&gt;18.静默解压补丁安装包：
cd /soft
##解压RU补丁包
chown -R grid:oinstall /soft
su - grid -c &quot;unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /u01/app/19.3.0/grid&quot;
##解压OPatch补丁包
su - grid -c &quot;unzip -q /soft/p32545008_190000_Linux-x86-64.zip -d /soft&quot;
chown -R oracle:oinstall /soft
su - oracle -c &quot;unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /u01/app/oracle/product/19.3.0/db&quot;&lt;/p&gt;
</content:encoded></item><item><title>oracle_job相关</title><link>https://blog.newworld.help/posts/oracle_job%E7%9B%B8%E5%85%B3/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle_job%E7%9B%B8%E5%85%B3/</guid><description>DBMS_SCHEDULER.CREATE_JOB (</description><pubDate>Mon, 06 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name             =&amp;gt; &apos;job_name&apos;,
job_type             =&amp;gt; &apos;job_type&apos;,
job_action           =&amp;gt; &apos;job_action&apos;,
start_date           =&amp;gt; &apos;start_date&apos;,
repeat_interval      =&amp;gt; &apos;repeat_interval&apos;,
end_date             =&amp;gt; &apos;end_date&apos;,
enabled              =&amp;gt; TRUE | FALSE,
comments             =&amp;gt; &apos;comments&apos;
);
END;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;首先确定要停止的JOB号
在10g中可通过Dba_Jobs_Running进行确认。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;查找正在运行的JOB:
select sid from dba_jobs_running;&lt;/p&gt;
&lt;p&gt;查找到正在运行的JOB的spid:
select a.spid
from v$process a ,v$session b
where a.addr=b.paddr and b.sid in (select sid from dba_jobs_running);&lt;/p&gt;
&lt;p&gt;查看所有job
select
from dba_jobs&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Broken你确认的JOB
注意使用DBMS_JOB包来标识你的JOB为BROKEN。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; EXEC DBMS_JOB.BROKEN(job#,TRUE);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意：当执行完该命令你选择的这个JOB还是在运行着的。&lt;/p&gt;
&lt;p&gt;回到顶部&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Kill 对应的Oracle Session
应为BROKEN后该JOB还在运行，如果要求该JOB立刻停止，就需要找到该job的对应SESSION(SID,SERIAL#)，然后执行以下命令：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ALTER SYSTEM KILL SESSION &apos;sid,serial#&apos;;&lt;/p&gt;
&lt;p&gt;或者直接KILL对应的操作系统的SESSION，如果使用ALTER SYSTEM KILL SESSION执行很长时间，其实可以使用OS的命令来快速KILL掉SESSION.&lt;/p&gt;
&lt;p&gt;For Windows, at the DOS Prompt: orakill sid spid&lt;/p&gt;
&lt;p&gt;For UNIX at the command line&amp;gt; kill –9 spid&lt;/p&gt;
&lt;p&gt;注意：ALTER SYSTEM KILL SESSION &apos;sid,serial#&apos;; 有时候是关闭不掉了，杀掉只有又会自动执行，因此建议直接啥系统线程&lt;/p&gt;
&lt;p&gt;回到顶部
4. 检查你的JOB是否还在运行
检查你要停止的JOB是否还在运行，其实多数情况下，应该都已经停止了。尤其执行的第三步的“杀手”命令。如果真的还是没有停止，只好从第一道第三步重新做一下了。&lt;/p&gt;
&lt;p&gt;回到顶部&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将Job Queue Processes的数目修改为0
首先确认当前的Job Queue Processes的数目&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; col value for a10
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; select name,value from v$parameter where name =&apos;job_queue_processes&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后将Job Queue Processes的数目修改为0&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; ALTER SYSTEM SET job_queue_processes = 0;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保证所有的JOB都会停止。&lt;/p&gt;
&lt;p&gt;回到顶部&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;修改你要修改的任何东西，甚至是JOB内的内容。
回到顶部&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改完成后，将job的BROKEN状态停止。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt;EXEC DBMS_JOB.BROKEN(job#,FALSE):
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;回到顶部&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;恢复job_queue_processes的原始值
ALTER SYSTEM SET job_queue_processes = original_value;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;至此整个停止并修改JOB完成.&lt;/p&gt;
&lt;p&gt;但是需要另外注意一下的是，在MARK一个BROKEN状态的时候，因为JOB内部执行SQL的原因，所以执行时或许要“煎熬”一段时间。所以在建立JOB时一定要仔细考虑，同时如果可能可以在你设计的PL/SQL代码中，增加一些判断“停止信号”的部分。来避免费力执行上面的步骤。&lt;/p&gt;
&lt;p&gt;毕竟，ORACLE在执行JOB时，还是很“倔强”的 -:)&lt;/p&gt;
&lt;p&gt;4 附件：ORAKILL用法
很多时候遇到某个session一直处于active，使得CPU一直处于搞使用状态，虽然kill 了，但是却不能够使得使得线程结束。 kill session只是kill这个进程，但是线程一直处于活动状态。需要真正的kill线程才能够解决cpu使用率高的问题。&lt;/p&gt;
</content:encoded></item><item><title>ADRCI操作命令</title><link>https://blog.newworld.help/posts/adrci%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4/</link><guid isPermaLink="true">https://blog.newworld.help/posts/adrci%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4/</guid><description>ADR是Automatic Diagnostic Repository首字母缩写，它是一个数据库外的基于文件的、</description><pubDate>Sat, 07 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ADR是Automatic Diagnostic Repository首字母缩写，它是一个数据库外的基于文件的、
并且可以通过事件编号检索和分析的存储库。
http://dba.qishuo.xin/?p=589
MOS文档：purgeLogs: Cleanup traces, logs in one command (Doc ID 2081655.1)&lt;/p&gt;
&lt;p&gt;HELP                             查看帮助
HOST                             进入终端命令行,加引号将终端命令行命令打印
SHOW BASE                        查看ORACLE_BASE目录
SHOW ALERT                       查看ALERT日志,以文本编译器模式查看
SHOW INCDIR                      显示INCIDENT严重事件报错目录
SHOW INCIDENT                    显示严重事件报错ORA及时间
SHOW PROBLEM                     显示最近一次问题&lt;/p&gt;
&lt;p&gt;清理10天前的incident问题文件（10天 × 24小时 × 60分钟 = 14400 分钟）
adrci&amp;gt; help purge
adrci&amp;gt; purge -age 14400 -type incident
adrci&amp;gt; purge -age 14400 -type trace
-type {ALERT|INCIDENT|TRACE|CDUMP|HM|UTSCDMP|LOG}&lt;/p&gt;
&lt;p&gt;在adrci中设置trace文件保留的策略
adrci&amp;gt; show control  #查看可以设置的策略
adrci&amp;gt; help set control
set control (SHORTP_POLICY = 720) #720的单位是小时&lt;/p&gt;
</content:encoded></item><item><title>函数_返回多值_参考</title><link>https://blog.newworld.help/posts/%E5%87%BD%E6%95%B0_%E8%BF%94%E5%9B%9E%E5%A4%9A%E5%80%BC_%E5%8F%82%E8%80%83/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%87%BD%E6%95%B0_%E8%BF%94%E5%9B%9E%E5%A4%9A%E5%80%BC_%E5%8F%82%E8%80%83/</guid><description>CREATE OR REPLACE FUNCTION FUN_POLICY_OP0073_PA (V_CUST_NAME IN VARCHA</description><pubDate>Thu, 14 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;CREATE OR REPLACE FUNCTION FUN_POLICY_OP0073_PA (V_CUST_NAME IN VARCHAR2, --客户姓名
V_CUST_CERTI_TYPE IN VARCHAR2,  --证件类型
V_CUST_CERTI_CODE IN VARCHAR2,  --证件号码
V_BANK_ACCOUNT IN VARCHAR2,  --银行账号
V_BANK_CODE IN VARCHAR2  --银行代码
) RETURN TYPE_POLICY_OP0073_RETURN_PA  --返回一个类型，此类型格式和TYPE_POLICY_TABULATION一致
PIPELINED IS
V_POLICY TYPE_POLICY_OP0073_PA; --类型，用来接收所有指标&lt;/p&gt;
&lt;p&gt;BEGIN&lt;/p&gt;
&lt;p&gt;FOR I IN (SELECT TPA.POLICY_ID
FROM WIFT_PA.T_PA_CUSTOMER TPA
WHERE TPA.NAME = V_CUST_NAME
AND TPA.CERTI_CODE = V_CUST_CERTI_CODE)  --通过姓名、证件找到名下所有保单
LOOP --由于管道函数一次只能接收一行值，故用循环
SELECT TYPE_POLICY_OP0073_PA(POLICYNO,
PRODUCTNAME,
POLICYSTATE,
FEEAMOUNT,
BANKNAME,
BANKNO,
BANKCODE,
MOBILE,
SORTDATE,
SORTNO,
CUST_CERTI_TYPE,
CUST_CERTI_CODE,
CUST_NAME) INTO V_POLICY  --将指标赋值于类型
FROM (&lt;/p&gt;
&lt;p&gt;SELECT TP.POLICY_NO AS POLICYNO,
MAX(TPR.PRODUCT_NAME) AS PRODUCTNAME,
TP.POLICY_STATUS AS POLICYSTATE,
SUM(DECODE(TO_CHAR(C.STD_PREM_BF, &apos;FM9999999999999999.00&apos;),
&apos;.00&apos;,
&apos;0.00&apos;,
TO_CHAR(C.STD_PREM_BF, &apos;FM9999999999999999.00&apos;))) OVER(PARTITION BY C.POLICY_ID) AS FEEAMOUNT,
DB.BANK_NAME AS BANKNAME,
TMP.ACCOUNT_CODE AS BANKNO,
TMP.BANK_CODE AS BANKCODE,
NVL(TMP.RESERVE_MOBILE, TPC.MOBILE) AS MOBILE,
TP.ISSUE_DATE SORTDATE,
CASE TP.POLICY_STATUS WHEN &apos;00&apos;THEN &apos;1&apos; ELSE &apos;2&apos; END SORTNO,
MC.CODE CUST_CERTI_TYPE,
TPC.CERTI_CODE CUST_CERTI_CODE,
TPC.NAME CUST_NAME
FROM WIFT_PA.T_PA_POLICY TP
INNER JOIN WIFT_PA.T_PA_POLICY_PRODUCT C
ON TP.POLICY_ID = C.POLICY_ID
INNER JOIN WIFT_PA.T_PA_CUSTOMER TPC
ON TP.POLICY_ID = TPC.POLICY_ID
AND TP.HOLDER_CUST_ID = TPC.CUSTOMER_ID
INNER JOIN WIFT_IIWS.T_PRODUCT TPR
ON C.PRODUCT_ID = TPR.PRODUCT_ID
INNER JOIN
--LXX UPDATE 20230919:由客户账户信息表左关联付款人账户表(优先付款人账户表)，调整为客户账户信息表或者首先付款人账户表中存在（若均存在，优先客户账户信息表）
(SELECT TT.POLICY_CODE, --保单号码
TT.ACCOUNT_CODE, --银行账号
TT.BANK_CODE, --银行代码
TT.RESERVE_MOBILE, --预留手机号
TT.INSERT_TIME, --插入时间
TT.FLAG, --来源标记：01-承保 02-保全
ROW_NUMBER() OVER(PARTITION BY TT.POLICY_CODE ORDER BY TT.FLAG ASC, TT.INSERT_TIME DESC) RN
FROM (SELECT TPA.POLICY_CODE, --保单号码
TPA.ACCOUNT_CODE ACCOUNT_CODE, --银行账号
TPA.BANK_CODE BANK_CODE, --银行代码
TPA.RESERVE_MOBILE, --预留手机号
TPA.INSERT_TIME, --插入时间
&apos;01&apos; AS FLAG --来源标记：01-承保 02-保全
FROM WIFT_PA.T_PA_ACCOUNT TPA --客户账户信息表
WHERE 1 = 1
AND TPA.ACCOUNT_CODE  = V_BANK_ACCOUNT
AND TPA.BANK_CODE =V_BANK_CODE
UNION ALL
SELECT TP.POLICY_NO AS POLICY_CODE, --保单号码
CA.BANK_ACCOUNT AS ACCOUNT_CODE, --银行账号
CA.BANK_CODE, --银行代码
CA.RESERVE_MOBILE, --银行预留手机号
CA.CREATE_TIME AS INSERT_TIME, --创建时间
&apos;02&apos; AS FLAG --来源标记：01-承保 02-保全
FROM WIFT_CS.T_CS_PAYER_ACCOUNT CA --付款人账户表
INNER JOIN WIFT_PA.T_PA_POLICY TP --保单主表
ON TP.POLICY_ID = CA.POLICY_ID
WHERE 1 = 1
AND CA.BANK_ACCOUNT  = V_BANK_ACCOUNT --参数，银行账号
AND CA.BANK_CODE = V_BANK_CODE  --参数，银行代码
) TT ) TMP
ON TP.POLICY_NO = TMP.POLICY_CODE  AND TMP.RN= 1
LEFT OUTER JOIN JDTM.M_CERTY_TYPE MC
ON TPC.CERTI_TYPE = MC.SOUR_CODE
AND MC.SOURCE_ID = 11
LEFT JOIN WIFT_IIWS.D_BANK DB
ON TMP.BANK_CODE = DB.BANK_CODE
WHERE TPC.NAME = V_CUST_NAME  --参数，姓名
AND MC.CODE = V_CUST_CERTI_TYPE  --参数，证件类型
AND TPC.CERTI_CODE = V_CUST_CERTI_CODE  --参数，证件号码
AND TPR.MAIN_RIDER = &apos;M&apos;
AND TP.POLICY_ID= I.POLICY_ID  --游标，保单号，循环查询，较快
GROUP BY TP.POLICY_NO,
TP.POLICY_STATUS,
DB.BANK_NAME,
TMP.BANK_CODE,
TPC.CERTI_CODE,
NVL(TMP.RESERVE_MOBILE, TPC.MOBILE),
C.STD_PREM_BF,
C.POLICY_ID,
TP.ISSUE_DATE,
TMP.ACCOUNT_CODE,
CASE TP.POLICY_STATUS WHEN &apos;00&apos;THEN &apos;1&apos; ELSE &apos;2&apos; END,
MC.CODE,
TPC.CERTI_CODE,
TPC.NAME);
PIPE ROW(V_POLICY);
END LOOP;
RETURN;
END;&lt;/p&gt;
&lt;p&gt;--调用方法
SELECT policyNo,--保单号
productName,--险种
policyState,  --保单状态
feeAmount,  --金额
bankName, --银行
bankNo,  --银行账号
bankCode,  --银行代码
mobile,  --手机号
sortDate,  --承保时间
sortNo
FROM TABLE(FUN_POLICY_OP0073_PA(参数1，，，参数5))&lt;/p&gt;
</content:encoded></item><item><title>MySQL表碎片清理</title><link>https://blog.newworld.help/posts/mysql%E8%A1%A8%E7%A2%8E%E7%89%87%E6%B8%85%E7%90%86/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mysql%E8%A1%A8%E7%A2%8E%E7%89%87%E6%B8%85%E7%90%86/</guid><description>MySQL表在经历多次删除、更新、插入之后，表空间会出现碎片。定期进行空间整理，消除碎片可以提高表空间的性能。</description><pubDate>Tue, 12 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;MySQL表碎片清理
https://support.enmotech.com/article/6253/search&lt;/p&gt;
&lt;p&gt;MySQL表在经历多次删除、更新、插入之后，表空间会出现碎片。定期进行空间整理，消除碎片可以提高表空间的性能。&lt;/p&gt;
&lt;p&gt;#####删除数据：
当执行delete操作时，被删除的记录只是被标记为删除，它们占用的空间并没有被释放，而是留给以后使用。
如果以后插入的数据不能完全填充这些空间，就会形成碎片。&lt;/p&gt;
&lt;p&gt;delete from student where createtime &amp;lt; &apos;2023-01-01 00:00:00&apos;;&lt;/p&gt;
&lt;p&gt;#####更新数据：
①当执行update操作时，如果更新的字段是可变长度的（如varchar），并且更新后的值比原来的值短，那么原来的空间就会有多余。
如果更新后的值比原来的值长，那么可能导致页分裂，也会产生碎片。&lt;/p&gt;
&lt;p&gt;update student set score=90 where id &amp;gt; 10;&lt;/p&gt;
&lt;p&gt;②alter语句会修改表的结构，例如添加或删除列，创建或删除索引，更改列的类型等。
这些操作可能会导致表产生碎片，因为标的数据和索引可能会被重建或移动。&lt;/p&gt;
&lt;p&gt;alter table student add column age int;&lt;/p&gt;
&lt;p&gt;#####插入数据：
当执行insert操作时，如果插入的数据不是按照索引顺序插入，而是随机插入，那么可能导致页分裂或者页合并，也会产生碎片。&lt;/p&gt;
&lt;p&gt;对于插入数据来说，如果插入的数据是按照主键或者唯一索引的顺序插入，那么就是按照索引顺序插入。
如果插入的数据是无序的或者按照非唯一索引的顺序插入，那么就是随机插入。
例如，假设有一个表student，它有一个主键id和一个非唯一索引name。如果执行以下语句：&lt;/p&gt;
&lt;p&gt;insert into student (id, name) values (1, &apos;Alice&apos;), (2, &apos;Bob&apos;), (3, &apos;Charlie&apos;);&lt;/p&gt;
&lt;p&gt;那么就是按照主键顺序插入，不会产生碎片。但如果执行以下语句：
insert into student (id, name) values (3, &apos;Charlie&apos;), (1, &apos;Alice&apos;), (2, &apos;Bob&apos;);&lt;/p&gt;
&lt;p&gt;那么就是随机插入，可能会产生碎片。同样，如果执行以下语句：
insert into student (id, name) values (4, &apos;David&apos;), (5, &apos;Eve&apos;), (6, &apos;Frank&apos;);&lt;/p&gt;
&lt;p&gt;那么就是按照name索引的顺序插入，也可能会产生碎片。&lt;/p&gt;
&lt;p&gt;#####解决方案
MySQL表空间清理的方案可能取决于你的表的引擎类型，数据量，碎片程度和业务需求。&lt;/p&gt;
&lt;p&gt;1.首先用下边SQL来查看MySQL库中前10碎片表情况：
SELECT table_schema,
TABLE_NAME,
(data_length + index_length) / 1024 / 1024 AS Total_MB,
data_free / 1024 / 1024 AS data_free_mb,
data_free * 100 / (data_length + index_length) AS data_free_percent,
CURDATE() AS today
FROM information_schema.tables
WHERE table_schema NOT IN
(&apos;mysql&apos;, &apos;sys&apos;, &apos;information_schema&apos;, &apos;performance_schema&apos;)
ORDER BY data_free_percent DESC LIMIT 10&lt;/p&gt;
&lt;p&gt;如果结果显示碎片较大，一些常用的清理碎片空间的方法有：&lt;/p&gt;
&lt;p&gt;2.使用OPTIMIZE TABLE命令:这个命令可以对表进行重建，消除碎片，回收空间，优化索引。
过程中表数据会复制到新建的临时表中，增加实例的磁盘使用率。因此实例剩余磁盘空间要大于等于需释放表的空间，当机器剩余空间不足时，需先扩容。
它适用于MylSAM，BDB和InnoDB表，尤其是MyISAM表。但是这个命令会锁表，所以要在业务低峰期执行，并且要注意备份数据。&lt;/p&gt;
&lt;p&gt;root@localhost:test 04:46:36 &amp;gt;optimize table chat_qa_record;
+---------------------+----------+----------+-------------------------------------------------------------------+
| Table               | Op       | Msg_type | Msg_text                                                          |
+---------------------+----------+----------+-------------------------------------------------------------------+
| test.chat_qa_record | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.chat_qa_record | optimize | status   | OK                                                                |
+---------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.10 sec)&lt;/p&gt;
&lt;p&gt;在InnoDB引擎中执行optimize table 语句时，会出现Table does not support optimize, doing recreate + analyze instead的提示信息，
该信息是正常执行返回的结果，可忽略。确认返回ok即可。&lt;/p&gt;
&lt;p&gt;3.使用ALTER TABLE xx ENGINE=INNODB;命令:这个命令也可以对表进行重建，它也会锁表，所以要在业务低峰期执行，并且要注意备份数据。&lt;/p&gt;
&lt;p&gt;root@localhost:test 05:06:12 &amp;gt;alter table t4today engine = innodb;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0&lt;/p&gt;
&lt;p&gt;###5.7版本有索引可能需要重建索引,否则清理碎片后,磁盘空间可能更大
#查看索引
show index from username.tablename&lt;/p&gt;
&lt;p&gt;#重建索引
ALTER TABLE tablename DROP INDEX key_name;
ALTER TABLE tablename ADD INDEX key_name(column_name);
#重建主键
ALTER TABLE tablename DROP PRIMARY KEY;
ALTER TABLE tablename ADD PRIMARY KEY (column_name);&lt;/p&gt;
&lt;p&gt;############################################非常规方法############################################&lt;/p&gt;
&lt;p&gt;使用TRUNCATE TABLE命令: 这个命令可以删除表中的所有数据，并目回收空间。
它相当于先删除表，然后再创建一个空表。它不会锁表，但是会删除所有数据，需要和业务方沟通好数据问题，谨慎使用，并且要注意备份数据。&lt;/p&gt;
&lt;p&gt;要避免表碎片，你可以参考以下的建议：&lt;/p&gt;
&lt;p&gt;尽量按照索引顺序插入数据：如果你的表有主键或者唯一索引，那么尽量按照这些索引的顺序插入数据，避免随机插入。
这样可以减少页分裂或页合并的可能性。&lt;/p&gt;
&lt;p&gt;尽量避免删除或更新可变长度的字段：如果你的表有可变长度的字段（如varchar），那么尽量避免删除或更新这些字段，
因为这样可能会导致空间浪费或页分裂。如果你需要删除或更新这些字段，那么可以考虑使用固定长度的字段（如char）来替换它们。&lt;/p&gt;
&lt;p&gt;定期清理表碎片：MySQL官方建议不要经常（每小时或每天）进行碎片整理，一般根据实际情况，只需要每周或者每月挑选业务低峰期整理一次即可。&lt;/p&gt;
</content:encoded></item><item><title>Oracle清理senddata</title><link>https://blog.newworld.help/posts/oracle%E6%B8%85%E7%90%86senddata/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle%E6%B8%85%E7%90%86senddata/</guid><description>CREATE OR REPLACE PROCEDURE PROC_SC2 (proc_l VARCHAR2,PROC_N NUMBER)</description><pubDate>Tue, 15 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;CREATE OR REPLACE PROCEDURE PROC_SC2 (proc_l VARCHAR2,PROC_N NUMBER)
AUTHID CURRENT_USER
AS
CUR_1 SYS_REFCURSOR;
V_NAME VARCHAR2(66);
V_SQL VARCHAR2(666);
v_COUNT NUMBER;
V_1 NUMBER:=0+PROC_N;
BEGIN
SELECT COUNT(1) INTO v_COUNT FROM user_tables WHERE table_name=UPPER(proc_l);
IF v_count&amp;gt;0 THEN
V_SQL:=&apos;DROP TABLE &apos;||proc_l||&apos; PURGE&apos;;
EXECUTE IMMEDIATE V_SQL;
END IF;
OPEN CUR_1 FOR SELECT SEGMENT_NAME INTO V_NAME
FROM (SELECT ROWNUM RM,SEGMENT_NAME FROM USER_SEGMENTS a WHERE SEGMENT_TYPE like &apos;TABLE%&apos;
AND SEGMENT_NAME&amp;lt;&amp;gt;&apos;RDI_IND_CUST_INFO&apos;
AND SEGMENT_NAME&amp;lt;&amp;gt;&apos;RDI_INDIV_DEPOSIT_ACCT&apos;)
WHERE RM&amp;gt;=PROC_N AND RM&amp;lt;=PROC_N+9;
LOOP
FETCH CUR_1 INTO V_NAME;
EXIT WHEN CUR_1%NOTFOUND;
select COUNT(1) INTO V_COUNT from USER_tab_cols
where table_name=V_NAME AND column_name=UPPER(&apos;data_dt&apos;);
IF V_COUNT&amp;gt;0 THEN
V_SQL:=&apos; CREATE TABLE &apos;||proc_l||&apos; TABLESPACE zbc AS SELECT * FROM &apos;||V_NAME||&apos;
WHERE SUBSTR(data_dt,1,3)=&apos;&apos;202&apos;&apos;
or data_dt=&apos;&apos;2019-12-31&apos;&apos;&apos;;
dbms_output.put_line(V_1||&apos;  &apos;||V_NAME);
EXECUTE IMMEDIATE V_SQL ;
V_SQL:=&apos;TRUNCATE TABLE &apos;||V_NAME;
EXECUTE IMMEDIATE V_SQL;
V_SQL:=&apos;INSERT INTO &apos;||V_NAME||&apos; SELECT * FROM &apos;||proc_l;
COMMIT;
EXECUTE IMMEDIATE V_SQL;
V_SQL:=&apos;DROP TABLE &apos;||proc_l||&apos; PURGE&apos;;
EXECUTE IMMEDIATE V_SQL;
END IF;
V_1:=V_1+1;
END LOOP;
CLOSE CUR_1;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;&lt;/p&gt;
</content:encoded></item><item><title>MES平台服务_Mogdb巡检工具</title><link>https://blog.newworld.help/posts/mes%E5%B9%B3%E5%8F%B0%E6%9C%8D%E5%8A%A1_mogdb%E5%B7%A1%E6%A3%80%E5%B7%A5%E5%85%B7/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mes%E5%B9%B3%E5%8F%B0%E6%9C%8D%E5%8A%A1_mogdb%E5%B7%A1%E6%A3%80%E5%B7%A5%E5%85%B7/</guid><description>支持操作系统，centos，kylin</description><pubDate>Sat, 12 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;介绍
支持mogdb版本3.x以上
支持操作系统，centos，kylin&lt;/p&gt;
&lt;p&gt;mogdb巡检工具由两个脚本和一个配置文件组成：&lt;/p&gt;
&lt;p&gt;1,h_check2.sh 是巡检执行脚本，用来采集操作系统和数据库巡检参数。如果数据库非单机而是主备架构，
脚本应在主库上执行，会自动采集所有主备库的主机信息和主库的mogdb数据集信息。&lt;/p&gt;
&lt;p&gt;2，check_all_node.py 是跨库推送脚本，可根据配置文件 check_conf.json 的配置信息，
将h_check2.sh脚本推送到多套数据库上执行，实现一次性巡检多套数据库的功能。
注意：实现此功能需要提前配置好执行脚本的主机和其他数据库主库服务器的ssh互信，
脚本通过scp 命令将巡检执行脚本推送到目标服务器，并取回巡检结果。&lt;/p&gt;
&lt;p&gt;3，check_conf.json 是多套库的配置信息，需提前配置好此文件，才能实现一次巡检多套库的功能。
参数说明：
script_path：执行check_all_node.py 的服务器上 h_check2.sh 的路径
repot_path：巡检报告回传的保存路径
host_list：巡检多套数据库的信息列表
host：主机ip
pguser：mogdb数据库初始用户名
port：mogdb数据库端口号
htmldir：巡检报告保存的本地地址，$表示 /home/$pguser/ 目录
scriptdir：巡检脚本保存的本地地址，$表示 /home/$pguser/ 目录&lt;/p&gt;
&lt;p&gt;使用说明&lt;/p&gt;
&lt;p&gt;1，巡检本机或本机所在的集群。&lt;/p&gt;
&lt;p&gt;快速执行命令：
sh h_check2.sh&lt;/p&gt;
&lt;p&gt;可指定参数：
-host :主机名，缺省值为当前主机名。
-u --pguser :mogdb 初始用户，缺省值为：omm&quot;。
-p --port :mogdb 端口号，缺省值为 26000&quot;  。
-f --htmlfile :巡检报告保存全路径名称，默认为 /home/${PGUSER}/${HostName}&lt;em&gt;mogdb&lt;/em&gt;$(date &apos;+%Y-%m-%d_%H_%M_%S&apos;).html。&lt;/p&gt;
&lt;p&gt;全参数示例：
sh h_check2.sh -host myhost -u enmo -p 27000 -f /opt/mogdb/mydb_01.html&lt;/p&gt;
&lt;p&gt;2，巡检多套库&lt;/p&gt;
&lt;p&gt;首先配置check_conf.json文件，只用配置每个套集群的主库信息：&lt;/p&gt;
&lt;p&gt;{
&quot;script_path&quot;: &quot;/home/omm/script/h_check2.sh&quot;,
&quot;repot_path&quot;: &quot;/home/omm/check_report&quot;,
&quot;host_list&quot;: [
{
&quot;host&quot;: &quot;mogdb01&quot;,
&quot;pguser&quot;: &quot;omm&quot;,
&quot;port&quot;: &quot;26000&quot;,
&quot;htmldir&quot;: &quot;$/check_report&quot;,
&quot;scriptdir&quot;: &quot;$/script/&quot;
},
{
&quot;host&quot;: &quot;enmodb01&quot;,
&quot;pguser&quot;: &quot;omm&quot;,
&quot;port&quot;: &quot;26000&quot;,
&quot;htmldir&quot;: &quot;$/check_report&quot;,
&quot;scriptdir&quot;: &quot;$/script/&quot;
}
]
}&lt;/p&gt;
&lt;p&gt;然后执行
python check_all_node.py&lt;/p&gt;
</content:encoded></item><item><title>Oracle11g安装grid</title><link>https://blog.newworld.help/posts/oracle11g%E5%AE%89%E8%A3%85grid/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle11g%E5%AE%89%E8%A3%85grid/</guid><description>创建dg		 创建grid的dg</description><pubDate>Thu, 26 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;grid
grid用户
解压/tmp/压缩包p3&lt;/p&gt;
&lt;p&gt;11g配置asm
创建+asm实例
创建dg		 创建grid的dg&lt;/p&gt;
&lt;p&gt;asm	10g仅管理硬盘	diskgroup
asm	11g管理dg,管理css进程资源,管理监听资源
10g	asm配置	datadg	dbca建库时保存数据
11g	asm配置	grid	dbca建库时保存数据,用于存放+ASM实例相关管理信息
安装软件grid配置grid的griddg,grid安装完成使用asmca创建datadg&lt;/p&gt;
&lt;p&gt;需要准备disk让asm使用,disk是字符设备文件&lt;/p&gt;
&lt;p&gt;sdb 1G分给sdb1	4G分给sdb2
raw1	griddg
raw2	datadg&lt;/p&gt;
&lt;p&gt;root用户
vim /etc/udev/rules.d/60-raw.rules
ACTION==&quot;add&quot;,KERNEL==&quot;sdb1&quot;,RUN+=&quot;/bin/raw /dev/raw/raw1 %N&quot;
ACTION==&quot;add&quot;,KERNEL==&quot;sdb2&quot;,RUN+=&quot;/bin/raw /dev/raw/raw2 %N&quot;
KERNEL==&quot;raw*&quot;,OWNER=&quot;grid&quot;,GROUP=&quot;asmadmin&quot;,MODE=&quot;0660&quot;
生效执行start_udev
yum install compat*&lt;/p&gt;
&lt;p&gt;grid用户
进到grid执行runInstaller&lt;/p&gt;
&lt;p&gt;软件更新,勾选第三跳过&lt;/p&gt;
&lt;p&gt;安装并且配置Oracle集群软件,配置Oracle一个独立服务器只安装asm部分相关的功能,升级已经存在的软件,只安装软件
第四个不能选 选第二个&lt;/p&gt;
&lt;p&gt;只要英文
创建dg,选择磁盘组特性创建磁盘
name:griddg	冗余:External选外部冗余	大小:不管		勾选:raw1&lt;/p&gt;
&lt;p&gt;密码:上为用户密码不同,下为相同		--密码太简单会报错提醒
确定组:asmdba,asmoper,asmadmin
确认路径:上为oracle_base,下为oracle_home	oracle_home路径不能为oracle用户的oracle_home路径报错为正常&lt;/p&gt;
&lt;p&gt;--oracle用户负责database软件,oracle_home在oracle_base中
--grid用户负责grid软件,oracle_home不能在oracle_base中&lt;/p&gt;
&lt;p&gt;Fix &amp;amp; Check Again 检查环境,使用脚步
Packager可以不装&lt;/p&gt;
&lt;p&gt;install
76%执行脚步,未执行全部重做	一定要完成成功再做下一步！！！&lt;/p&gt;
&lt;p&gt;成功后创建+ASM实例,创建监听,创建griddg
完成&lt;/p&gt;
&lt;p&gt;crs_stat	查看当前集群资源
资源名字
资源类型
指定资源期望状态
指定资源当前状态&lt;/p&gt;
&lt;p&gt;创建dg为database提高数据存储&lt;/p&gt;
&lt;p&gt;grid用户
asmca
检查dg,点create
name:datadg	冗余:External选外部冗余	勾选:raw2
ok	可视化工具模糊自行摸索找ok&lt;/p&gt;
&lt;p&gt;crs_stat
集群会新增datadg资源
free -m	查看内存&lt;/p&gt;
</content:encoded></item><item><title>Oracle表碎片整理</title><link>https://blog.newworld.help/posts/oracle%E8%A1%A8%E7%A2%8E%E7%89%87%E6%95%B4%E7%90%86/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle%E8%A1%A8%E7%A2%8E%E7%89%87%E6%95%B4%E7%90%86/</guid><description>Oracle 多表碎片回收（降低高水位）存储脚本</description><pubDate>Fri, 20 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;碎片回收
Oracle 多表碎片回收（降低高水位）存储脚本
https://support.enmotech.com/article/2913/search&lt;/p&gt;
&lt;p&gt;脚本功能
由于shrink操作时间较长，并且需要后台常驻不能断开。如果有多张表需要做碎片回收操作。
可以通过如下过程来后台回收碎片。我们仅需在过程中修改需要回收多张表的名称即可。
a.table_name IN (&apos;tablename1&apos;,&apos;tablename2&apos;,&apos;tablename3&apos;)&lt;/p&gt;
&lt;p&gt;注：此脚本用例运行在Oracle 11.2.0.4。&lt;/p&gt;
&lt;p&gt;########################################脚本使用示例########################################
create or replace procedure ETL_PARTITION_shrink is
/&lt;em&gt;清理碎片,回收表空间&lt;/em&gt;/
V_NAMES VARCHAR2(1024);
--V_CS        VARCHAR2(1024);
V_SQL_VALUES       VARCHAR2(4000);
V_SQL_SPACE_VALUES VARCHAR2(4000);
V_SQL_MOVE_VALUES  VARCHAR2(4000);&lt;/p&gt;
&lt;p&gt;V_START_TIME DATE; --开始时间
V_END_TIME   DATE; --结束时间
V_IN_PARAM   VARCHAR2(500); --传入参数
V_COUNT      INTEGER; --记录要处理表中记录数
V_SUCCESS    INTEGER; --记录成功执行的记录数&lt;/p&gt;
&lt;p&gt;CURSOR CUR_BATCH IS
SELECT distinct a.owner,
a.table_name,
a.num_rows,
a.avg_row_len,
round(a.avg_row_len * a.num_rows/1024/1024, 2) real_bytes_MB,
round(b.seg_bytes_mb, 2) seg_bytes_mb ,
(round(b.seg_bytes_mb, 2) - round(a.avg_row_len * a.num_rows/1024/1024, 2) )  GAP,
decode(a.num_rows, 0, 100, (1-round(a.avg_row_len * a.num_rows/1024/1024/b.seg_bytes_mb, 2))*100)||&apos;%&apos; frag_percent
FROM dba_tables a,
( SELECT  owner, segment_name, sum(bytes/1024/1024) seg_bytes_mb
FROM dba_segments
GROUP BY owner, segment_name) b,
dba_segments c
WHERE   a.table_name IN (&apos;tablename1&apos;,&apos;tablename2&apos;,&apos;tablename3&apos;)
AND owner = upper(&apos;owner&apos;) ---此处填入需要收缩表的用户，防止多用户表名相同
AND a.table_name=b.segment_name
AND a.table_name=c.segment_name
AND a.owner=b.owner
AND a.owner not IN (&apos;SYS&apos;, &apos;SYSTEM&apos;, &apos;OUTLN&apos;, &apos;DMSYS&apos;, &apos;TSMSYS&apos;, &apos;DBSNMP&apos;, &apos;WMSYS&apos;, &apos;EXFSYS&apos;, &apos;CTXSYS&apos;, &apos;XDB&apos;, &apos;OLAPSYS&apos;, &apos;ORDSYS&apos;, &apos;MDSYS&apos;, &apos;SYSMAN&apos;)
ORDER BY gap desc;&lt;/p&gt;
&lt;p&gt;BEGIN
V_START_TIME := SYSDATE;&lt;/p&gt;
&lt;p&gt;--需要开关行迁移，不需要重建索引，
--V_NAMES :=&apos;V_SQL_VALUES&apos;;
V_SQL_VALUES := &apos;alter table /&lt;em&gt;+APPEND&lt;/em&gt;/ &apos; || V_NAMES ||&apos; enable row movement nologging parallel 4&apos;;
EXECUTE IMMEDIATE V_SQL_VALUES;&lt;/p&gt;
&lt;p&gt;--V_NAMES :=&apos;V_SQL_SPACE_VALUES&apos;;
V_SQL_SPACE_VALUES := &apos;alter table &apos; || V_NAMES || &apos; shrink space cascade&apos;;
EXECUTE IMMEDIATE V_SQL_SPACE_VALUES;&lt;/p&gt;
&lt;p&gt;--V_NAMES :=&apos;V_SQL_MOVE_VALUES&apos;;
V_SQL_MOVE_VALUES := &apos;alter table &apos; || V_NAMES || &apos; disable row movement noparallel logging&apos;;
EXECUTE IMMEDIATE V_SQL_MOVE_VALUES;&lt;/p&gt;
&lt;p&gt;END ETL_PARTITION_shrink;&lt;/p&gt;
&lt;p&gt;########################################END########################################&lt;/p&gt;
&lt;p&gt;同时可以看到过程中有查询语句，我们可以单独执行查询单张表的碎片率：&lt;/p&gt;
&lt;p&gt;SELECT distinct a.owner,
a.table_name,
a.num_rows,
a.avg_row_len,
round(a.avg_row_len * a.num_rows/1024/1024, 2) real_bytes_MB,
round(b.seg_bytes_mb, 2) seg_bytes_mb ,
(round(b.seg_bytes_mb, 2) - round(a.avg_row_len * a.num_rows/1024/1024, 2) )  GAP,
decode(a.num_rows, 0, 100, (1-round(a.avg_row_len * a.num_rows/1024/1024/b.seg_bytes_mb, 2))*100)||&apos;%&apos; frag_percent
FROM dba_tables a,
( SELECT  owner, segment_name, sum(bytes/1024/1024) seg_bytes_mb
FROM dba_segments
GROUP BY owner, segment_name) b,
dba_segments c
WHERE   a.table_name IN (&apos;&amp;amp;TABALE_NAME&apos;)
AND   a.owner IN upper(&apos;&amp;amp;OWNER&apos;)
AND a.table_name=b.segment_name
AND a.table_name=c.segment_name
AND a.owner=b.owner
AND a.owner not IN (&apos;SYS&apos;, &apos;SYSTEM&apos;, &apos;OUTLN&apos;, &apos;DMSYS&apos;, &apos;TSMSYS&apos;, &apos;DBSNMP&apos;, &apos;WMSYS&apos;, &apos;EXFSYS&apos;, &apos;CTXSYS&apos;, &apos;XDB&apos;, &apos;OLAPSYS&apos;, &apos;ORDSYS&apos;, &apos;MDSYS&apos;, &apos;SYSMAN&apos;)
ORDER BY gap desc;&lt;/p&gt;
&lt;p&gt;我们从REAL_BYTES_MB字段中可以看到统计信息预估的表大小。
SEG_BYTES_MB字段可以看到真实占用的segment 大小。
如果两个值差距比较大（GAP 字段），可以判断表碎片较大做碎片回收更有效果。
同时FRAG_PERCENT值越大证明碎片越大。
25%以上考虑重新整理&lt;/p&gt;
</content:encoded></item><item><title>Oracle体系结构2</title><link>https://blog.newworld.help/posts/oracle%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%842/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%842/</guid><description>alter system checkpoint;	生成检查点（特殊时间点 scn）</description><pubDate>Thu, 05 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Oracle实例进程&lt;/p&gt;
&lt;p&gt;执行
alter system checkpoint;	生成检查点（特殊时间点 scn）
DBWn和LGWR都会工作，在这个时间的之前的脏块都会落盘&lt;/p&gt;
&lt;p&gt;select status from v$instance;	查看当前数据库状态在哪个模式&lt;/p&gt;
&lt;p&gt;数据库启动的第一步读取参数文件
参数文件路径:
/u01/app/oracle/product/10.2.0/db_1/dbs
$ORACLE_HOME/dbs
init+库名.ora	pfile参数文件
spfile+库名.ora	spfile参数文件
orapw+SID	数据库密码文件,存放sys密码文件,其他用户密码保存在数据库,sys远程连接会校验
orapwd file=orapw实例名 password=****** force=y	强制创建文件
告警日志路径
$ORACLE_BASE/diag/rdbms/db_name/SID/trace/alert_SID.log&lt;/p&gt;
&lt;p&gt;创建spfile文件
create spfile from pfile;	默认路径是$ORACLE_HOME/dbs
create pfile=&apos;&apos; from spfile=&apos;&apos;;	指定路径是file=&apos;&apos;
如果在asm中 cp +DATADG/asmdb/spfileasmdb.ora  /tmp/spfileasmdb.ora
spfile优先级高于pfile;&lt;/p&gt;
&lt;p&gt;strings 打印可打印的字符串,可以使用strings spfileasmdb.ora打印pfile文件&lt;/p&gt;
&lt;p&gt;control01.ctl控制文件丢失可以直接根据其他control.ctl关库直接cp复制粘贴改名
alter system set control_files=&apos;路径&apos;,&apos;路径&apos; scope=spfile;
想查看控制文件内容可以对控制文件备份追踪
alter database backup controlfile to trace as &apos;/tmp/comtrol666.log&apos;;
alter system switch logfile;		切换重做日志文件&lt;/p&gt;
&lt;p&gt;show parameter spfile;		查看参数文件没值说明使用pfile启动
show parameter control;		查看控制文件
select name from v$controlfile;	查看控制文件
show parameter name;		查看实例名(instance),库名(db)
select name from v$datafile;		查看数据文件
修改oracle内存	参数文件中*.memory_target=833617920	oracle数据库启动需要占用内存833内存空间(sga+pga)&lt;/p&gt;
&lt;p&gt;desc 表名;		在SQL&amp;gt;命令窗口可以查看表结构&lt;/p&gt;
&lt;p&gt;free -m	查看内存
total		used		free
物理内存		已使用内存	还剩内存&lt;/p&gt;
&lt;p&gt;Oracle文件结构
控制文件中保存数据库中关于日志文件/数据文件/临时表空间文件信息;
控制文件正常才能使oracle数据库正常打开/关闭
所有控制文件大小一致,文件的最后修改时间一致&lt;/p&gt;
&lt;p&gt;cat  /etc/oratab	记录所有实例信息
记录信息分三段	$ORACLE_SID:$ORACLE_HOME:upstart(N/Y)	实例名:数据库路径:是否开机启动&lt;/p&gt;
&lt;p&gt;ps -ef |grep smon	查看运行哪些数据库&lt;/p&gt;
&lt;p&gt;source(可以简写成 . )+oraenv(脚本)	在当前shell执行,声明环境变量&lt;/p&gt;
&lt;p&gt;select * from v$bgprocess where paddr !=&apos;00&apos;;	举例
set linesize 300	一行显示300字符
set pagesize 200	一页显示的行数
$ORACLE_HOME/sqlplus/admin/glogin.sql	配置sqlplus显示
col col_name for 长度;	col设置字段长度,设置长度时需区分字段类型
字符类型	a+长度
数值类型   9(9为占位符)&lt;/p&gt;
&lt;p&gt;show parameter;	查看oracle参数	大概400+参数,总参数有3000+参数是不能直接看的,称为隐含参数
show parameter db_write;	查看DBWn进程数量,建议数量和逻辑cpu数量相同,提高脏块落盘
show parameter sga_target;	ORACLE实例运行时,SGA占用内存空间大小&lt;/p&gt;
&lt;p&gt;修改参数
alter system set 参数=修改值	修改全局生效
alter session set 参数=修改值	仅对当前会话生效
数据类型有布尔型[true(真),false(假)],字符型,数值型
字符串类型的参数修改时需要加引号&lt;/p&gt;
&lt;p&gt;oracle中修改参数时需要定义scope来定义参数修改生效范围,若不指定则默认both生效
scope=both/spfile/memory
both	spfile+memory
spfile	仅针对spfile生效,保证重启生效,当前失效	很多参数都要写
memory	仅针对当前实例生效,保证当前生效,重启失效
alter system set sga_target=700M scope=both;&lt;/p&gt;
&lt;p&gt;SELECT NAME, ISSES_MODIFIABLE as session, ISSYS_MODIFIABLE as system
FROM v$parameter
WHERE NAME IN (&apos;workarea_size_policy&apos;,
&apos;audit_file_dest&apos;,
&apos;sga_target&apos;,
&apos;sga_max_size&apos;);--查看参数是否可以在不同会话生效,&lt;/p&gt;
&lt;p&gt;数据字典特点
oracle自动维护，保存在system01.dbf文件中
数据字典的特征
dba_，all_，user_	开头&lt;/p&gt;
&lt;p&gt;对控制文件进行冗余
alter system set control_files=&apos;控制文件第一份的路径,控制文件第二份的路径&apos; scope=spfile;
关库cp,让检查点一致,文件要chown修改权限
cp 控制文件第一份的路径    控制文件第二份的路径&lt;/p&gt;
&lt;p&gt;archive log list;	查看归档状态
alter database archivelog;	mount状态下开启归档
alter system set log_archive_dest_1=&apos;location=路径&apos;;	本地加路径&lt;/p&gt;
</content:encoded></item><item><title>yum配置</title><link>https://blog.newworld.help/posts/yum%E9%85%8D%E7%BD%AE/</link><guid isPermaLink="true">https://blog.newworld.help/posts/yum%E9%85%8D%E7%BD%AE/</guid><description>基本使用https://www.cnblogs.com/kklinux/p/yum.html</description><pubDate>Wed, 14 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;基本使用https://www.cnblogs.com/kklinux/p/yum.html&lt;/p&gt;
&lt;p&gt;1.进入到指定目录,删除其他配置文件
cd /etc/yum.repos.d
rm -rf *.repo&lt;/p&gt;
&lt;p&gt;2.配置yum,两种只配一种
########配置本地yum仓库
vim local.repo&lt;/p&gt;
&lt;p&gt;[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1&lt;/p&gt;
&lt;p&gt;mount /dev/cdrom /mnt&lt;/p&gt;
&lt;p&gt;########配置网络yum仓库阿里云镜像
cat &amp;gt;  /etc/yum.repos.d/CentOS.repo &amp;lt;&amp;lt;\EOF&lt;/p&gt;
&lt;h1&gt;CentOS-Base.repo&lt;/h1&gt;
&lt;p&gt;[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/7/os/$basearch/
gpgcheck=0&lt;/p&gt;
&lt;p&gt;[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/7/updates/$basearch/
gpgcheck=0&lt;/p&gt;
&lt;p&gt;[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
baseurl=http://mirrors.aliyun.com/centos/7/extras/$basearch/
gpgcheck=0&lt;/p&gt;
&lt;h1&gt;epel.repo&lt;/h1&gt;
&lt;p&gt;[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
gpgcheck=0
EOF&lt;/p&gt;
&lt;p&gt;3.使yum生效
yum clean all # 清除系统所有的yum缓存
yum makeacache # 生成新的yum缓存
yum repolist   #列出yum所有仓库&lt;/p&gt;
&lt;p&gt;########配置网络yum仓库2,中国科学技术大学、中国科学技术大学网络信息中心支持
1.配置/etc/yum.repos.d/CentOS-Base.repo
cat &amp;gt; /etc/yum.repos.d/CentOS-Base.repo &amp;lt;&amp;lt;\EOF
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.cernet.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=0&lt;/p&gt;
&lt;p&gt;[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.cernet.edu.cn/centos/$releasever/updates/$basearch/
gpgcheck=0&lt;/p&gt;
&lt;p&gt;[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.cernet.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=0
EOF&lt;/p&gt;
&lt;p&gt;2.配置/etc/yum.repos.d/epel.repo
cat &amp;gt; /etc/yum.repos.d/epel.repo &amp;lt;&amp;lt;\EOF
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.cernet.edu.cn/epel/7/$basearch
gpgcheck=0
EOF&lt;/p&gt;
&lt;p&gt;3.将$releasever变量改为操作系统版本
sed -i &apos;s/$releasever/7/&apos; CentOS-Base.repo&lt;/p&gt;
</content:encoded></item><item><title>互信脚本1.0</title><link>https://blog.newworld.help/posts/%E4%BA%92%E4%BF%A1%E8%84%9A%E6%9C%AC10/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E4%BA%92%E4%BF%A1%E8%84%9A%E6%9C%AC10/</guid><description>yum install expect</description><pubDate>Thu, 18 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.检查版本安装
expect -v
yum install expect&lt;/p&gt;
&lt;p&gt;2.创建一个脚本 sshtrust.sh，将以上内容写入脚本！&lt;/p&gt;
&lt;p&gt;DEST_USER=$1
PASSWORD=$2
HOSTS_FILE=$3
if [ $# -ne 3 ]; then
echo &quot;Usage:&quot;
echo &quot;$0 remoteUser remotePassword hostsFile&quot;
exit 1
fi
if [ &quot;${DEST_USER}&quot; != &quot;root&quot; ]; then
cd /home/&quot;${DEST_USER}&quot;/ || return
fi&lt;/p&gt;
&lt;p&gt;SSH_DIR=~/.ssh
SCRIPT_PREFIX=./tmp
echo ===========================&lt;/p&gt;
&lt;h1&gt;1. prepare  directory .ssh&lt;/h1&gt;
&lt;p&gt;mkdir $SSH_DIR
chmod 700 $SSH_DIR&lt;/p&gt;
&lt;h1&gt;2. generat ssh key&lt;/h1&gt;
&lt;p&gt;TMP_SCRIPT=$SCRIPT_PREFIX.sh
{
echo &quot;#!/usr/bin/expect&quot;
echo &quot;spawn ssh-keygen -b 1024 -t rsa&quot;
echo &quot;expect &lt;em&gt;key&lt;/em&gt;&quot;
echo &quot;send \r&quot;
} &amp;gt;&amp;gt;$TMP_SCRIPT
if [ -f $SSH_DIR/id_rsa ]; then
{
echo &quot;expect &lt;em&gt;verwrite&lt;/em&gt;&quot;
echo &quot;send y\r&quot;
} &amp;gt;&amp;gt;$TMP_SCRIPT
fi
{
echo &quot;expect &lt;em&gt;passphrase&lt;/em&gt;&quot;
echo &quot;send \r&quot;
echo &quot;expect *again:&quot;
echo &quot;send \r&quot;
echo &quot;interact&quot;
} &amp;gt;&amp;gt;$TMP_SCRIPT&lt;/p&gt;
&lt;p&gt;chmod +x $TMP_SCRIPT&lt;/p&gt;
&lt;p&gt;/usr/bin/expect $TMP_SCRIPT
rm -rf $TMP_SCRIPT&lt;/p&gt;
&lt;h1&gt;3. generat file authorized_keys&lt;/h1&gt;
&lt;p&gt;cat $SSH_DIR/id_rsa.pub &amp;gt;&amp;gt;$SSH_DIR/authorized_keys&lt;/p&gt;
&lt;h1&gt;4. chmod 600 for file authorized_keys&lt;/h1&gt;
&lt;p&gt;chmod 600 $SSH_DIR/authorized_keys
echo ===========================&lt;/p&gt;
&lt;h1&gt;5. copy all files to other hosts&lt;/h1&gt;
&lt;p&gt;for ip in $(&amp;lt;&quot;${HOSTS_FILE}&quot;); do
if [ &quot;x$ip&quot; != &quot;x&quot; ]; then
echo -------------------------
TMP_SCRIPT=${SCRIPT_PREFIX}.$ip.sh
# check known_hosts
val=$(ssh-keygen -F &quot;${ip}&quot;)
if [ &quot;x$val&quot; == &quot;x&quot; ]; then
echo &quot;$ip not in $SSH_DIR/known_hosts, need to add&quot;
val=$(ssh-keyscan &quot;${ip}&quot; 2&amp;gt;/dev/null)
if [ &quot;x$val&quot; == &quot;x&quot; ]; then
echo &quot;ssh-keyscan $ip failed!&quot;
else
echo &quot;${val}&quot; &amp;gt;&amp;gt;$SSH_DIR/known_hosts
fi
fi
echo &quot;copy $SSH_DIR to $ip&quot;
{
echo &quot;#!/usr/bin/expect&quot;
echo &quot;spawn scp -r  $SSH_DIR $DEST_USER@$ip:~/&quot;
echo &quot;expect &lt;em&gt;assword&lt;/em&gt;&quot;
echo &quot;send $PASSWORD\r&quot;
echo &quot;interact&quot;
} &amp;gt;&quot;$TMP_SCRIPT&quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  chmod +x &quot;$TMP_SCRIPT&quot;

  /usr/bin/expect &quot;$TMP_SCRIPT&quot;
  rm -rf &quot;$TMP_SCRIPT&quot;
  echo &quot;copy done.&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;done&lt;/p&gt;
&lt;h1&gt;6. date ssh&lt;/h1&gt;
&lt;p&gt;for ip in $(&amp;lt;&quot;$HOSTS_FILE&quot;); do
if [ &quot;x$ip&quot; != &quot;x&quot; ]; then
{
echo &quot;#!/usr/bin/expect&quot;
echo &quot;spawn ssh $DEST_USER@$ip date&quot;
echo &quot;expect &lt;em&gt;yes&lt;/em&gt;&quot;
echo &quot;send yes\r&quot;
echo &quot;interact&quot;
} &amp;gt;&quot;$TMP_SCRIPT&quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  chmod +x &quot;$TMP_SCRIPT&quot;

  /usr/bin/expect &quot;$TMP_SCRIPT&quot;
  rm -rf &quot;$TMP_SCRIPT&quot;
  echo &quot;copy done.&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;done&lt;/p&gt;
&lt;p&gt;3.支持多台主机进行互信，创建一个 sshhostList.cfg 文件，将需要配置互信的主机IP写入：
vi sshhostList.cfg&lt;/p&gt;
&lt;p&gt;10.211.55.100
10.211.55.101
10.211.55.102
复制&lt;/p&gt;
&lt;p&gt;4.执行如下命令互信：
sh sshtrust.sh 互信用户 互信用户密码 sshhostList.cfg&lt;/p&gt;
&lt;p&gt;5.修改 SSH 服务的配置文件 /etc/ssh/sshd_config 。这个文件定义了 SSH 服务的配置。
AllowUsers 参数可以用来限制哪些用户被允许通过 SSH 登录到系统。在你的配置中， admin， root， oracle 和 grid 这四个用户被允许登录。
Port 参数定义了 SSH 服务监听的端口，你这里设置的是22，这是 SSH 的默认端口。
以下是如何编辑并保存 /etc/ssh/sshd_config 文件的步骤：&lt;/p&gt;
&lt;p&gt;vi /etc/ssh/sshd_config&lt;/p&gt;
&lt;p&gt;AllowUsers admin root oracle grid
Port 22&lt;/p&gt;
&lt;p&gt;sudo systemctl restart sshd&lt;/p&gt;
</content:encoded></item><item><title>DG搭建删除</title><link>https://blog.newworld.help/posts/dg%E6%90%AD%E5%BB%BA%E5%88%A0%E9%99%A4/</link><guid isPermaLink="true">https://blog.newworld.help/posts/dg%E6%90%AD%E5%BB%BA%E5%88%A0%E9%99%A4/</guid><description>shutdown immediate</description><pubDate>Sun, 07 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;#备库删除命令
方法一：
shutdown immediate
startup mount
alter system enable restricted session;  --只有restricted session 权限的用户可以登录数据库，已存在的session不会中断
drop database;&lt;/p&gt;
&lt;p&gt;方法二：（asmcmd删除数据文件，删除前先关闭数据库）
shutdown immediately
arch_dg
rm -rf ARCHIVELOG CONTROLFILE ONINELOG
data_dg
rm -rf CONTROLFILE DATAFILE ONINELOG TEMPFILE&lt;/p&gt;
&lt;p&gt;参数文件要放到asm的话，要建到asm中，并在$ORACLE_HOME/dbs里创建init$ORACLE_SID.ora,设置spfile参数，删除spfile$ORACLE_SID.ora及spfile.ora文件&lt;/p&gt;
&lt;p&gt;#修改数据库参数
主库参数：
show parmaeter unique
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG=&apos;DG_CONFIG=(ogg,dgogg)&apos; SCOPE=both; --主备数据库唯一名&lt;/p&gt;
&lt;p&gt;ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=&apos;SERVICE=DGOGGdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dgogg&apos;  SCOPE=both;
服务名=备库的tns                                                              备库唯一名
location指定本地路径，service为dataguard备库的service name
可通过查询V$ARCHIVE_DEST 视图来查看具体的属性设置
该参数必须和LOG_ARCHIVE_DEST_STATE_n一一对应&lt;/p&gt;
&lt;p&gt;ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1 = { enable | defer | alternate }  SCOPE=both;
取值范围:enable defer alternate  默认值:enable
enable 指定对应的归档日志路径是生效的，这是默认值
defer 指定对应的归档日志路径是暂时失效的，使用需重新开启(enable)
alternate 指定对应的归档日志路径是备用的，当另外路径失效时启用该路径
设置LOG_ARCHIVE_DEST_n 时相应的LOG_ARCHIVE_DEST_STATE_n也需设置
通过 V$ARCHIVE_DES视图查看该属性值&lt;/p&gt;
&lt;p&gt;ALTER SYSTEM SET FAL_CLIENT=OGGdg SID=&apos;&lt;em&gt;&apos; SCOPE=both;   --主库tns名
ALTER SYSTEM SET FAL_SERVER=DGOGGdg SID=&apos;&lt;/em&gt;&apos; SCOPE=both; --备库tns名，可以填多个&lt;/p&gt;
&lt;p&gt;ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=&apos;AUTO&apos; SID=&apos;*&apos; SCOPE=both; --主库创建新的数据文件，备库自动创建该文件&lt;/p&gt;
&lt;p&gt;磁带库起库
vim rman_recover.sh
#!/usr/bin/ksh
echo -------------------------begin---------------------------
date
rman target sys/123456@OGGdg auxiliary sys/123456@DGOGG_rman  &amp;lt;&amp;lt;EOF
run {
allocate channel prmy1 device type disk connect &apos;sys/123456@OGGdg&apos;;   --并行
allocate channel prmy2 device type disk connect &apos;sys/123456@OGGdg&apos;;
...
allocate channel prmy10 device type disk connect &apos;sys/123456@OGGdg&apos;;
allocate auxiliary channel stdy1 device type disk;	--并行
allocate auxiliary channel stdy2 device type disk;
...
allocate auxiliary channel stdy10 device type disk;
duplicate target database for standby from active database nofilenamecheck;
sql channel prmy1 &quot;alter system archive log current&quot;;
sql channel stdy1 &quot;alter database recover managed standby database disconnect&quot;;
release channel prmy1;
release channel prmy2;
...
release channel prmy10;
release channel stdy1;
release channel stdy2;
...
release channel stdy10;
}
exit;
EOF
sleep 90
sqlplus / as sysdba &amp;lt;&amp;lt;EOF
alter database recover managed standby database cancel;
alter database add standby logfile thread 2 group 31 &apos;+DATA_DG&apos; size 1024m;
alter database add standby logfile thread 2 group n &apos;+DATA_DG&apos; size 1024m;
alter database open;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
exit
EOF
date
echo &quot;-----------------------------END---------------------------&quot;&lt;/p&gt;
&lt;p&gt;执行脚本
chmod +x rman_recover.sh
nohup rman_recover.sh &amp;gt; rman_recover.log &amp;amp;
tail -2000f recover.log&lt;/p&gt;
</content:encoded></item><item><title>linux下rman脚本</title><link>https://blog.newworld.help/posts/linux%E4%B8%8Brman%E8%84%9A%E6%9C%AC/</link><guid isPermaLink="true">https://blog.newworld.help/posts/linux%E4%B8%8Brman%E8%84%9A%E6%9C%AC/</guid><description>mkdir /oradata/rman</description><pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;rman备份
-1.进入linux系统175(要备份的目标服务器)&lt;/p&gt;
&lt;p&gt;-2.切换到oracle用户下
su - oracle&lt;/p&gt;
&lt;p&gt;-3.创建一个放rman的目录
mkdir /oradata/rman&lt;/p&gt;
&lt;p&gt;-4.创建一个查看rman备份日志的目录
mkdir /oradata/rman/rman_log&lt;/p&gt;
&lt;p&gt;-4.创建一个存放rman备份文件的目录
mkdir /oradata/rman/rman_backup&lt;/p&gt;
&lt;p&gt;-5.连接rman
rman target  /&lt;/p&gt;
&lt;p&gt;-6.查看rman所能涉及到的相关参数
show all
-6.1.输入命令:configure retention policy to redundancy 3; #策略配置为冗余3
-6.2.输入命令:configure controlfile autobackup on;&lt;/p&gt;
&lt;p&gt;-7.退出
exit&lt;/p&gt;
&lt;p&gt;-8.创建shell脚步
vi /oradata/rman/full.sh&lt;/p&gt;
&lt;p&gt;#!/bin/bash
. ~/.bash_profile
export nls_date_format=&apos;yyyy-mm-dd hh24:mi:ss&apos;&lt;/p&gt;
&lt;p&gt;echo &apos;----------------------------------&apos;&amp;gt;&amp;gt;/home/oracle/rman/rman_full.log
echo &apos;start full backup at &apos;&lt;code&gt;date +%y-%m-%d:%h:%m:%s&lt;/code&gt; &amp;gt;&amp;gt;/home/oracle/rman/rman_full.log
echo &apos;----------------------------------&apos;&amp;gt;&amp;gt;/home/oracle/rman/rman_full.log&lt;/p&gt;
&lt;p&gt;rman target / nocatalog log /home/oracle/rman/rman_full.log append&amp;lt;&amp;lt;eof
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
crosscheck backup;
delete noprompt expired backup;
crosscheck archivelog all;
delete noprompt expired archivelog all;
backup as compressed backupset database format &apos;/home/oracle/rman/full_%d_%t_%s_%p&apos;;
sql &apos;alter system archive log current&apos;;
sql &apos;alter system archive log current&apos;;
backup archivelog all delete input format &apos;/home/oracle/rman/arch_%d_%t_%s_%p&apos;;
backup current controlfile format &apos;/home/oracle/rman/ctl_%d_%t_%s_%p&apos;;
backup spfile format &apos;/home/oracle/rman/%d_%u.spfile&apos; ;
report obsolete;
delete noprompt obsolete;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
eof&lt;/p&gt;
&lt;p&gt;-9.验证,再打开一个窗口进到175
tail -f /oradata/rman/rman_log/rman_full.log&lt;/p&gt;
&lt;p&gt;-10.执行脚步
sh /oradata/rman/full.sh   &amp;amp;&lt;/p&gt;
&lt;p&gt;验证
第9步或完成脚本后查看/oradata/rman/rman_log/rman_full.log文件&lt;/p&gt;
&lt;p&gt;回退
无更改操作,不需要回退&lt;/p&gt;
&lt;p&gt;delete expired删除的是那些本来RMAN以为存在但是实际上在磁盘或者磁带上已经被删除了的信息，删除的只是RMAN资料库中的记录；
delete obsolete则删除旧于备份保留策略定义的备份数据同时也更新RMAN资料库以及控制文件。
######################################部署定时需要的脚本######################################&lt;/p&gt;
&lt;p&gt;1.编辑/home/oracle/backup/backup.sh脚本
vi /home/oracle/backup/backup.sh&lt;/p&gt;
&lt;p&gt;if [ $# -eq 0]
then
WORKDATE=&lt;code&gt;date +&apos;%Y-%m-%d&apos;&lt;/code&gt;
else
WORKDATE=$1
fi&lt;/p&gt;
&lt;p&gt;echo &quot;Begin Backup---------------------------------&quot;
date
cd
--若为aix系统,则是. ~/.profile
. ~/.bash_profile
--若为远程备份,则是rman target /@需要备份的库的tns catalog /@本机tns cmdfile /home/oracle/backup/backup.sql
--该方法适用于从远程获取其他数据库rman备份文件
rman target / cmdfile /home/oracle/backup/backup.sql
RETCODE=$?
date
if [ &quot;$RETCODE&quot;=&quot;0&quot; ]
then
echo &quot;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;end backup successfully&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&quot;
else
echo &quot;#######end backup in error! please check the rman log!########&quot;
fi&lt;/p&gt;
&lt;p&gt;2.编辑/home/oracle/backup/backup.sql脚本
vi /home/oracle/backup/backup.sql&lt;/p&gt;
&lt;p&gt;run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
delete noprompt archivelog until time &apos;sysdate-7&apos;;
backup as compressed backupset database format &apos;/home/oracle/rman/DB_%d_%U_%T.bak&apos;;
sql &apos;alter system switch logfile&apos;;
sql &apos;alter system switch logfile&apos;;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
change archivelog all crosscheck;
run{
allocate channel ch1 device type disk;
backup current controlfile format &apos;/home/oracle/rman/CTL_%d_%U_%T.bak&apos;;
release channel ch1;
}
run{
allocate channel dev1 type disk;
allocate channel dev2 type disk;
sql &apos;alter system checkpoint&apos;;
sql &apos;alter system switch logfile&apos;;
backup as compressed backupset archivelog all delete input format &apos;/home/oracle/rman/LOG_%d_%U_%T.bak&apos;;
release channel dev1;
release channel dev2;
}
change archivelog all crosscheck;
delete noprompt archivelog until time &apos;sysdate-3&apos;;
change archivelog all crosscheck;
crosscheck backup;
delete expired backup;
report obsolete;
delete obsolete;&lt;/p&gt;
&lt;p&gt;3.授权执行,加入定时任务设置晚上10点,追踪日志
nohup /home/oracle/backup/backup.sh &amp;gt;&amp;gt; backup.log &amp;amp;&lt;/p&gt;
&lt;p&gt;crontab -e&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;22 * * * /home/oracle/backup/backup.sh &amp;gt;&amp;gt; backup.log&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;tail -f backup.log&lt;/p&gt;
&lt;p&gt;##############################################脚本报错处理##############################################
执行delete obsolete;时报错,原因是在执行show all;的时候,
CONFIGURE SNAPSHOT CONTROLFILE NAME TO &apos;/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_db1.f&apos;; # default
以上控制文件不存在,重新设置控制文件即可&lt;/p&gt;
&lt;p&gt;RMAN-03009: failure of delete command on ORA_DISK_4 channel at 11/01/2022 13:55:45
ORA-19606: Cannot copy or restore to snapshot control file
或者
RMAN-03009: failure of delete command on ORA_DISK_4 channel at 11/01/2022 13:55:45
ORA-00245: control file backup failed; target is likely on a local file system&lt;/p&gt;
&lt;p&gt;解决办法：重建 snapshot controlfile文件&lt;/p&gt;
&lt;p&gt;1、重命名SNAPSHOT控制文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RMAN&amp;gt; configure snapshot controlfile name TO &apos;/u01/app/oracle/product/11.2.0/dbs/snapcf_aps.f_bak&apos;; # default
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;RMAN&amp;gt; backup tablespace system tag=system_tbs_bak;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2、crosscheck controlfilecopy快照控制文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RMAN&amp;gt; crosscheck controlfilecopy &apos;/u01/app/oracle/product/11.2.0/dbs/snapcf_aps.f&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3、删除过期controlfilecopy快照控制文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RMAN&amp;gt; delete expired controlfilecopy &apos;/u01/app/oracle/product/11.2.0/dbs/snapcf_aps.f&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4、配置默认快照控制文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RMAN&amp;gt; configure snapshot controlfile name clear;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;还有一种可能:rac 环境，控制文件快照备份设置到单节点本地导致其他实例无法写入快照文件
将控制文件快照备份的位置更改到共享存储ASM磁盘位置即可&lt;/h2&gt;
&lt;p&gt;ORACLE---ORA-19606(RMAN删除obsolete报错)
https://blog.51cto.com/u_14286115/5194500&lt;/p&gt;
</content:encoded></item><item><title>My Enmo Support - 云和恩墨服务平台</title><link>https://blog.newworld.help/posts/my-enmo-support-%E4%BA%91%E5%92%8C%E6%81%A9%E5%A2%A8%E6%9C%8D%E5%8A%A1%E5%B9%B3%E5%8F%B0/</link><guid isPermaLink="true">https://blog.newworld.help/posts/my-enmo-support-%E4%BA%91%E5%92%8C%E6%81%A9%E5%A2%A8%E6%9C%8D%E5%8A%A1%E5%B9%B3%E5%8F%B0/</guid><description>MES平台服务_MySQL巡检工具</description><pubDate>Sun, 09 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;MES平台服务_MySQL巡检工具
介绍
MES平台服务 mysql巡检工具，分为两个部分：
1，mysql.sh脚本用于在linux系统上采集数据库巡检数据。
2，mysql inspection_1.0.exe程序用于在windows系统上生成word版的巡检报告。&lt;/p&gt;
&lt;p&gt;应用此工具，可以对主机，数据库需要巡检的信息进行一次性采集，并快速生成包含采集信息，关键参数说明和参数是否符合最佳实践判断的文档，方便运维人员在此基础上制作完整可交付的巡检报告。&lt;/p&gt;
&lt;p&gt;使用说明
1，采集数据
mysql.sh 为在数据库主机上执行的采集信息脚本。
将mysql.sh拷贝到需要进行巡检mysql 数据库的linux主机上，然后执行，执行完成后会在当前目录生成一个以mysql 数据库名，ip 和日期拼接成的txt文件，例如:mysqldb01_192.168.100.200_20230607102706.txt，即为采集结果。&lt;/p&gt;
&lt;p&gt;采集脚本执行命令为：
sh /opt/scripts/mysql.sh -excmysql /opt/idc/mysql8.0/bin/mysql -dbhost 192.168.100.201 -dbport 8032 -dbuser dbadmin -pass 123456&lt;/p&gt;
&lt;p&gt;参数说明：
-excmysql mysql 安装目录
-dbhost 主机ip
-dbport mysql端口
-dbuser 登录数据库的用户
-pass 用户密码&lt;/p&gt;
&lt;p&gt;巡检内容说明：
主机信息：&lt;/p&gt;
&lt;p&gt;主机名
内核版本
操作系统
CPU核心数
主机内存
内存使用
总SWAP
SWAP使用
数据库类型
架构
数据库IP
数据库端口
数据库版本
内存使用情况
cpu使用情况
resource limit
limits.conf
swap method
io scheduler
disk mount
my.cnf detail&lt;/p&gt;
&lt;p&gt;数据库信息：&lt;/p&gt;
&lt;p&gt;数据库关键状态信息
数据库关键参数信息
replication info
非innodb表
无主键表
非utf8的表
分区表
自增键使用率
db size
data free size
innodb 信息中的 LATEST DETECTED DEADLOCK&lt;/p&gt;
&lt;p&gt;2，生成报告
在windows系统上，双击执行mysql inspection_1.0.exe，会弹出选择框，选择mysql.sh采集的元数据txt文件，点击打开。&lt;/p&gt;
&lt;p&gt;然后会根据采集内容，在当前目录生成一份mysql巡检报告。&lt;/p&gt;
</content:encoded></item><item><title>参数管理</title><link>https://blog.newworld.help/posts/%E5%8F%82%E6%95%B0%E7%AE%A1%E7%90%86/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%8F%82%E6%95%B0%E7%AE%A1%E7%90%86/</guid><description>ps -ef|grep dm.ini|grep -v grep</description><pubDate>Wed, 22 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;官档:
优化参数
https://eco.dameng.com/document/dm/zh-cn/ops/performance-optimization.html
所有参数
https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage&lt;/p&gt;
&lt;p&gt;1.备份参数文件
修改参数前，先备份参数文件
ps -ef|grep dm.ini|grep -v grep
cd /dm8_data/rural
cp dm.ini dm.ini_bak_&lt;code&gt;date +%Y%m%d%H%M%S&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;2.查询参数
select name,type,value,default_value,isdefault from v$parameter
where name in
(
&apos;MEMORY_POOL&apos;,
&apos;BUFFER&apos;,
&apos;PWD_POLICY&apos;,
&apos;SORT_BUF_SIZE&apos;,
&apos;MAX_SESSIONS&apos;,
&apos;TEMP_SPACE_LIMIT&apos;,
&apos;CALC_AS_DECIMAL&apos;,
&apos;RLOG_BUF_SIZE&apos;,
&apos;DICT_BUF_SIZE&apos;,
&apos;CACHE_POOL_SIZE&apos;,
&apos;GLOBAL_STR_CASE_SENSITIVE&apos;,
&apos;GLOBAL_CHARSET&apos;
) order by type,name;&lt;/p&gt;
&lt;p&gt;或&lt;/p&gt;
&lt;p&gt;SELECT SF_GET_CASE_SENSITIVE_FLAG();
SELECT CASE_SENSITIVE();&lt;/p&gt;
&lt;p&gt;3.参数类型说明
1&amp;gt;手动（READ ONLY）参数：
在数据库创建成功后无法修改。&lt;/p&gt;
&lt;p&gt;2&amp;gt;静态（IN FILE）参数：
只能通过修改 DM.INI 文件进行修改，修改后重启服务器才能生效，为系统级参数，生效后会影响所有的会话。&lt;/p&gt;
&lt;p&gt;3&amp;gt;动态（SYS 和 SESSION）参数：
可在 DM.INI 文件和内存同时修改，修改后即时生效。&lt;/p&gt;
&lt;p&gt;其中：
SYS 为系统级参数，修改后会影响所有的会话；
SESSION 为会话级参数，服务器运行过程中被修改时，之前创建的会话不受影响，只有新创建的会话使用新的参数值。&lt;/p&gt;
&lt;p&gt;##########################################修改参数##########################################&lt;/p&gt;
&lt;p&gt;修改参数方式一：脚本调整
上传脚本(达梦官网-运维指南-单机安装部署-实例参数优化调整)AutoParaAdj.sql
参考参数优化部分&lt;/p&gt;
&lt;p&gt;修改参数方式二：手动调整&lt;/p&gt;
&lt;p&gt;1.修改SYS/SESSION类型参数
###SORT_BUF_SIZE由20改成512
###ALTER SYSTEM SET &apos;SORT_BUF_SIZE&apos;=512 BOTH;
###TEMP_SPACE_LIMIT由0改成20480
ALTER SYSTEM SET &apos;TEMP_SPACE_LIMIT&apos;=20480 BOTH;&lt;/p&gt;
&lt;p&gt;2.修改IN FILE类型参数
修改dm.ini参数文件&lt;/p&gt;
&lt;p&gt;cd /dm8/data/db_name
cat dm.ini|grep -w -E &apos;MEMORY_POOL|BUFFER|MAX_SESSIONS&apos;
vi dm.ini
MEMORY_POOL由500改成2048
BUFFER由1000改成20480
MAX_SESSIONS由10000改成3000
CALC_AS_DECIMAL由0改成1
RLOG_BUF_SIZE由1024改成2048
DICT_BUF_SIZE由50改成1024
CACHE_POOL_SIZE由100改成2048&lt;/p&gt;
&lt;p&gt;3.重启实例生效(root用户)
systemctl status DmServiceCJC.service
systemctl stop DmServiceCJC.service
systemctl start DmServiceCJC.service&lt;/p&gt;
</content:encoded></item><item><title>MySQL命令</title><link>https://blog.newworld.help/posts/mysql%E5%91%BD%E4%BB%A4/</link><guid isPermaLink="true">https://blog.newworld.help/posts/mysql%E5%91%BD%E4%BB%A4/</guid><description>mysql -uroot -p -h127.0.0.1 -P3306</description><pubDate>Tue, 14 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;mysql命令&lt;/p&gt;
&lt;p&gt;1.登陆
#-u用户 root
mysql命令&lt;/p&gt;
&lt;p&gt;1.登陆
#-u用户 root
#-p密码 不输入则交互输入密码
#-h主机ip
#-P端口号
mysql -uroot -p -h127.0.0.1 -P3306
#免密码登陆
mysql_config_editor set --login-path=root --user=root  --host=127.0.0.1 --port=3306 -p
mysql --login-path=root -A&lt;/p&gt;
&lt;p&gt;2.创建数据库
CREATE DATABASE &apos;test&apos; CHARACTER SET &apos;utf8&apos; COLLATE &apos;utf8_general_ci&apos;;&lt;/p&gt;
&lt;p&gt;#CREATE DATABASE oracle：　　　  代表的是创建数据库 oracle。
#DEFAULT CHARACTER SET utf8 ：  代表的是将该库的默认编码格式设置为 utf8 格式。
#COLLATE utf8_general_ci ：　　 代表的是数据库校对规则.分为三部分，分别为数据库字符集、解释不明白、区分大小写。&lt;/p&gt;
&lt;p&gt;#utf8_bin将字符串中的每一个字符用二进制数据存储，区分大小写。
#utf8_genera_ci不区分大小写，ci为case insensitive的缩写，即大小写不敏感。
#utf8_general_cs区分大小写，cs为case sensitive的缩写，即大小写敏感。&lt;/p&gt;
&lt;p&gt;3.创建用户,授权(用户密码需要加引号)
#grant 权限 on 数据库名.* to 用户名@&apos;%&apos; identified by &apos;密码&apos;
#写identified by &apos;密码&apos;会修改密码
如:
create user &apos;test&apos;@&apos;%&apos; identified by &apos;123123&apos;;
grant all on test.* to &apos;test&apos;@&apos;%&apos;;
#查看用户权限
show grants for &apos;用户名&apos;@&apos;%&apos;;&lt;/p&gt;
&lt;p&gt;权限
ALTER ROUTINE 	             编辑或删除存储过程
CREATE ROUTINE 	             创建存储过程
EXECUTE			             运行存储过程
all				             全部权限
select,insert,update,delete  增删改查
create,alter,drop,index      创建,控制,删除,索引&lt;/p&gt;
&lt;p&gt;create,alter用户报错ERROR 1396
授权用户报错ERROR 1410创建用户的时候没指定ip,create user &apos;test&apos;@&apos;%&apos; identified by &apos;123123&apos;;
查看用户权限ERROR 1141创建用户的时候没指定ip,create user &apos;test&apos;@&apos;%&apos; identified by &apos;123123&apos;;&lt;/p&gt;
&lt;p&gt;授权如下:
GRANT CREATE, ALTER, DROP, INDEX, CREATE TEMPORARY TABLES ON &lt;em&gt;.&lt;/em&gt; TO &apos;edpusr&apos;@&apos;%&apos;;
GRANT SELECT,INSERT,UPDATE,DELETE ON &lt;em&gt;.&lt;/em&gt; TO &apos;edpusr&apos;@&apos;%&apos;;
GRANT ALTER ROUTINE,CREATE ROUTINE,EXECUTE ON &lt;em&gt;.&lt;/em&gt; TO &apos;edpusr&apos;@&apos;%&apos;;&lt;/p&gt;
&lt;p&gt;4.修改密码
update mysql.user set authentication_string=&apos;新密码&apos; where user=&apos;用户名&apos;;
alter user 用户名@&apos;%&apos; identified by &quot;密码&quot;;
#命令刷新权限
flush privileges;&lt;/p&gt;
&lt;p&gt;5.在操作系统添加mysql vip
ifconfig eth0:1 vip netmask xx.xx.xx.xx broadcast xx.xx.xx.xx up&lt;/p&gt;
&lt;p&gt;ip a add 192.168.1.11/23 dev eth0:1  新增一个别名
ip a del 192.168.1.11/24 dev eth0:1  删除一个别名&lt;/p&gt;
&lt;p&gt;6.常用操作
#查看数据库mysql的用户信息
desc mysql.user;
#查看数据库插件路径
show variables like &apos;%plugin_dir%&apos;;
#查看数据库目录路径
show variables like&apos;%datadir%&apos;;
#查看所有进程
show processlist;
#在从库查看主从信息
show slave status \G;
#切binlog日志
flush binary logs;
查看binlog日志
show binary logs;&lt;/p&gt;
&lt;p&gt;7.数据库改名
1&amp;gt;.要改的名
create database 新库名
2&amp;gt;.旧库表迁移到新库(只修改中文部分)
select CONCAT(&apos;RENAME TABLE &apos;,TABLE_SCHEMA,&apos;.&apos;,TABLE_NAME,&apos; to &apos;, &apos;新库名.&apos;,TABLE_NAME,&apos;;&apos;)
from information_schema.&lt;code&gt;TABLES&lt;/code&gt;
where TABLE_SCHEMA = &apos;旧库名&apos;;
3&amp;gt;.给新库库下用户重新授权权限
show grants for &apos;旧库名的用户名&apos;@&apos;%&apos;;&lt;/p&gt;
&lt;p&gt;8.忘记mysql密码
1&amp;gt;.关闭mysql实例
servic mysqld stop&lt;/p&gt;
&lt;p&gt;2&amp;gt;.启动使用--skip-grant-tables参数,跳过权限验证
mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables &amp;gt; /tmp/mysql_start.log &amp;amp;&lt;/p&gt;
&lt;p&gt;3&amp;gt;.mysql连接,使用update方式修改密码
mysql
update mysql.user set authentication_string=password(&apos;123123&apos;)
where user = &apos;root&apos; host = &apos;localhost&apos;;
flush privileges;&lt;/p&gt;
&lt;p&gt;4&amp;gt;.重启数据库
mysqladmin -uroot -p123123 shutdown
mysqld_safe --defaults-file=/etc/my.cnf &amp;gt; /tmp/mysql_start.log &amp;amp;&lt;/p&gt;
&lt;p&gt;#相关报错
#下面是存储过程不能查看报错
user does not have access to metadata required to determine stored procedure
#增加执行存储过程权限,MySQL8之前的版本需要执行
#mysql早期版本需要执行flush privileges;刷新授权
GRANT SELECT ON mysql.proc TO &apos;user&apos;@&apos;%&apos;;
flush privileges;&lt;/p&gt;
&lt;p&gt;#执行Function的访问权限
set global log_bin_trust_function_creators=true;
flush privileges;&lt;/p&gt;
&lt;p&gt;5.在线参数修改&lt;/p&gt;
&lt;p&gt;1&amp;gt;.wait_timeout：连接空闲超时时间。
#与服务器端无交互状态的连接，直到被服务器端强制关闭而等待的时间。可以认为是服务器端连接空闲的时间，空闲超过这个时间将自动关闭。&lt;/p&gt;
&lt;p&gt;2&amp;gt;.max_prepared_stmt_count 参数限制了同一时间在mysqld上所有session中prepared 语句的上限。
#它的取值范围为“0 – 1048576”，默认为16382。
#mysql对于超出max_prepared_stmt_count的prepare语句就会报错&lt;/p&gt;
&lt;p&gt;3&amp;gt;.执行Function的访问权限
#当二进制日志启用后，这个变量就会启用。它控制是否可以信任存储函数创建者，不会创建写入二进制日志引起不安全事件的存储函数。
#如果设置为0（默认值），用户不得创建或修改存储函数，除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。
#设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。
#如果变量设置为1，MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建&lt;/p&gt;
&lt;p&gt;set global wait_timeout=28800;
set global max_prepared_stmt_count = 200000;
set global log_bin_trust_function_creators=true;&lt;/p&gt;
&lt;p&gt;#下面是Function无访问权限报错
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you &lt;em&gt;might&lt;/em&gt; want to use the less safe log_bin_trust_function_creators variable)&lt;/p&gt;
&lt;p&gt;#下面是max_prepared_stmt_count超出报错
Can’t create more than max_prepared_stmt_count statements (current value: 16382)”错误。&lt;/p&gt;
&lt;p&gt;6.mysql
正确的写法:
alter table t1 modify state varchar(22) not null default &apos;&apos; comment &apos;产品状态&apos;;&lt;/p&gt;
&lt;p&gt;错误的写法:
alter table t1 modify state varchar(22) connect &apos;产品状态&apos; //此操作会讲not null default &apos;&apos;信息清掉&lt;/p&gt;
&lt;p&gt;这种问题会发生在mysql,tidb中,需要特别注意,oracle中则没有这种问题.&lt;/p&gt;
&lt;p&gt;7.SHOW CREATE TABLE语句无法使用
修改参数
set SQL_QUOTE_SHOW_CREATE=0;
或
mysql -uroot -e &apos;SET SQL_QUOTE_SHOW_CREATE=0; use test; show create table test&apos;;
mysql -e &apos;use test; show create table test \G&apos; | tr -d &apos;&lt;code&gt;&apos;; mysql -e &apos;use test; show create table test \G&apos; | sed -e &apos;s/&lt;/code&gt;//g&apos;;
https://blog.csdn.net/aosica321/article/details/53433677&lt;/p&gt;
</content:encoded></item><item><title>aix&amp;linux华为存储加盘</title><link>https://blog.newworld.help/posts/aix-linux%E5%8D%8E%E4%B8%BA%E5%AD%98%E5%82%A8%E5%8A%A0%E7%9B%98/</link><guid isPermaLink="true">https://blog.newworld.help/posts/aix-linux%E5%8D%8E%E4%B8%BA%E5%AD%98%E5%82%A8%E5%8A%A0%E7%9B%98/</guid><description>​​字段​​	​​            解释​​</description><pubDate>Thu, 25 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;​​字段​​	​​            解释​​
​​State​​	            磁盘组挂载状态（MOUNTED 表示已挂载，UNMOUNTED 表示未挂载）
​​Type​​	            冗余级别：&amp;lt;br&amp;gt; - EXTERNAL（依赖外部存储冗余）&amp;lt;br&amp;gt; - NORMAL（双副本镜像）&amp;lt;br&amp;gt; - HIGH（三副本镜像）
​​Rebal​​	            是否正在重平衡（Y/N）
​​Sector​​	            物理磁盘扇区大小（单位：字节）
​​Logical_Sector​​	    逻辑扇区大小（单位：字节）
​​Block​​	            ASM 元数据块大小（单位：字节）
​​AU​​	                分配单元大小（单位：字节）
​​Total_MB​​	        磁盘组总容量（单位：MB）
​​Free_MB​​	        ​​    当前物理空闲空间​​（单位：MB）
​​Req_mir_free_MB​​	    因冗余策略需预留的保护空间（单位：MB）
​​Usable_file_MB​​	​​    考虑冗余后实际可用空间​​（单位：MB）
​​Offline_disks​​	    离线磁盘数量
​​Voting_files​​	    是否包含集群投票文件（Y/N）
​​Name​​	            磁盘组名称
#######################################################aix加盘#######################################################&lt;/p&gt;
&lt;p&gt;#查看磁盘情况（两个节点）
lspv -u&lt;/p&gt;
&lt;p&gt;#扫盘（两个节点）
cfgmgr&lt;/p&gt;
&lt;p&gt;#比对两个节点磁盘是否一致（两个节点）
lspv -u&lt;/p&gt;
&lt;p&gt;#针对新加的盘，检查同一个uuid对应的磁盘名称是否一致，如果不一致使用rendev调整磁盘号（禁用修改系统盘/正在使用中的asm磁盘）
rendev -l hdiskxx -n hdiskxx&lt;/p&gt;
&lt;p&gt;#检查各系统盘（系统盘），有没有被配置到另一个节点（如果另一个节点可见，是错误的，有加错盘的风险）&lt;/p&gt;
&lt;p&gt;#修改磁盘权限、参数（两个节点）
chmod 660 /dev/rhdisk6
chown grid:asmadmin /dev/rhdisk6
chdev  -a reserve_policy=no_reserve -l hdisk6&lt;/p&gt;
&lt;p&gt;#查看磁盘大小(aix系统,不要带r把后面文件名写齐)
bootinfo -s hdiskxx
查看磁盘大小(link)
lsblk&lt;/p&gt;
&lt;p&gt;#磁盘组磁盘大小和header状态
kfod disks=all st=t&lt;/p&gt;
&lt;p&gt;#查看磁盘分区
lspv&lt;/p&gt;
&lt;p&gt;#检查共享磁盘两边节点是否同时可见，添加到磁盘组
su - grid
export ORACLE_SID=+ASM1
sqlplus / as sysasm&lt;/p&gt;
&lt;p&gt;set linesize 300
col path for a30
select GROUP_NUMBER,FAILGROUP,PATH,MOUNT_STATUS,state,TOTAL_MB,create_data from v$asm_disk order by 1,2,3;
select GROUP_NUMBER,FAILGROUP,count(1) from v$asm_disk group by GROUP_NUMBER,FAILGROUP;
select NAME,TOTAL_MB/1024,FREE_MB/1024 from v$asm_diskgroup order by 1,2,3;
select NAME,TOTAL_MB/1024,FREE_MB/1024 from v$asm_disk order by 1,2,3;&lt;/p&gt;
&lt;p&gt;#加盘
alter diskgroup datadg add disk &apos;/dev/rhdisk6&apos; rebalance power 1 ;&lt;/p&gt;
&lt;p&gt;报错:
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15260: permission denied on ASM disk group&lt;/p&gt;
&lt;p&gt;sqlplus / as sysdba 没得权限操作asm&lt;/p&gt;
&lt;p&gt;#######################################################linux加盘#######################################################&lt;/p&gt;
&lt;p&gt;linux加盘
1.查看集群节点及个数
su - grid -c &quot;olsnodes -n&quot;&lt;/p&gt;
&lt;p&gt;2.查看现有磁盘及数量(华为存储)
upadmin show vlun&lt;/p&gt;
&lt;p&gt;3.刷盘
upRescan&lt;/p&gt;
&lt;p&gt;4.查看刷盘后现有磁盘及数量(华为存储)
upadmin show vlun&lt;/p&gt;
&lt;p&gt;5.执行脚本,打印需要执行的命令
sh /tmp/asm_admin.sh -option add -diskgrep YZ_76_45DG(磁盘名) -type datadg -dgtype DATADG&lt;/p&gt;
&lt;p&gt;生成唯一标识：
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb&lt;/p&gt;
&lt;p&gt;6.编辑oracle磁盘映射文件
vim /etc/udev/rules.d/99-oracle-asmdevices.rules&lt;/p&gt;
&lt;p&gt;7.检查现有映射磁盘映射情况
ls -l /dev/asm-datadg*&lt;/p&gt;
&lt;p&gt;8.重新映射asm磁盘
udevadm control --reload-rules
/sbin/udevadm trigger
ll /dev/asm*&lt;/p&gt;
&lt;p&gt;9.进到数据库
su - oracle
export ORACLE_SID=+ASM1
sqlplus / as sysdba&lt;/p&gt;
&lt;p&gt;10.添加磁盘
alter diskgroup DATADG add failgroup DATADG_001 disk &apos;/dev/asm-datadg1-10&apos;,&apos;/dev/asm-datadg1-11&apos; failgroup DATADG_002 disk &apos;/dev/asm-datadg2-10&apos;,&apos;/dev/asm-datadg2-11&apos; rebalance power 1;&lt;/p&gt;
&lt;p&gt;ORA-15041 While Adding Disk With Same Sized Disks in ASM Diskgroup (Doc ID 1551316.1)&lt;/p&gt;
&lt;p&gt;每个ASM磁盘至少要有50M,Then validate if all disk have atleast 50M free space is there or not.&lt;/p&gt;
&lt;p&gt;11.查看重新平衡磁盘进度
!asmcmd lsop&lt;/p&gt;
&lt;p&gt;12.根据进度调整并行
alter diskgroup datadg rebalance power 30;&lt;/p&gt;
&lt;p&gt;13.查看加盘情况
set linesize 300
col path for a30
select GROUP_NUMBER,FAILGROUP,PATH,MOUNT_STATUS,state,TOTAL_MB,create_datas from v$asm_disk order by 1,2,3;
select GROUP_NUMBER,FAILGROUP,count(1) from v$asm_disk group by GROUP_NUMBER,FAILGROUP;
select NAME,TOTAL_MB/1024,FREE_MB/1024 from v$asm_diskgroup order by 1,2,3;
select NAME,TOTAL_MB/1024,FREE_MB/1024 from v$asm_disk order by 1,2,3;&lt;/p&gt;
</content:encoded></item><item><title>升19检查log</title><link>https://blog.newworld.help/posts/%E5%8D%8719%E6%A3%80%E6%9F%A5log/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%8D%8719%E6%A3%80%E6%9F%A5log/</guid><description>Report generated by Oracle Database Pre-Upgrade Information Tool Versi</description><pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Report generated by Oracle Database Pre-Upgrade Information Tool Version
19.0.0.0.0 Build: 13 on 2024-03-01T11:15:24&lt;/p&gt;
&lt;p&gt;Upgrade-To version: 19.0.0.0.0&lt;/p&gt;
&lt;h1&gt;=======================================
Status of the database prior to upgrade&lt;/h1&gt;
&lt;pre&gt;&lt;code&gt;  Database Name:  ORCL
 Container Name:  orcl
   Container ID:  0
        Version:  12.1.0.2.0
 DB Patch Level:  No Patch Bundle applied
     Compatible:  12.1.0.2.0
      Blocksize:  8192
       Platform:  Linux x86 64-bit
  Timezone File:  18
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Database log mode:  ARCHIVELOG
Readonly:  FALSE
Edition:  EE&lt;/p&gt;
&lt;p&gt;Oracle Component                       Upgrade Action    Current Status&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Oracle Server                          [to be upgraded]  VALID
JServer JAVA Virtual Machine           [to be upgraded]  VALID
Oracle XDK for Java                    [to be upgraded]  VALID
Real Application Clusters              [to be upgraded]  OPTION OFF
Oracle Workspace Manager               [to be upgraded]  VALID
OLAP Analytic Workspace                [to be upgraded]  VALID
Oracle Label Security                  [to be upgraded]  VALID
Oracle Database Vault                  [to be upgraded]  VALID
Oracle Text                            [to be upgraded]  VALID
Oracle XML Database                    [to be upgraded]  VALID
Oracle Java Packages                   [to be upgraded]  VALID
Oracle Multimedia                      [to be upgraded]  VALID
Oracle Spatial                         [to be upgraded]  VALID
Oracle OLAP API                        [to be upgraded]  VALID&lt;/p&gt;
&lt;h1&gt;==============
BEFORE UPGRADE&lt;/h1&gt;
&lt;h1&gt;REQUIRED ACTIONS&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;(AUTOFIXUP) Empty the RECYCLEBIN immediately before database upgrade.&lt;/p&gt;
&lt;p&gt;The database contains 5 objects in the recycle bin.&lt;/p&gt;
&lt;p&gt;The recycle bin must be completely empty before database upgrade.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Contact Oracle Support for instructions on how to resolve this error.
ERROR: ORA-29548 ORA-29548: Java system class reported: release of
classes.bin in the database does not match that of the oracle executable&lt;/p&gt;
&lt;p&gt;There is a problem with the JAVAVM component and database upgrade cannot
be performed until it is corrected.&lt;/p&gt;
&lt;p&gt;JAVAVM component must be functioning properly before database upgrade.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;RECOMMENDED ACTIONS&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Upgrade Oracle Application Express (APEX) manually before the database
upgrade.&lt;/p&gt;
&lt;p&gt;The database contains APEX version 192.168.1.10.08. Upgrade APEX to at least
version 18.2.0.00.12.&lt;/p&gt;
&lt;p&gt;Starting with Oracle Database Release 18, APEX is not upgraded
automatically as part of the database upgrade. Refer to My Oracle Support
Note 1088970.1 for information about APEX installation and upgrades.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(AUTOFIXUP) Gather stale data dictionary statistics prior to database
upgrade in off-peak time using:&lt;/p&gt;
&lt;p&gt;EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;&lt;/p&gt;
&lt;p&gt;Dictionary statistics do not exist or are stale (not up-to-date).&lt;/p&gt;
&lt;p&gt;Dictionary statistics help the Oracle optimizer find efficient SQL
execution plans and are essential for proper upgrade timing. Oracle
recommends gathering dictionary statistics in the last 24 hours before
database upgrade.&lt;/p&gt;
&lt;p&gt;For information on managing optimizer statistics, refer to the 12.1.0.2
Oracle Database SQL Tuning Guide.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;INFORMATION ONLY&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Here are ALL the components in this database registry:&lt;/p&gt;
&lt;p&gt;Component Current     Current     Original    Previous    Component
CID       Version     Status      Version     Version     Schema&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;APEX      192.168.1.10.08 VALID                               APEX_040200
APS       12.1.0.2.0  VALID                               SYS
CATALOG   12.1.0.2.0  VALID                               SYS
CATJAVA   12.1.0.2.0  VALID                               SYS
CATPROC   12.1.0.2.0  VALID                               SYS
CONTEXT   12.1.0.2.0  VALID                               CTXSYS
DV        12.1.0.2.0  VALID                               DVSYS
JAVAVM    12.1.0.2.0  VALID                               SYS
OLS       12.1.0.2.0  VALID                               LBACSYS
ORDIM     12.1.0.2.0  VALID       12.1.0.2.0  12.1.0.2.0  ORDSYS
OWM       12.1.0.2.0  VALID                               WMSYS
RAC       12.1.0.2.0  OPTION OFF                          SYS
SDO       12.1.0.2.0  VALID                               MDSYS
XDB       12.1.0.2.0  VALID                               XDB
XML       12.1.0.2.0  VALID                               SYS
XOQ       12.1.0.2.0  VALID                               SYS&lt;/p&gt;
&lt;p&gt;Review the information before upgrading.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To help you keep track of your tablespace allocations, the following
AUTOEXTEND tablespaces are expected to successfully EXTEND during the
upgrade process.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;                                       Min Size
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tablespace                        Size     For Upgrade&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;SYSAUX                             820 MB       887 MB
SYSTEM                             800 MB      1142 MB&lt;/p&gt;
&lt;p&gt;Minimum tablespace sizes for upgrade are estimates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ensure there is additional disk space in LOG_ARCHIVE_DEST_1 for at least
4618 MB of archived logs.  Check alert log during the upgrade that there
is no write error to the destination due to lack of disk space.&lt;/p&gt;
&lt;p&gt;Archiving cannot proceed if the archive log destination is full during
upgrade.&lt;/p&gt;
&lt;p&gt;Archive Log Destination:
Parameter    :  LOG_ARCHIVE_DEST_1
Destination  :  +DATADB&lt;/p&gt;
&lt;p&gt;The database has archiving enabled.  The upgrade process will need free
disk space in the archive log destination(s) to generate archived logs to.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check the Oracle Backup and Recovery User&apos;s Guide for information on how
to manage an RMAN recovery catalog schema.&lt;/p&gt;
&lt;p&gt;If you are using a version of the recovery catalog schema that is older
than that required by the RMAN client version, then you must upgrade the
catalog schema.&lt;/p&gt;
&lt;p&gt;It is good practice to have the catalog schema the same or higher version
than the RMAN client version you are using.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Here is a count of invalid objects by Oracle-maintained users:&lt;/p&gt;
&lt;p&gt;Oracle-Maintained User Name                 Number of INVALID Objects&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;None                                        None&lt;/p&gt;
&lt;p&gt;Review the information before upgrading.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Here is a count of invalid objects by Application users:&lt;/p&gt;
&lt;p&gt;Application User Name                       Number of INVALID Objects&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;None                                        None&lt;/p&gt;
&lt;p&gt;Review the information before upgrading.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;ORACLE GENERATED FIXUP SCRIPT&lt;/h1&gt;
&lt;p&gt;All of the issues in database ORCL
which are identified above as BEFORE UPGRADE &quot;(AUTOFIXUP)&quot; can be resolved by
executing the following&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    SQL&amp;gt;@/home/oracle/enmo/log/preupgrade_fixups.sql
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;=============
AFTER UPGRADE&lt;/h1&gt;
&lt;h1&gt;REQUIRED ACTIONS&lt;/h1&gt;
&lt;p&gt;None&lt;/p&gt;
&lt;h1&gt;RECOMMENDED ACTIONS&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Upgrade the database time zone file using the DBMS_DST package.&lt;/p&gt;
&lt;p&gt;The database is using time zone file version 18 and the target 19 release
ships with time zone file version 32.&lt;/p&gt;
&lt;p&gt;Oracle recommends upgrading to the desired (latest) version of the time
zone file.  For more information, refer to &quot;Upgrading the Time Zone File
and Timestamp with Time Zone Data&quot; in the 19 Oracle Database
Globalization Support Guide.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Recreate directory objects to remove any symbolic links from directory
paths.  To identify paths that contain symbolic links before upgrading,
use OS commands like UNIX file or WINDOWS dir.  After upgrading, run
$ORACLE_HOME/rdbms/admin/utldirsymlink.sql to identify directory objects
with symbolic links in the path.&lt;/p&gt;
&lt;p&gt;Found 1 user directory objects to be checked: ORACLECLRDIR.&lt;/p&gt;
&lt;p&gt;Starting in Release 18c, symbolic links are not allowed in directory
object paths used with BFILE data types, the UTL_FILE package, or
external tables.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(AUTOFIXUP) Gather dictionary statistics after the upgrade using the
command:&lt;/p&gt;
&lt;p&gt;EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS;&lt;/p&gt;
&lt;p&gt;Oracle recommends gathering dictionary statistics after upgrade.&lt;/p&gt;
&lt;p&gt;Dictionary statistics provide essential information to the Oracle
optimizer to help it find efficient SQL execution plans. After a database
upgrade, statistics need to be re-gathered as there can now be tables
that have significantly changed during the upgrade or new tables that do
not have statistics gathered yet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Gather statistics on fixed objects after the upgrade and when there is a
representative workload on the system using the command:&lt;/p&gt;
&lt;p&gt;EXECUTE DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;&lt;/p&gt;
&lt;p&gt;This recommendation is given for all preupgrade runs.&lt;/p&gt;
&lt;p&gt;Fixed object statistics provide essential information to the Oracle
optimizer to help it find efficient SQL execution plans.  Those
statistics are specific to the Oracle Database release that generates
them, and can be stale upon database upgrade.&lt;/p&gt;
&lt;p&gt;For information on managing optimizer statistics, refer to the 12.1.0.2
Oracle Database SQL Tuning Guide.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;ORACLE GENERATED FIXUP SCRIPT&lt;/h1&gt;
&lt;p&gt;All of the issues in database ORCL
which are identified above as AFTER UPGRADE &quot;(AUTOFIXUP)&quot; can be resolved by
executing the following&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    SQL&amp;gt;@/home/oracle/enmo/log/postupgrade_fixups.sql
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>asm磁盘学习笔记</title><link>https://blog.newworld.help/posts/asm%E7%A3%81%E7%9B%98%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</link><guid isPermaLink="true">https://blog.newworld.help/posts/asm%E7%A3%81%E7%9B%98%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</guid><description>cmd下cd到VMware软件路径</description><pubDate>Thu, 11 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;windows
1.使用vm虚拟机创建共享存储
cmd下cd到VMware软件路径
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\disk\share-11Gdata001.vmdk&quot;
.\vmware-vdiskmanager.exe -c -s 10GB -a lsilogic -t 2 &quot;F:\VM\RACdisk\disk\share-11Gdata002.vmdk&quot;&lt;/p&gt;
&lt;p&gt;2.添加至虚拟机.vmx文件
scsi1:15.mode = &quot;independent-p******&quot;
scsi1:15.deviceType = &quot;disk&quot;
scsi1:15.present = &quot;TRUE&quot;
scsi1:15.fileName = &quot;F:\VM\RACdisk\disk\share-11Gdata001.vmdk&quot;
scsi1:15.redo = &quot;&quot;&lt;/p&gt;
&lt;p&gt;scsi1:16.mode = &quot;independent-p******&quot;
scsi1:16.deviceType = &quot;disk&quot;
scsi1:16.present = &quot;TRUE&quot;
scsi1:16.fileName = &quot;F:\VM\RACdisk\disk\share-11Gdata002.vmdk&quot;
scsi1:16.redo = &quot;&quot;&lt;/p&gt;
&lt;p&gt;linux
1.fdisk -l | grep dev/sd*检查添加磁盘的情况
因不知名原因发现只添加了一块磁盘,浪费大量时间重做,发现可能是scsi1:nn序号关系,做多写到15&lt;/p&gt;
&lt;p&gt;2.检查是否安装multipath软件,配置多路径,已安装不做检查&lt;/p&gt;
&lt;p&gt;3.查看新增共享盘的scsi_id
/sbin/scsi_id -g -u /dev/sdp&lt;/p&gt;
&lt;p&gt;4.写入multipath,激活多路径
vim /etc/multipath.conf
multipaths {
multipath {
wwid &quot;36000c29236e0a5484b831362e0064ed8&quot;
alias asm_cc
}&lt;/p&gt;
&lt;p&gt;multipath -F&lt;/p&gt;
&lt;p&gt;multipath -v2&lt;/p&gt;
&lt;p&gt;multipath -ll&lt;/p&gt;
&lt;p&gt;5.UDEV绑盘
echo &apos;KERNEL==&quot;dm-*&quot;,ENV{DM_UUID}==&quot;mpath-36000c29236e0a5484b831362e0064ed8&quot;,SYMLINK+=&quot;asm_ss&quot;,OWNER=&quot;grid&quot;,GROUP=&quot;asmadmin&quot;,MODE=&quot;0660&quot;&apos; &amp;gt;&amp;gt; /etc/udev/rules.d/99-oracle-asmdevices.rules&lt;/p&gt;
&lt;p&gt;6.重载udev
udevadm control --reload-rules&lt;/p&gt;
&lt;p&gt;udevadm trigger --type=devices&lt;/p&gt;
&lt;p&gt;7.检查新加磁盘组情况
ll /dev/asm*
lsblk&lt;/p&gt;
&lt;p&gt;8.下列磁盘组随意踢出一个(相同组每次踢出一个都要再执行一次看哪个能删)&lt;/p&gt;
&lt;p&gt;SELECT &apos;ALTER DISKGROUP &apos; || NAME || &apos; DROP DISK &apos; || FAILGROUP || &apos;;&apos; 踢出磁盘,
&apos;ALTER DISKGROUP &apos; || NAME || &apos; rebalance power 5 ;&apos; &quot;设置rebalance power&quot;
FROM (SELECT t2.name,
t1.FAILGROUP,
row_NUMBER() OVER(PARTITION BY t1.group_number ORDER BY t1.free_mb DESC) rn
FROM v$asm_disk t1
JOIN v$asm_diskgroup t2
ON t1.GROUP_NUMBER = t2.GROUP_NUMBER
WHERE TYPE = &apos;EXTERN&apos; --外部冗余
AND t2.total_mb * 0.8 - t2.free_mb &amp;lt; 0 --去掉任意一块磁盘,剩余磁盘绝对成立满足剩余空间大于80%
AND t1.group_number IN (SELECT group_number
FROM v$asm_disk
GROUP BY group_number
HAVING COUNT(1) &amp;gt;= 2))--排除只有一块盘的组
WHERE rn = 1&lt;/p&gt;
&lt;p&gt;上面的语句得出来的结果是
ALTER DISKGROUP {NAME} DROP DISK {FAILGROUP}
ALTER DISKGROUP {NAME} rebalance power 5 ;&lt;/p&gt;
&lt;p&gt;#设置rebalance重定向也可以一起操作;
ALTER DISKGROUP NAME DROP DISK FAILGROUP rebalance power 11;
磁盘组名NAME,FAILGROUP盘名&lt;/p&gt;
&lt;p&gt;查看加盘状态,剩余时间
!ASMCMD lsop
Group_Name  Dsk_Num  State  Power  EST_WORK  EST_RATE  EST_TIME&lt;/p&gt;
&lt;p&gt;#查看重平衡
select * from V$asm_operation;
GROUP_NUMBER            磁盘组号
OPERATION	             重平衡状态,REBAL为正在重平衡
STATE		             状态,run为运行
POWER		             并行数
ACTUAL 	             分配并行数
SOFAR		             到目前为止已处理数量
EST_WORK	             需要处理的数量
EST_RATE	             剩余要处理的数量xxxx
EST_MINUTES             预计需要时间
ERROR_CODE	             异常错误,没有就是没错&lt;/p&gt;
&lt;p&gt;9.查看删除状态
set lines200 pages 200
col PATH for a30
SELECT GROUP_NUMBER, FAILGROUP, PATH, MOUNT_STATUS, STATE FROM v$asm_disk WHERE state=&apos;DROPPING&apos;;
alter diskgroup datadg rebalance power 1;&lt;/p&gt;
&lt;p&gt;10.删除完成后dd
select GROUP_NUMBER,FAILGROUP,path from v$asm_disk where group_number=0;&lt;/p&gt;
&lt;p&gt;dd if=/dev/zero of=/dev/asm_ocr03 bs=1M count=1000
dd if=/dev/zero of=/dev/asm_ocr02 bs=1M count=1000
dd if=/dev/zero of=/dev/asm_data03 bs=1M count=1000
dd if=/dev/zero of=/dev/asm_ss bs=1M count=1000&lt;/p&gt;
&lt;p&gt;select &apos;dd if=/dev/zero of=&apos;||path||&apos; bs=1M count=1000&apos; from v$asm_disk where group_number=0;&lt;/p&gt;
&lt;p&gt;11.添加磁盘&lt;/p&gt;
&lt;p&gt;alter diskgroup DATADB add disk &apos;/dev/asm_data03&apos; rebalance power 1 ;&lt;/p&gt;
&lt;p&gt;12.测试创normal磁盘组,对磁盘组加磁盘,failgroup使用已有名
create diskgroup cc normal redundancy failgroup oggdg1_0001 disk &apos;/dev/asm_ocr03&apos; failgroup oggdg2_0002 disk &apos;/dev/asm_data03&apos;;&lt;/p&gt;
&lt;p&gt;alter diskgroup cc add
failgroup DATADG_001 disk &apos;/dev/asm_ocr02&apos;
failgroup DATADG_002 disk &apos;/dev/asm_ss&apos;;&lt;/p&gt;
&lt;p&gt;发现没有磁盘组没有文件组oggdg_001,oggdg_002也能使用alter命令,磁盘组,文件组是树形结构重名不会报错&lt;/p&gt;
&lt;p&gt;删除磁盘组
alter diskgroup cc dismount;
drop diskgroup cc force including contents;&lt;/p&gt;
&lt;p&gt;create diskgroup cc normal redundancy failgroup DATADG_001 disk &apos;/dev/asm_ocr03&apos; failgroup DATADG_002 disk &apos;/dev/asm_data03&apos;;&lt;/p&gt;
&lt;p&gt;alter diskgroup cc add
failgroup DATADG_001 disk &apos;/dev/asm_ocr02&apos;
failgroup DATADG_002 disk &apos;/dev/asm_ss&apos;;&lt;/p&gt;
&lt;p&gt;13.尝试将/dev/asm_ss修改磁盘名/dev/asm_si
vim /etc/multipath.conf
/dev/asm_ss修改磁盘名/dev/asm_si
multipath -F&lt;/p&gt;
&lt;p&gt;multipath -v2&lt;/p&gt;
&lt;p&gt;multipath -ll
发现修改失败,撤退&lt;/p&gt;
&lt;p&gt;###########################################命令###########################################
删除磁盘组中的磁盘
ALTER DISKGROUP {NAME} DROP DISK {FAILGROUP} [rebalance power 11]
[rebalance power 11]:重平衡，并行11
[force]：多冗余才能加force&lt;/p&gt;
&lt;p&gt;查看重平衡进度策略
select * from V$asm_operation;&lt;/p&gt;
&lt;p&gt;删除磁盘组
alter diskgroup cc dismount;
drop diskgroup cc force including contents;&lt;/p&gt;
&lt;p&gt;修改磁盘组，重平衡策略
ALTER DISKGROUP {NAME} rebalance power 5 ;&lt;/p&gt;
&lt;p&gt;对DATADB磁盘组，添加磁盘/dev/asm_data03
alter diskgroup DATADB add disk &apos;/dev/asm_data03&apos; rebalance power 1 ;&lt;/p&gt;
&lt;p&gt;卸载磁盘组
ALTER DISKGROUP data DISMOUNT;&lt;/p&gt;
&lt;p&gt;挂载磁盘组
ALTER DISKGROUP data  MOUNT;&lt;/p&gt;
&lt;p&gt;挂载所有磁盘组
ALTER DISKGROUP ALL MOUNT;&lt;/p&gt;
</content:encoded></item><item><title>Oracle锁</title><link>https://blog.newworld.help/posts/oracle%E9%94%81/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle%E9%94%81/</guid><description>1、查询Oracle正在执行的sql语句及执行该语句的用户</description><pubDate>Thu, 21 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1、查询Oracle正在执行的sql语句及执行该语句的用户&lt;/p&gt;
&lt;p&gt;SELECT a.program,
c.SQL_ID,
b.sid oracleID,
b.username Oracle用户,
b.serial#,
spid 操作系统ID,
paddr,
sql_text 正在执行的SQL,
b.machine 计算机名
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr
AND b.sql_hash_value = c.hash_value;&lt;/p&gt;
&lt;p&gt;查看sql_id
SELECT USERENV(&apos;PID&apos;)
FROM dual&lt;/p&gt;
&lt;p&gt;2、查看正在执行sql的发起者的发放程序&lt;/p&gt;
&lt;p&gt;SELECT OSUSER 电脑登录身份,
PROGRAM 发起请求的程序,
USERNAME 登录系统的用户名,
SCHEMANAME,
B.Cpu_Time 花费cpu的时间,
STATUS,
B.SQL_TEXT 执行的sql
FROM V$SESSION A
JOIN V$SQL B
ON A.SQL_ADDRESS = B.ADDRESS
AND A.SQL_HASH_VALUE = B.HASH_VALUE&lt;/p&gt;
&lt;p&gt;3、查出oracle当前的被锁对象&lt;/p&gt;
&lt;p&gt;SELECT l.session_id sid,
s.serial#,
l.locked_mode 锁模式,
l.oracle_username 登录用户,
l.os_user_name 登录机器用户名,
s.machine 机器名,
s.terminal 终端用户名,
o.object_name 被锁对象名,
s.logon_time 登录数据库时间
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;&lt;/p&gt;
&lt;p&gt;4、kill掉当前的锁对象可以为&lt;/p&gt;
&lt;p&gt;alter system kill session &apos;sid， s.serial#&apos;;&lt;/p&gt;
</content:encoded></item><item><title>sql 历史</title><link>https://blog.newworld.help/posts/sql-%E5%8E%86%E5%8F%B2/</link><guid isPermaLink="true">https://blog.newworld.help/posts/sql-%E5%8E%86%E5%8F%B2/</guid><description>1.oracle查看表水位线表碎片查询以及整理（高水位线）</description><pubDate>Tue, 19 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;1.oracle查看表水位线表碎片查询以及整理（高水位线）
SELECT table_name,
ROUND ( (blocks * 8), 2) &quot;高水位空间 k&quot;,
ROUND ( (num_rows * avg_row_len / 1024), 2) &quot;真实使用空间 k&quot;,
ROUND ( (blocks * 10 / 100) * 8, 2) &quot;预留空间(pctfree) k&quot;,
ROUND ((  blocks * 8 - (num_rows * avg_row_len / 1024) - blocks * 8 * 10 / 100),2)&quot;浪费空间 k&quot;
FROM user_tables
WHERE temporary = &apos;N&apos;
ORDER BY 5 DESC;&lt;/h2&gt;
&lt;p&gt;2.查看表上次收集统计信息时间
select table_name,last_analyzed from dba_tables where owner = &apos;SCHEMA_NAME&apos;&lt;/p&gt;
&lt;p&gt;3.查看历史等待事件
select trunc(sample_time, &apos;mi&apos;), event,sql_id, count(1)
from dba_hist_active_sess_history
where sample_time &amp;gt; to_date(&apos;2022-07-12 18:00:00&apos;, &apos;yyyy-mm-dd hh24:mi:ss&apos;)
and sample_time &amp;lt; to_date(&apos;2022-07-12 19:30:00&apos;, &apos;yyyy-mm-dd hh24:mi:ss&apos;)
-- and instance_number=1
-- and sql_id=&apos;6x3zmz8xw92cf&apos;
group by trunc(sample_time, &apos;mi&apos;), event,sql_id
order by 1 desc, 3, 2&lt;/p&gt;
&lt;p&gt;#根据历史等待事件异常sql，找到该sql&lt;/p&gt;
&lt;p&gt;DELETE /*+INDEX(T1 WCP_LIMIT_TRANS_IDX_02) &lt;em&gt;/
FROM WCP_LIMIT_TRANS_T T1 WHERE PARTITION_NO = :1
AND (T1.CLIENT_ID, T1.CARD_INTERNAL_NBR) IN (
SELECT /&lt;/em&gt;+INDEX(T2 WCP_CARD_INFO_IDX_3) */
T2.CLIENT_ID, T2.CARD_INTERNAL_NBR FROM
WCP_CARD_INFO_T T2
WHERE T2.REL_CLIENT_ID = :2
AND T2.REL_INTERNAL_NBR = :3
AND T2.CARD_TYPE = &apos;L&apos;
AND T2.CARD_SEQUENCE_NBR = &apos;00&apos;
)
AND ROWNUM &amp;lt;= :4&lt;/p&gt;
&lt;p&gt;--6x3zmz8xw92cf
SQL Monitoring Report&lt;/p&gt;
&lt;h2&gt;SQL Text&lt;/h2&gt;
&lt;p&gt;DELETE /*+INDEX(T1 WCP_LIMIT_TRANS_IDX_02) &lt;em&gt;/ FROM WCP_LIMIT_TRANS_T T1 WHERE PARTITION_NO = :1 AND (T1.CLIENT_ID, T1.CARD_INTERNAL_NBR) IN ( SELECT /&lt;/em&gt;+INDEX(T2 WCP_CARD_INFO_IDX_3) */ T2.CLIENT_ID, T2.CARD_INTERNAL_NBR FROM WCP_CARD_INFO_T T2 WHERE T2.REL_CLIENT_ID = :2 AND T2.REL_INTERNAL_NBR = :3 AND T2.CARD_TYPE = &apos;L&apos; AND T2.CARD_SEQUENCE_NBR = &apos;00&apos; ) AND ROWNUM &amp;lt;= :4&lt;/p&gt;
&lt;h2&gt;Error: ORA-1013&lt;/h2&gt;
&lt;p&gt;ORA-01013: user requested cancel of current operation&lt;/p&gt;
&lt;h2&gt;Global Information&lt;/h2&gt;
&lt;p&gt;Status              :  DONE (ERROR)
Instance ID         :  1
Session             :  APPBATCH (9410:46128)
SQL ID              :  6x3zmz8xw92cf
SQL Execution ID    :  16777259
Execution Started   :  07/13/2022 10:17:13
First Refresh Time  :  07/13/2022 10:17:19
Last Refresh Time   :  07/13/2022 11:01:56
Duration            :  2683s
Module/Action       :  JDBC Thin Client/-
Service             :  WCPACT09_r1_s1
Program             :  JDBC Thin Client&lt;/p&gt;
&lt;h1&gt;Binds&lt;/h1&gt;
&lt;h1&gt;| Name | Position |   Type    |                                         Value                                          |&lt;/h1&gt;
&lt;h1&gt;| :1   |        1 | CHAR(32)  | 11                                                                                     |
| :2   |        2 | CHAR(128) | 9630112933                                                                             |
| :3   |        3 | CHAR(32)  | S0408002                                                                               |
| :4   |        4 | NUMBER    | 10000                                                                                  |&lt;/h1&gt;
&lt;h1&gt;Global Stats&lt;/h1&gt;
&lt;h1&gt;| Elapsed |   Cpu   |    IO    | Concurrency | Cluster  |  Other   | Buffer | Read  | Read  |
| Time(s) | Time(s) | Waits(s) |  Waits(s)   | Waits(s) | Waits(s) |  Gets  | Reqs  | Bytes |&lt;/h1&gt;
&lt;h1&gt;|    2683 |    2651 |       25 |        0.04 |     0.88 |     5.25 |     3G | 50214 | 392MB |&lt;/h1&gt;
&lt;p&gt;SQL Plan Monitoring Details (Plan Hash Value=4156913200)&lt;/p&gt;
&lt;h1&gt;=====================================================================================================================================================================================
| Id |            Operation             |          Name          |  Rows   | Cost |   Time    | Start  | Execs |   Rows   | Read  | Read  | Activity |       Activity Detail        |
|    |                                  |                        | (Estim) |      | Active(s) | Active |       | (Actual) | Reqs  | Bytes |   (%)    |         (# samples)          |&lt;/h1&gt;
&lt;h1&gt;|  0 | DELETE STATEMENT                 |                        |         |      |           |        |     1 |          |       |       |          |                              |
|  1 |   DELETE                         | WCP_LIMIT_TRANS_T      |         |      |           |        |     1 |          |       |       |          |                              |
|  2 |    COUNT STOPKEY                 |                        |         |      |           |        |     1 |          |       |       |          |                              |
|  3 |     NESTED LOOPS                 |                        |       1 | 1305 |           |        |     1 |          |       |       |          |                              |
|  4 |      NESTED LOOPS                |                        |    8654 | 1305 |      2678 |     +6 |     1 |        0 |       |       |          |                              |
|  5 |       PARTITION LIST SINGLE      |                        |       1 |    1 |      2678 |     +6 |     1 |       3M |       |       |          |                              |
|  6 |        INDEX SKIP SCAN           | WCP_LIMIT_TRANS_IDX_02 |       1 |    1 |      2678 |     +6 |     1 |       3M | 50214 | 392MB |     0.90 | gc current block 2-way (1)   |
|    |                                  |                        |         |      |           |        |       |          |       |       |          | Cpu (3)                      |
|    |                                  |                        |         |      |           |        |       |          |       |       |          | db file sequential read (20) |
|  7 |       INDEX RANGE SCAN           | WCP_CARD_INFO_IDX_3    |    8654 |   63 |      2683 |     +1 |    3M |        0 |       |       |    99.10 | Cpu (2641)                   |
|  8 |      TABLE ACCESS BY INDEX ROWID | WCP_CARD_INFO_T        |       1 | 1304 |           |        |       |          |       |       |          |                              |&lt;/h1&gt;
&lt;p&gt;select dbms_sqltune.report_sql_monitor(sql_id=&amp;gt;&apos;6x3zmz8xw92cf&apos;,type=&amp;gt;&apos;TEXT&apos;) report from dual;&lt;/p&gt;
&lt;p&gt;Global Information
记录sql执行用户，执行时间，使用工具等基本信息&lt;/p&gt;
&lt;p&gt;Global Stats
Elapsed Time（消耗时间）：表示查询执行的总时间，包括 CPU 时间、等待时间和其他执行时间。它是一个衡量查询执行效率的重要指标。
CPU Time（CPU 时间）：表示查询执行期间 CPU 所消耗的时间。CPU 时间是指在 CPU 上执行指令和计算所用的时间。
IO Waits（IO 等待）：表示查询执行期间涉及到的 IO 操作所等待的时间。它反映了查询在读取或写入数据时由于等待磁盘IO而花费的时间。
Other Waits（其他等待）：表示查询执行期间发生的除了 IO 等待以外的其他等待时间。这可能包括锁等待、资源争用等等。
Fetch Calls（获取调用）：表示从数据库中检索数据所执行的获取操作的次数。每个获取调用通常对应于从数据库中获取一行或一块数据。
Buffer Gets（缓冲区获取）：表示查询执行期间从缓冲区（Buffer Cache）中读取数据块的次数。缓冲区是数据库中用于缓存数据块的内存区域。
Read Reqs（读请求）：表示查询执行期间发起的读取数据请求的次数。这通常对应于从磁盘或其他存储介质中读取数据块的操作。
Read Bytes（读取字节）：表示查询执行期间从磁盘或其他存储介质中读取的字节数。它反映了查询执行期间涉及的数据传输量。
Write Reqs（写请求）：表示查询执行期间发起的写入数据请求的次数。这通常对应于向磁盘或其他存储介质写入数据块的操作。
Write Bytes（写入字节）：表示查询执行期间写入磁盘或其他存储介质的字节数。它反映了查询执行期间涉及的数据传输量。&lt;/p&gt;
&lt;p&gt;SQL Plan Monitoring Details (Plan Hash Value=1885709308)
Rows(Estim)：根据统计信息预估行数
Cost：根据统计信息预估成本
TimeActive(s)：活动时间
Start Active：
Execs：执行次数
Rows (Actual)：实际行数
Activity Detail:数据库的异常情况,重点关注&lt;/p&gt;
&lt;p&gt;select trunc(sample_time, &apos;mi&apos;), event, count(1)
from v$active_session_history
where sample_time &amp;gt;
to_date(&apos;2022-07-11 18:00:00&apos;, &apos;yyyy-mm-dd hh24:mi:ss&apos;)
and sample_time &amp;lt;
to_date(&apos;2022-07-13 19:30:00&apos;, &apos;yyyy-mm-dd hh24:mi:ss&apos;)
and sql_id=&apos;2ch4qsxmr7a3c&apos;
group by trunc(sample_time, &apos;mi&apos;), event
order by 1 desc, 3, 2&lt;/p&gt;
&lt;p&gt;select sql_text from  v$sql where sql_id=&apos;6x3zmz8xw92cf&apos;
select sql_text from  dba_hist_sqltext where sql_id=&apos;6x3zmz8xw92cf&apos;&lt;/p&gt;
&lt;p&gt;--UPDATE /*+ OPT_PARAM(&apos;_parallel_syspls_obey_force&apos; &apos;false&apos;) */ OPTSTAT_HIST_CONTROL$ SET SPARE6 = SYSTIMESTAMP WHERE SNAME = &apos;SCAN_RATE&apos; AND (SPARE6 &amp;lt; SYSTIMESTAMP - NUMTODSINTERVAL(:B1 , &apos;minute&apos;) OR SPARE6 IS NULL)&lt;/p&gt;
&lt;p&gt;select sql_id from  dba_hist_active_sess_history
where sample_time &amp;gt;
to_date(&apos;2022-07-12 18:00:00&apos;, &apos;yyyy-mm-dd hh24:mi:ss&apos;)
and sample_time &amp;lt;
to_date(&apos;2022-07-12 19:30:00&apos;, &apos;yyyy-mm-dd hh24:mi:ss&apos;)
and event=&apos;enq: TX - row lock contention&apos;&lt;/p&gt;
&lt;p&gt;select * from v$sql where sql_text like &apos;%DELETE%/*+INDEX(T1 WCP_LIMIT_TRANS_IDX_02) &lt;em&gt;/%&apos;
select * from dba_hist_sqltext where sql_text like &apos;%DELETE%/&lt;/em&gt;+INDEX(T1 WCP_LIMIT_TRANS_IDX_02) */%&apos;  -- 2ch4qsxmr7a3c&lt;/p&gt;
&lt;p&gt;DELETE
/*+INDEX(T1 WCP_LIMIT_TRANS_IDX_02) &lt;em&gt;/
FROM
WCP_LIMIT_TRANS_T T1
WHERE
PARTITION_NO = &apos;11&apos;
AND (T1.CLIENT_ID,
T1.CARD_INTERNAL_NBR) IN (
SELECT
/&lt;/em&gt;+INDEX(T2 WCP_CARD_INFO_IDX_3) */
T2.CLIENT_ID,
T2.CARD_INTERNAL_NBR
FROM
WCP_CARD_INFO_T T2
WHERE
T2.REL_CLIENT_ID = &apos;9630112933&apos;
AND T2.REL_INTERNAL_NBR = &apos;S0408002&apos;
AND T2.CARD_TYPE = &apos;L&apos;
AND T2.CARD_SEQUENCE_NBR = &apos;00&apos; )
AND ROWNUM &amp;lt;= 10000&lt;/p&gt;
&lt;p&gt;4.sql分析
set linesize 400 pagesize 9999
col shijian for a12
col execu_d for 999999
col bufferg_d for 9999999999
col diskr_d for 9999999999
col et_d for 99999999
col cput_d for 99999999
col io_time for 999999
col clus_time for 999999
col ap_time for 999999
col cc_time for 999999
col et_onetime for 999999
select
a.snap_id snap,
to_char(b.END_INTERVAL_TIME,&apos;yyyymmddhh24&apos;) shijian,
PLAN_HASH_VALUE plan,
sum(a.EXECUTIONS_DELTA) execu_d,
sum(a.BUFFER_GETS_DELTA ) bufferg_d,
sum(a.DISK_READS_DELTA ) diskr_d,
sum(a.ELAPSED_TIME_DELTA/1000000) et_d,
sum(a.CPU_TIME_DELTA/1000000)  cput_d,
sum(IOWAIT_DELTA/1000000) io_time,
sum(CLWAIT_DELTA/1000000) clus_time,
sum(APWAIT_DELTA/1000000) ap_time,
sum(ccwait_delta/1000000) cc_time,
sum(ROWS_PROCESSED_DELTA) rows_processed,
decode(sum(a.EXECUTIONS_DELTA), 0, sum(a.ELAPSED_TIME_DELTA) / 1000000, sum(a.ELAPSED_TIME_DELTA) / sum(a.EXECUTIONS_DELTA) / 1000000) et_onetime_s
from
dba_hist_sqlstat a,
dba_hist_snapshot b
where
a.SNAP_ID =b.SNAP_ID
and a.INSTANCE_NUMBER=b.INSTANCE_NUMBER
and a.sql_id=&apos;&amp;amp;sql_id&apos;
group by
a.snap_id,
to_char(b.END_INTERVAL_TIME,&apos;yyyymmddhh24&apos;),
PLAN_HASH_VALUE
order by 1;&lt;/p&gt;
</content:encoded></item><item><title>postgresql常用命令</title><link>https://blog.newworld.help/posts/postgresql%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</link><guid isPermaLink="true">https://blog.newworld.help/posts/postgresql%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/</guid><description>dt schema_name.*</description><pubDate>Sun, 25 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;1.切换到pg用户
su - postgres&lt;/p&gt;
&lt;p&gt;2.登陆数据库
psql zone&lt;/p&gt;
&lt;p&gt;3.查看有哪些表
查看当前数据库中所有表
\dt&lt;/p&gt;
&lt;p&gt;查看特定模式中的表：
\dt schema_name.*&lt;/p&gt;
&lt;p&gt;使用 SQL 查询查看表：
SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_type = &apos;BASE TABLE&apos; AND table_schema NOT IN (&apos;pg_catalog&apos;, &apos;information_schema&apos;);&lt;/p&gt;
&lt;p&gt;4.查看有哪些用户
查看所有用户：
\du&lt;/p&gt;
&lt;p&gt;使用 SQL 查询查看用户：
SELECT usename FROM pg_user;&lt;/p&gt;
&lt;p&gt;5.查看有哪些数据库
查看所有数据库：
\l&lt;/p&gt;
&lt;p&gt;使用 SQL 查询查看数据库：
SELECT datname FROM pg_database WHERE datistemplate = false;&lt;/p&gt;
&lt;p&gt;6.查看表的结构
描述表结构：
\d table_name&lt;/p&gt;
&lt;p&gt;查看表的列信息：
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = &apos;table_name&apos;;&lt;/p&gt;
&lt;p&gt;7.查看当前连接的信息
查看当前连接的用户和数据库：
SELECT current_user, current_database();&lt;/p&gt;
&lt;p&gt;查看当前连接的会话信息：
SELECT * FROM pg_stat_activity;&lt;/p&gt;
&lt;p&gt;8.查看索引
查看表上的索引：
\di table_name&lt;/p&gt;
&lt;p&gt;使用 SQL 查询查看索引：
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = &apos;table_name&apos;;&lt;/p&gt;
&lt;p&gt;9.查看序列
查看所有序列：
\ds&lt;/p&gt;
&lt;p&gt;使用 SQL 查询查看序列：
SELECT sequence_schema, sequence_name
FROM information_schema.sequences;&lt;/p&gt;
&lt;p&gt;10.查看权限
查看表的权限：
\dp table_name&lt;/p&gt;
&lt;p&gt;使用 SQL 查询查看权限：
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name = &apos;table_name&apos;;&lt;/p&gt;
&lt;p&gt;11.查看函数和存储过程
查看所有函数：
\df&lt;/p&gt;
&lt;p&gt;查看特定模式中的函数：
\df schema_name.*&lt;/p&gt;
&lt;p&gt;使用 SQL 查询查看函数：
SELECT routine_name, routine_type, data_type
FROM information_schema.routines
WHERE specific_schema NOT IN (&apos;pg_catalog&apos;, &apos;information_schema&apos;);&lt;/p&gt;
</content:encoded></item><item><title>基础备份调优</title><link>https://blog.newworld.help/posts/%E5%9F%BA%E7%A1%80%E5%A4%87%E4%BB%BD%E8%B0%83%E4%BC%98/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E5%9F%BA%E7%A1%80%E5%A4%87%E4%BB%BD%E8%B0%83%E4%BC%98/</guid><description>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dm8/bin</description><pubDate>Tue, 13 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;########################################调优及备份########################################&lt;/p&gt;
&lt;p&gt;1.配置环境变量
export LD_LIBRARY_PATH=&quot;$LD_LIBRARY_PATH:/dm8/bin&quot;
export DM_HOME=&quot;/dm8&quot;
原有基础加上下面这条（原有是安装达梦自带的）
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool&lt;/p&gt;
&lt;p&gt;2.dm.ini参数调优
参考:https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage
使用sysdba用户登陆dm管理工具或disql工具,执行以下脚本
如果在disql命令行中执行,需要先执行 set serverout on
然后再执行脚本,将执行后显示的 sp_set_para_value 部分的sql粘贴出来,重新再执行&lt;/p&gt;
&lt;p&gt;###特别注意,小心修改这两个参数 RECYCLE,BUFFER&lt;/p&gt;
&lt;p&gt;disql SYSDBA/SYSDBA@192.168.81.81:5236&lt;/p&gt;
&lt;p&gt;set serverout on
sp_set_para_value(2,&apos;WORKER_THREADS&apos;,      16          ); --工作线程数
sp_set_para_value(2,&apos;TASK_THREADS&apos;,        4           ); --任务线程数
sp_set_para_value(2,&apos;IO_THR_GROUPS&apos;,       4           ); --io线程组数(限非Windows)
sp_set_para_value(2,&apos;MAX_OS_MEMORY&apos;,       100         ); --操作系统内存的最大百分比
sp_set_para_value(2,&apos;MEMORY_POOL&apos;,         8000        ); --内存池大小(mb)
sp_set_para_value(2,&apos;MEMORY_N_POOLS&apos;,      59          ); --内存池数量
sp_set_para_value(2,&apos;MEMORY_TARGET&apos;,       30000       ); --内存共享池目标大小（MB）
sp_set_para_value(2,&apos;BUFFER&apos;,              320000      ); --初始系统缓冲区大小（MB）
sp_set_para_value(2,&apos;BUFFER_POOLS&apos;,        301         ); --缓冲池数量
sp_set_para_value(2,&apos;RECYCLE&apos;,             32000       ); --系统回收缓冲区大小（MB）
sp_set_para_value(2,&apos;RECYCLE_POOLS&apos;,       51          ); --回收缓冲池的数量
sp_set_para_value(2,&apos;FAST_POOL_PAGES&apos;,     99999999    ); --快速池的页数
sp_set_para_value(2,&apos;FAST_ROLL_PAGES&apos;,     9999999     ); --快速滚动页面的页数
sp_set_para_value(2,&apos;MEMORY_MAGIC_CHECK&apos;,  1           ); --是否开启对所有内存池的校验,0关,1开,2加强开
sp_set_para_value(2,&apos;ENABLE_FREQROOTS&apos;,    1           ); --是否收集频繁使用的页面
sp_set_para_value(2,&apos;HJ_BUF_GLOBAL_SIZE&apos;,  128000      ); --所有hash连接的最大hash缓冲区大小（MB）
sp_set_para_value(2,&apos;HJ_BUF_SIZE&apos;,         512         ); --单个hash连接的最大hash缓冲区大小（MB）
sp_set_para_value(2,&apos;SORT_FLAG&apos;,           1           ); --选择排序方法
sp_set_para_value(2,&apos;SORT_BLK_SIZE&apos;,       1           ); --最大排序blk大小（MB）&lt;/p&gt;
&lt;p&gt;将 DIRECT_IO 改为0
注意改 sp_set_para_value(2,&apos;DIRECT_IO&apos;,    0           );
即为参数调优
刷参数后必须调整参数;
alter system set &apos;MAX_SESSIONS&apos;=2000 SPFILE;   [最大连接数]&lt;/p&gt;
&lt;p&gt;注意其他参数:(详细见管理员手册)
COMPATIBLE_MODE (异构数据库兼容):2:oracle 3:sqlserver 4:mysql_olap_flag(是否启用联机分析)
MPP 集群改成1,其他环境为2
PWD_POLICY(密码策略):在dm.ini最后另起一行,添加该参数=0&lt;/p&gt;
&lt;p&gt;修改方法:
sp_set_para_value(2,&apos;COMPATIBLE_MODE&apos;, 2      );&lt;/p&gt;
&lt;p&gt;3.注册许可证 --测试略
上传正确的KEY到/dm8/bin(如果使用错误的处理器类型key将导致实例停止)
1&amp;gt;.数据库正在使用
#替换/dm8/bin文件
chown dmdba:dinstall /dm/bin/dm.key
chmod 755 /dm/bin/dm.key
#数据库更新授权,检查
sp_load_lic_info();
SELECT EXPIRED_DATE,SERVER_TYPE
from V$LICENSE;
字段描述：
EXPIRED_DATE:授权日期，null代表永久
SERVER_TYPE:3表示试用版，1表示正式版
CLUSTER_TYPE:是否企业版&lt;/p&gt;
&lt;p&gt;2&amp;gt;.数据库已关闭
#替换/dm8/bin文件,修改权限即可
chown dmdba:dinstall /dm/bin/dm.key
chmod 755 /dm/bin/dm.key&lt;/p&gt;
&lt;p&gt;4.创建表空间及备份
说明:创建rural用户,密码为:admin1234,数据存在rural表空间中,权限给 PUBLIC/RESOURCE/VTI/SOI/SVI
创建表空间时:若/dm8_data分区容量小于500G,则表空间总大小不超/dm8_data分区容量的70%;
若/dm8_data分区容量大于500G,则表空间文件上线可设置为500G;&lt;/p&gt;
&lt;p&gt;disql SYSDBA/SYSDBA@192.168.81.81:5236&lt;/p&gt;
&lt;p&gt;--表空间和数据库用户应用自己建
--创建表空间
create tablespace &quot;rural&quot; datafile &apos;/dm8_data/rural/rural.DBF&apos; size 10240 AUTOEXTEND ON NEXT 2048;
--创建索引表空间(数据量小项目可以不必,数据量大的项目需要分开维护)
create tablespace &quot;rural_idx&quot; datafile &apos;/dm8_data/rural/rural_idx.DBF&apos; size 5120 AUTOEXTEND ON NEXT 2048;
--创建用户
CREATE USER &quot;rural&quot; IDENTIFIED BY &quot;admin1234&quot; DEFAULT TABLESPACE &quot;rural&quot; DEFAULT INDEX TABLESPACE &quot;rural_idx&quot;;
--赋予权限
GRANT &quot;PUBLIC&quot;,&quot;RESOURCE&quot;,&quot;VTI&quot;,&quot;SOI&quot;,&quot;SVI&quot; TO &quot;rural&quot;;
--取消用户登陆限制
alter user &quot;rural&quot; limit failed_login_attemps unlimited,password_lock_time unlimited,password_grace_time unlimited;&lt;/p&gt;
&lt;p&gt;--删除用户
drop user &quot;rural&quot; cascade;
--删除表空间
drop tablespace &quot;rural&quot;;
drop tablespace &quot;rural_idx&quot;;&lt;/p&gt;
&lt;p&gt;--创建只读用户,DBQUERY
CREATE USER &quot;DBQUERY&quot; IDENTIFIED BY &quot;DBQUERY168&quot; read only;
--赋予权限
grant CREATE SESSION,SELECT ANY TABLE,SELECT ANY VIEW TO &quot;DBQUERY&quot;;
--更改sysdba密码
alter user &quot;SYSDBA&quot; identified by &quot;oracle&quot;;&lt;/p&gt;
&lt;p&gt;5.归档配置
1&amp;gt;查询归档
select PARA_NAME,PARA_VALUE,DEFAULT_VALUE from v$dm_ini where para_name LIKE &apos;%ARCH_INI%&apos;;&lt;/p&gt;
&lt;p&gt;2&amp;gt;查询归档状态
Select * from v$arch_status;&lt;/p&gt;
&lt;p&gt;3&amp;gt;检查归档参数是否生效
cd /dm8_data/rural/
cat dm.ini|grep -i ARCH_INI&lt;/p&gt;
&lt;p&gt;4&amp;gt;归档自动删除
注意：归档之前已经配置，不需要再次执行
###按照归档大小删除
ARCH_SPACE_LIMIT：Redo日志归档空间限制，当同一节点的本地归档文件或远程归档文件达到限制值时，
系统自动删除最早生成的归档日志文件。0表示无空间限制，取值范围（1024M~2147483647M），
对本地归档和远程归档有效，缺省为0。可手动修改dmarch.ini中ARCH_SPACE_LIMIT参数，也可执行sql:
alter database modify archivelog &apos;DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=200, SPACE_LIMIT=10240&apos;;&lt;/p&gt;
&lt;p&gt;###按照时间删除
ARCH_RESERVE_TIME：归档日志保留时间，单位分钟，取值范围（0~4294967294）。
只对远程归档和本地归档有效，服务器每隔5分钟检查是否存在超过保留时间的归档并删除。
默认为0，表示不删除归档。手动修改dmarch.ini中ARCH_RESERVE_TIME参数，更改为1440即归档保留24小时。&lt;/p&gt;
&lt;p&gt;6.定时备份及删除
#全量+删除
--说明:每天23:30生成统计信息,全量备份,删除30天前的全量备份
--注意开启归档,备份路径/backup/dailybak
call SP_INIT_JOB_SYS(1);
call SP_CREATE_JOB(&apos;coun_bakall_delall&apos;,1,0,&apos;&apos;,0,0,&apos;&apos;,0,&apos;每天 23:00 全量备份、删除 30 天前的全量备份&apos;);
call SP_JOB_CONFIG_START(&apos;coun_bakall_delall&apos;);
call SP_ADD_JOB_STEP(&apos;coun_bakall_delall&apos;, &apos;coun&apos;, 0, &apos;CALL SP_DB_STAT_INIT();&apos;, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP(&apos;coun_bakall_delall&apos;, &apos;bakall&apos;, 6, &apos;01020000/backup/dailybak&apos;, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_STEP(&apos;coun_bakall_delall&apos;, &apos;delall&apos;, 0, &apos;SF_BAKSET_BACKUP_DIR_ADD(&apos;&apos;DISK&apos;&apos;,&apos;&apos;/backup/dailybak&apos;&apos;);
CALL SP_DB_BAKSET_REMOVE_BATCH(&apos;&apos;DISK&apos;&apos;,SYSDATE-30);&apos;, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(&apos;coun_bakall_delall&apos;, &apos;coun_bakall_delall_time01&apos;, 1, 1, 1, 0, 0, &apos;23:30:00&apos;, NULL, &apos;2019-01-01 01:01:01&apos;, NULL, &apos;&apos;);
call SP_JOB_CONFIG_COMMIT(&apos;coun_bakall_delall&apos;);&lt;/p&gt;
&lt;p&gt;#全量+增量+删除(建议采用)
SP_INIT_JOB_SYS(1);
call SP_CREATE_JOB(&apos;bakall_one&apos;,1,0,&apos;&apos;,0,0,&apos;&apos;,0,&apos;执行一次全量备份&apos;);
call SP_JOB_CONFIG_START(&apos;bakall_one&apos;);
call SP_ADD_JOB_STEP(&apos;bakall_one&apos;, &apos;bakall_one_work&apos;, 6, &apos;01020000/backup/dailybak&apos;, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(&apos;bakall_one&apos;, &apos;bakall_one_time&apos;, 1, 0, 0, 0, 0, NULL, NULL, &apos;2023-07-04 14:50:00&apos;, NULL, &apos;&apos;);
call SP_JOB_CONFIG_COMMIT(&apos;bakall_one&apos;);&lt;/p&gt;
&lt;p&gt;--创建代理环境
call SP_INIT_JOB_SYS(1);
call SP_DROP_JOB(&apos;full_bak&apos;);
call SP_DROP_JOB(&apos;inc_bak&apos;);
call SP_DROP_JOB(&apos;del_bak&apos;);&lt;/p&gt;
&lt;p&gt;--创建全备作业
call SP_CREATE_JOB(&apos;full_bak&apos;,1,0,&apos;&apos;,0,0,&apos;&apos;,0,&apos;周六2:00做全备&apos;);
call SP_JOB_CONFIG_START(&apos;full_bak&apos;);
call SP_ADD_JOB_STEP(&apos;full_bak&apos;, &apos;step1&apos;, 6, &apos;01000000/backup/dailybak&apos;, 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(&apos;full_bak&apos;, &apos;step2&apos;, 1, 2, 1, 64, 0, &apos;02:00:00&apos;, NULL, &apos;2023-07-04 14:00:00&apos;, NULL, &apos;&apos;);
call SP_JOB_CONFIG_COMMIT(&apos;full_bak&apos;);&lt;/p&gt;
&lt;p&gt;--创建增量作业
call SP_CREATE_JOB(&apos;inc_bak&apos;,1,0,&apos;&apos;,0,0,&apos;&apos;,0,&apos;周日到周五2:00做增备&apos;);
call SP_JOB_CONFIG_START(&apos;inc_bak&apos;);
call SP_ADD_JOB_STEP(&apos;inc_bak&apos;, &apos;step1&apos;, 6, &apos;11000000/backup/dailybak|/backup/dailybak/&apos;, 1, 2, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(&apos;inc_bak&apos;, &apos;step2&apos;, 1, 2, 1, 63, 0, &apos;02:00:00&apos;, NULL, &apos;2023-07-04 00:00:00&apos;, NULL, &apos;&apos;);
call SP_JOB_CONFIG_COMMIT(&apos;inc_bak&apos;);&lt;/p&gt;
&lt;p&gt;--创建定时删除作业
call SP_CREATE_JOB(&apos;del_bak&apos;,1,0,&apos;&apos;,0,0,&apos;&apos;,0,&apos;每天凌晨3点删除14天前的备份&apos;);
call SP_JOB_CONFIG_START(&apos;del_bak&apos;);
call SP_ADD_JOB_STEP(&apos;del_bak&apos;, &apos;step1&apos;, 0, &apos;SF_BAKSET_BACKUP_DIR_ADD(&apos;&apos;DISK&apos;&apos;,&apos;&apos;/backup/dailybak&apos;&apos;);
CALL SP_DB_BAKSET_REMOVE_BATCH(&apos;&apos;null&apos;&apos;,SYSDATE-14);&apos;, 1, 1, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(&apos;del_bak&apos;, &apos;step2&apos;, 1, 1, 1, 0, 0, &apos;03:00:00&apos;, NULL, &apos;2023-07-04 00:00:00&apos;, NULL, &apos;&apos;);
call SP_JOB_CONFIG_COMMIT(&apos;del_bak&apos;);&lt;/p&gt;
&lt;p&gt;查看作业执行情况
set pagesize 1000
SELECT EXEC_ID,NAME,START_TIME,END_TIME,ERRCODE,JOBID FROM SYSJOB.SYSJOBHISTORIES2 ORDER BY START_TIME;&lt;/p&gt;
&lt;p&gt;查看失败作业详细信息
SELECT EXEC_ID,ERRCODE,ERRINFO FROM SYSJOB.SYSJOBHISTORIES2 WHERE ERRCODE !=0;&lt;/p&gt;
&lt;p&gt;查看备份任务
SELECT JOB,SCHEMA_USER,LAST_DATE,LAST_SEC,NEXT_DATE,FAILURES,INSTANCE,&quot;INTERVAL&quot; FROM DBA_JOBS;&lt;/p&gt;
&lt;p&gt;查看执行内容
SELECT JOB,WHAT FROM DBA_JOBS;&lt;/p&gt;
&lt;p&gt;7.配置应用连接,创建dm_svc.conf
Linux环境:dm_svc.conf放在应用服务器/etc目录下
Windows32环境:dm_svc.conf放在应用服务器system32目录下
Windows64环境:dm_svc.conf放在应用服务器system32和syswow64目录下&lt;/p&gt;
&lt;p&gt;vi /etc/dm_svc.conf
TIME_ZONE=(+8:00)
LANGUAGE=(cn)
DW1=(192.168.56.81:5236,192.168.81.82:5236)&lt;/p&gt;
&lt;p&gt;[DW1]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)&lt;/p&gt;
&lt;p&gt;###应用连接
&amp;lt;DRIVER&amp;gt;dm.jdbc.driver.DmDriver&amp;lt;/DRIVER&amp;gt;
&amp;lt;URL&amp;gt;jdbc:dm://DW1&amp;lt;/URL&amp;gt;
如果单机配置dm_svc,要注释LOGIN_MODE才能使用,只用到DW1=(192.168.56.81:5236)&lt;/p&gt;
&lt;p&gt;########################################选做########################################&lt;/p&gt;
&lt;p&gt;1.逻辑备份配置在备库上(可选)
vi /dm8/scripts/demo.sh
#/bin/bash
export LD_LIBRARY_PATH=&quot;$LD_LIBRARY_PATH:/dm8/dbms/bin&quot;
export DM_HOME=&quot;/dm8/dbms&quot;
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
#time
CUR_DATE=&lt;code&gt;date +&apos;%Y%m%d%H%M%S&apos;&lt;/code&gt;
#weekday
WEEKDAY_INDEX=&lt;code&gt;date +&apos;%w&apos;&lt;/code&gt;
echo &quot;###begin exp_full_bak ...###&quot;
dexp SYSDBA/**********&lt;em&gt;&lt;em&gt;:35231 file=dexp_CJC_${CUR_DATE}.dmp directory=/backup/dmp log=demo${CUR_DATE}.log OWNER=oracle
echo &quot;###delete dmp history file ...###&quot;
find /backup/dmp -mtime 2 -type f -name &quot;demo&lt;/em&gt;.dmp&quot; -exec rm -rf {} ;
find /backup/dmp -mtime 2 -type f -name &quot;demo&lt;/em&gt;.log&quot; -exec rm -rf {} ;
echo &quot;###end bak ...###&quot;&lt;/p&gt;
&lt;p&gt;#定时任务授权
chmod +x /dm8/scripts/demo.sh&lt;/p&gt;
&lt;p&gt;#配置定时任务，每天晚上23点30分定时执行备份脚本
crontab -e
30 21 * * * su - dmdba -c &quot;/dm8/scripts/demo.sh&quot; 2&amp;gt;/dev/null&lt;/p&gt;
&lt;p&gt;#备份报错处理
如果报错：[-7170]:Bakres failed to connect DMAP. 需要手动启动DmAP服务。
启动服务：
which DmAPService
find /dm -name DmAP*
需要启动DmAP服务
cd /dm8/bin/
./DmAPService status
./DmAPService start
./DmAPService status&lt;/p&gt;
&lt;p&gt;如果报错：[-718]:Archive log collected not consecusive. 可以尝试手动切换归档后进行备份。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; BACKUP DATABASE FULL BACKUPSET &apos;/backup/dmp/CJC_full_bak_20220426&apos;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BACKUP DATABASE FULL BACKUPSET &apos;/dm/dmbak/CJC_full_bak_20220426&apos;;
[-718]:Archive log collected not consecusive.
used time: 781.071(ms). Execute id is 0.&lt;/p&gt;
&lt;p&gt;手动切换归档&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; alter system switch logfile;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2.定时全库收集统计信息(可选)
--创建统计信息记录表
drop table MY_TAB_STATS;
create table MY_TAB_STATS(tab_num int identity(1,1),
tab_name varchar2(100),
stat_time timestamp(6),
stat_err varchar(1000));
--初始化统计信息记录表
truncate table MY_TAB_STATS;
select * from MY_TAB_STATS;
insert into MY_TAB_STATS(TAB_NAME) select table_name from all_tables where owner=&apos;EKP&apos;;
update MY_TAB_STATS set stat_time = to_date(&apos;1970-01-01 00:00:00&apos;);
commit;&lt;/p&gt;
&lt;p&gt;--开始更新
sf_set_session_para_value(&apos;HAGR_HASH_SIZE&apos;,100000000);
set serveroutput on
call stat_zzj(0,100);
create or replace procedure stat_zzj(a int,b int)
as
num_start int;
num_end int;
BEGIN
num_start=a;
num_end=b;
FOR TB IN ( select tab_num,tab_name from MY_TAB_STATS where tab_num &amp;gt; a and tab_num &amp;lt;b ) loop
begin
DBMS_STATS.GATHER_TABLE_STATS(&apos;EKP&apos;,TB.TAB_NAME,NULL,100,TRUE,&apos;FOR ALL COLUMNS SIZE AUTO&apos;);
UPDATE MY_TAB_STATS SET STAT_TIME = SYSDATE WHERE TAB_NUM = TB.TAB_NUM;
COMMIT;
print TB.TAB_NAME||&apos; Done,Current Time is &apos;|| sysdate;
exception
when others then
update MY_TAB_STATS SET STAT_TIME = SYSDATE,
STAT_ERR  = SQLCODE||&apos;&apos;||SQLERRM
WHERE TAB_NUM = TB.TAB_NUM;
END;
END LOOP;
END;&lt;/p&gt;
&lt;p&gt;--创建定时收集统计信息的作业
call SP_CREATE_JOB(&apos;stat_zzj&apos;,1,0,&apos;&apos;,0,0,&apos;&apos;,0,&apos;&apos;);
call SP_JOB_CONFIG_START(&apos;stat_zzj&apos;);
call SP_JOB_SET_EP_SEQNO(&apos;stat_zzj&apos;,0);
call SP_ADD_JOB_STEP(&apos;stat_zzj&apos;, &apos;step1&apos;, 0, &apos;call stat_zzj(0,100);&apos;, 0, 0, 0, 0, NULL, 0);
call SP_ADD_JOB_SCHEDULE(&apos;stat_zzj&apos;, &apos;step2&apos;, 1, 0, 0, 0, 0, NULL, NULL, &apos;2023-05-31 22:00:00&apos;, NULL, &apos;&apos;);
call SP_JOB_CONFIG_COMMIT(&apos;stat_zzj&apos;);&lt;/p&gt;
</content:encoded></item><item><title>redis日常运维</title><link>https://blog.newworld.help/posts/redis%E6%97%A5%E5%B8%B8%E8%BF%90%E7%BB%B4/</link><guid isPermaLink="true">https://blog.newworld.help/posts/redis%E6%97%A5%E5%B8%B8%E8%BF%90%E7%BB%B4/</guid><description>redis-cli -h 127.0.0.1 -p 6379</description><pubDate>Mon, 22 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;参考
https://blog.csdn.net/whatday/article/details/102924661/&lt;/p&gt;
&lt;p&gt;1.连接本地redis数据库
redis-cli&lt;/p&gt;
&lt;p&gt;2.远程连接redis
redis-cli -h 127.0.0.1 -p 6379&lt;/p&gt;
&lt;p&gt;如果设置了密码
redis-cli -h  -p  -a&lt;/p&gt;
&lt;p&gt;3.通过服务的方式来进行查看
systemctl status redis_6379
● redis_6379.service - LSB: start and stop redis_6379
Loaded: loaded (/etc/rc.d/init.d/redis_6379; bad; vendor preset: disabled)
Active: inactive (dead)
Docs: man:systemd-sysv-generator(8)&lt;/p&gt;
&lt;p&gt;查看服务状态
service redis_6379 status
Redis is running (6952)&lt;/p&gt;
&lt;p&gt;4.启停命令
service redis_6379 start                              ##启动redis，端口6379
service redis_6379 stop                               ##停止端口号为6379 的redis&lt;/p&gt;
&lt;p&gt;5.Redis语法
set name demo    -- 插入一个键值,键(key)名为name,值(value)demo
get name         -- 查询一个键名为name的值
keys *           -- 查询所有键名
shutdown         -- 关闭数据库,关键字不保存或保存NOSAVE|SAVE
select 6         -- 切换到6号数据库
dbsize           -- 查看当前n号数据库所占size大小
flushdb          -- 清空当前n号数据库内存
flushall         -- 清空全部数据库内存&lt;/p&gt;
&lt;p&gt;1.查看所有cluster nodes节点信息
redis-cli -h 192.168.1.17 -p 7078 -a 8kutnyedZm cluster nodes&lt;/p&gt;
&lt;p&gt;2.清理redis,主库执行
#检查数据库中键值对的数量
redis-cli -h 192.168.1.17 -p 7078 -a 8kutnyedZm dbsize
清key清内存
redis-cli -h 192.168.1.18 -p 7078 -a 8kutnyedZm R6F7N6YGnETTw-flushdb
redis-cli -h 192.168.1.19 -p 7078 -a 8kutnyedZm R6F7N6YGnETTw-flushdb
redis-cli -h 192.168.1.17 -p 7078 -a 8kutnyedZm R6F7N6YGnETTw-flushdb
#sqm服务器
redis-cli -h 192.168.1.17 -p 7007 -a iqWe5BtJCR iZaLqeyIgcrBA-flushall&lt;/p&gt;
&lt;p&gt;#再次检查数据库中键值对的数量
redis-cli -h 192.168.1.17 -p 7078 -a 8kutnyedZm dbsize&lt;/p&gt;
&lt;p&gt;#chatgdp搜索仅供参考
该命令是使用redis-cli工具连接到主机为29.3.223.42、端口为7078的Redis实例，并使用密码&quot;8kutnyedZm&quot;进行身份验证。
命令&quot;flushdb&quot;用于清空当前数据库中的所有键值对。
命令&quot;dbsize&quot;用于获取当前数据库中键值对的数量。&lt;/p&gt;
&lt;p&gt;要清理Redis内存，可以采取以下几种方法：
使用Redis的持久化机制：Redis可以通过将数据写入磁盘来进行持久化，可以选择使用RDB快照或者AOF日志两种方式。你可以通过配置Redis，定期进行RDB快照或者AOF日志重写，以清理内存并将数据存储到磁盘中。
使用过期时间：在设置键值对时，可以为键设置过期时间。当键过期后，Redis会自动清除该键值对，释放内存空间。
使用内存淘汰策略：当Redis内存超过设定的阈值时，可以启用内存淘汰策略，根据设定的规则淘汰部分数据，释放内存空间。常见的内存淘汰策略有LRU（最近最少使用）、LFU（最不经常使用）等。
使用Redis的删除命令：可以通过使用DEL命令来手动删除不再需要的键值对，以释放内存空间。
重启Redis服务：在没有持久化数据的情况下，可以通过重启Redis服务来清空内存，但请注意重启会导致服务中断和数据丢失。
需要注意的是，在清理Redis内存时要慎重操作，确保数据的重要性和一致性。最好在清理前备份数据，并在生产环境中谨慎执行清理操作。&lt;/p&gt;
&lt;p&gt;以下是常用Redis用于删除键值对的几个删除命令,从而清理内存：&lt;/p&gt;
&lt;p&gt;DEL key [key ...]：删除指定的键值对。可以同时指定多个键进行删除。
UNLINK key [key ...]：异步删除指定的键值对。与DEL命令不同，UNLINK命令将删除键的操作放入后台执行，不会阻塞客户端。适用于大量键的删除操作。
FLUSHDB：删除当前数据库中的所有键值对。
FLUSHALL：删除Redis中所有数据库中的键值对。&lt;/p&gt;
&lt;p&gt;需要注意的是，删除键值对并不会立即释放内存，Redis会在后台进行内存回收。如果需要立即释放内存，可以考虑使用以下方法之一：
使用UNLINK命令异步删除键值对，然后使用BGREWRITEAOF命令或BGSAVE命令生成AOF文件或RDB快照文件，最后重启Redis服务。这将清空所有键值对并释放内存。
在Redis配置文件中启用maxmemory-p******选项，设置合适的内存淘汰策略，使Redis自动淘汰部分数据以释放内存。
请注意，在执行删除操作时，要谨慎操作并确保备份重要数据，以避免数据丢失。&lt;/p&gt;
&lt;p&gt;3.修改键值删除策略
config set maxmemory-p****** allkeys-lru
config rewrite&lt;/p&gt;
&lt;p&gt;auth C6ca#W4!8v
WPtSjUd9KN72-config set maxmemory-p****** allkeys-lru
WPtSjUd9KN72-config rewrite&lt;/p&gt;
&lt;p&gt;#chatgdp搜索仅供参考
该命令是使用redis-cli工具连接到Redis实例，并进行一系列操作：
使用&quot;config set maxmemory-p****** allkeys-lru&quot;命令设置Redis实例的内存淘汰策略为&quot;allkeys-lru&quot;，即基于LRU算法淘汰键。
使用&quot;config rewrite&quot;命令将配置更改写入到配置文件中，以便永久保存配置。
使用&quot;auth C6ca#W4!8v&quot;命令进行身份验证，密码为&quot;C6ca#W4!8v&quot;。
使用&quot;WPtSjUd9KN72-config set maxmemory-p****** allkeys-lru&quot;命令设置Redis实例的内存淘汰策略为&quot;allkeys-lru&quot;，该命令中的&quot;WPtSjUd9KN72-&quot;为密码。
使用&quot;WPtSjUd9KN72-config rewrite&quot;命令将配置更改写入到配置文件中，该命令中的&quot;WPtSjUd9KN72-&quot;为密码。
注意：上述命令中的密码部分是示例，请根据实际情况替换为正确的密码。同时，请谨慎操作配置和密码相关的命令，确保安全性和正确性&lt;/p&gt;
&lt;p&gt;4.判断是否共库 - 多人使用同一个库
scan 0 count 100
client list&lt;/p&gt;
&lt;p&gt;&quot;scan 0 count 100&quot; 命令用于迭代遍历 Redis 数据库中的键。
它使用游标来实现逐步遍历，避免一次性返回所有键的开销。
该命令的参数 &quot;0&quot; 表示起始游标，&quot;count 100&quot; 表示每次迭代返回的最大键数量为 100。
您可以使用不同的游标和计数值来分批获取键。&lt;/p&gt;
&lt;p&gt;&quot;client list&quot; 命令用于获取连接到 Redis 服务器的客户端列表信息。
该命令返回一个包含客户端详细信息的列表，包括客户端的唯一标识符、地址、连接状态等。
通过查看客户端列表，可以监控和管理与 Redis 服务器的连接情况。&lt;/p&gt;
&lt;p&gt;5.内存扩容
config set maxmemory 内存大小;    --先扩slave再扩容master
config rewrite&lt;/p&gt;
</content:encoded></item><item><title>端口号被占用kill</title><link>https://blog.newworld.help/posts/%E7%AB%AF%E5%8F%A3%E5%8F%B7%E8%A2%AB%E5%8D%A0%E7%94%A8kill/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E7%AB%AF%E5%8F%A3%E5%8F%B7%E8%A2%AB%E5%8D%A0%E7%94%A8kill/</guid><description>netstat -ano|grep 8899|wc -l</description><pubDate>Sun, 21 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;netstat -ano|grep 8899|wc -l
netstat -tunlp|grep 3100
netstat -tunlp|grep 服务pid&lt;/p&gt;
&lt;p&gt;netstat -nltp 列所有&lt;/p&gt;
&lt;p&gt;查看 Linux 系统上的端口是否在使用中，可以使用以下命令：
1.使用 netstat 命令：netstat -tuln。这会显示所有当前监听的 TCP 和 UDP 端口。您可以查找特定的端口号是否在列表中。
2.使用 ss 命令：ss -tuln。ss 命令是一个功能更强大的替代品，可以显示更详细的端口信息。
3.使用 lsof 命令：lsof -i :&amp;lt;端口号&amp;gt;。这会显示占用特定端口的进程和应用程序。
4.使用 nmap 命令：nmap -p &amp;lt;端口号&amp;gt; &amp;lt;IP地址&amp;gt;。nmap 是一个网络扫描工具，可以用来检测特定 IP 地址上的端口状态。&lt;/p&gt;
&lt;p&gt;请注意，上述命令可能需要以超级用户或管理员权限运行，例如使用 sudo 前缀。此外，对于某些命令，您可能需要先安装相应的软件包，如 nmap。&lt;/p&gt;
&lt;p&gt;要终止 Linux 系统上的端口连接，您可以使用以下方法：
1.使用 lsof 命令结合 kill 命令：首先使用 lsof -i :&amp;lt;端口号&amp;gt; 命令查找占用该端口的进程的 PID（进程 ID），
然后使用 kill &amp;lt;PID&amp;gt; 命令终止该进程。例如，要终止占用端口 8080 的进程，
可以执行以下命令：lsof -i :8080 查找 PID，然后 kill &amp;lt;PID&amp;gt; 终止该进程。
2.使用 fuser 命令结合 kill 命令：类似于 lsof，可以使用 fuser &amp;lt;端口号&amp;gt;/tcp 命令查找占用端口的进程，
并使用 kill 命令终止进程。例如，fuser 8080/tcp 查找并终止占用端口 8080 的进程。
3.使用 netstat 命令结合 kill 命令：可以使用 netstat -tuln 命令查看所有监听的端口和与之关联的进程的 PID。然后，使用 kill &amp;lt;PID&amp;gt; 命令终止进程。&lt;/p&gt;
&lt;p&gt;请注意，在执行这些命令时，可能需要以超级用户或管理员权限运行，例如使用 sudo 前缀。确保正确识别并终止特定端口的进程，以免对系统造成不良影响。
lsof -i :8899
kill -9 pid&lt;/p&gt;
&lt;p&gt;###查看Windows端口占用
1.下面命令可以查到ID(PID)
netstat -ano | findstr 7890&lt;/p&gt;
&lt;p&gt;2.输入Win + R，输入“resmon.exe” 通过资源监视器可以查看具体是哪个进程&lt;/p&gt;
&lt;p&gt;3.tasklist |findstr &quot;进程名称&quot;查找该进程的PID号
tasklist |findstr java&lt;/p&gt;
&lt;p&gt;4.杀进程
taskkill /f /t /pid &quot;进程PID&quot;
taskkill /f /t /pid 12260&lt;/p&gt;
</content:encoded></item><item><title>full_xtrbackup</title><link>https://blog.newworld.help/posts/full_xtrbackup/</link><guid isPermaLink="true">https://blog.newworld.help/posts/full_xtrbackup/</guid><description>base_path=/backup/dailybak/mysql/anytxn/</description><pubDate>Fri, 12 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;########################################################################&lt;/p&gt;
&lt;h1&gt;script name: full_bak.sh&lt;/h1&gt;
&lt;h1&gt;description: mysql full backup&lt;/h1&gt;
&lt;h1&gt;date: 2017-06-14&lt;/h1&gt;
&lt;h1&gt;author: 1616&lt;/h1&gt;
&lt;p&gt;########################################################################&lt;/p&gt;
&lt;p&gt;#!/bin/bash&lt;/p&gt;
&lt;h1&gt;backup_base_dir&lt;/h1&gt;
&lt;p&gt;base_path=/backup/dailybak/mysql/anytxn/&lt;/p&gt;
&lt;h1&gt;current_date&lt;/h1&gt;
&lt;p&gt;bak_date=&lt;code&gt;date &quot;&quot;+%Y-%m-%d_%H:%M:%S&quot;&quot;&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;log_date&lt;/h1&gt;
&lt;p&gt;log_date=&lt;code&gt;date &quot;&quot;+%Y-%m-%d_%H:%M:%S&quot;&quot;&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;log_path&lt;/h1&gt;
&lt;p&gt;log_path=$base_path/bak_log&lt;/p&gt;
&lt;h1&gt;current_backup_dir&lt;/h1&gt;
&lt;p&gt;bak_path=$base_path/full_$bak_date&lt;/p&gt;
&lt;h1&gt;keep backup days&lt;/h1&gt;
&lt;p&gt;kbd=6&lt;/p&gt;
&lt;h1&gt;if not exist base_path, then create it&lt;/h1&gt;
&lt;p&gt;if [ ! -d $base_path ]; then
mkdir $base_path
fi&lt;/p&gt;
&lt;h1&gt;if not exist log_path, then create it&lt;/h1&gt;
&lt;p&gt;if [ ! -d $log_path ]; then
mkdir $log_path
fi&lt;/p&gt;
&lt;p&gt;echo &quot;&quot;================&lt;code&gt;date &apos;+%F %H:%M:%S&apos;&lt;/code&gt; Begin Backup database================&quot;&quot; &amp;gt;&amp;gt;$log_path/full_$log_date.log&lt;/p&gt;
&lt;p&gt;#full backup&lt;/p&gt;
&lt;p&gt;/mysql/xtrabackup/bin/xtrabackup  --defaults-file=/mysql/ilms/conf/my.cnf --host=127.0.0.1  --user=root --password=&apos;Root%1234&apos; --backup --compress --target-dir=$bak_path 2&amp;gt;&amp;gt;$log_path/full_$log_date.log&lt;/p&gt;
&lt;p&gt;echo &quot;&quot;================&lt;code&gt;date &apos;+%F %H:%M:%S&apos;&lt;/code&gt; Finish Backup database================&quot;&quot; &amp;gt;&amp;gt;$log_path/full_$log_date.log&lt;/p&gt;
&lt;p&gt;#delete obsoleted&lt;/p&gt;
&lt;p&gt;echo &quot;&quot;================&lt;code&gt;date &apos;+%F %H:%M:%S&apos;&lt;/code&gt; Delete obsoleted Backup===============&quot;&quot; &amp;gt;&amp;gt;$log_path/full_$log_date.log&lt;/p&gt;
&lt;p&gt;if [ ! &lt;code&gt;find $base_path -type d -name &apos;full*&apos; -mtime +$kbd &amp;amp;&amp;amp; find $base_path -type d -name &apos;inc*&apos; -mtime +$kbd&lt;/code&gt; ]; then
echo &quot;&quot;no obsolete backup found!&quot;&quot; &amp;gt;&amp;gt;$log_path/full_$log_date.log
else
find $base_path -type d -name &apos;full*&apos; -mtime +$kbd &amp;gt;&amp;gt; $log_path/full_$log_date.log
find $base_path -type d -name &apos;full*&apos; -mtime +$kbd | xargs rm -rf
fi&lt;/p&gt;
&lt;p&gt;echo &quot;&quot;================&lt;code&gt;date &apos;+%F %H:%M:%S&apos;&lt;/code&gt; Finish Delete obsoleted===============&quot;&quot; &amp;gt;&amp;gt;$log_path/full_$log_date.log&lt;/p&gt;
</content:encoded></item><item><title>GaussDB数据库开发设计</title><link>https://blog.newworld.help/posts/gaussdb%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BC%80%E5%8F%91%E8%AE%BE%E8%AE%A1/</link><guid isPermaLink="true">https://blog.newworld.help/posts/gaussdb%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BC%80%E5%8F%91%E8%AE%BE%E8%AE%A1/</guid><description>3.1 选择服务列表-弹性云服务器，在服务器列表找到ecs-hccdp</description><pubDate>Mon, 18 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;3 登录ECS云服务器
3.1 选择服务列表-弹性云服务器，在服务器列表找到ecs-hccdp
3.2 查看预支好的ecs-os绑定的弹性ip
3.3 打开桌面上的终端 ，使用如下命令登录ecs-hccdp.(用实际弹性ip地址替换命令中的EIP)&lt;/p&gt;
&lt;p&gt;ssh root@EIP&lt;/p&gt;
&lt;p&gt;3.4 下载GaussDB链接工具并解压
wget https://dbs-download.obs.cn-north-1.myhuaweicloud.com/GaussDB/1642684986086/GaussDB_opengauss_client_tools.zip
unzip GaussDB_opengauss_client_tools.zip
cd /root/GaussDB_opengauss_client_tools/Euler2.5_X86_64
cp GaussDB-Kernel-V500R001C20-EULER-64bit-gsql.tar.gz /opt
cd /opt/
tar -zxvf GaussDB-Kernel-V500R001C20-EULER-64bit-gsql.tar.gz
source gsql_env.sh&lt;/p&gt;
&lt;p&gt;3.5 使用gsql客户端连接数据库，并创建数据库及对应用户，以下命令的192.168.0.50是GaussDB主节点的IP，Test-1234是数据库密码，请根据实际情况替换
gsql -h 192.168.0.50 -d postgres -p 8000 -U root -W Test-1234 -r&lt;/p&gt;
&lt;p&gt;3.6 创建一个&apos;devdb&apos;的库并登录
CREATE DATABASE devdb ENCODING &apos;UTF8&apos; template = template0;
\q
gsql -h 192.168.0.50 -d devdb -p 8000 -U root -W Test-1234 -r
CREATE USER hccdp SYSADMIN IDENTIFIED BY &quot;NHY^7ujm&quot;;
\q&lt;/p&gt;
&lt;p&gt;3.7 登录devdb库，192.168.0.50是主节点IP注意根据实际情况更换，hccdp是用户名，NHY^7ujm是密码
gsql -h 192.168.0.50 -d devdb -p 8000 -U hccdp -W NHY^7ujm -r&lt;/p&gt;
&lt;p&gt;4 使用create语句创建表
由于存在外键关联，需要注意创建先后顺序
--1
CREATE TABLE bmsql_warehouse (
w_id integer NOT NULL,
w_ytd numeric(12,2),
w_tax numeric(4,4),
w_name character varying(10),
w_street_1 character varying(20),
w_street_2 character varying(20),
w_city character varying(20),
w_state character(2),
w_zip character(9)
);
ALTER TABLE bmsql_warehouse ADD CONSTRAINT bmsql_warehouse_pkey PRIMARY KEY (w_id);
--2
CREATE TABLE bmsql_district (
d_w_id integer NOT NULL,
d_id integer NOT NULL,
d_ytd numeric(12,2),
d_tax numeric(4,4),
d_next_o_id integer,
d_name character varying(10),
d_street_1 character varying(20),
d_street_2 character varying(20),
d_city character varying(20),
d_state character(2),
d_zip character(9),
CONSTRAINT d_warehouse_fkey FOREIGN KEY (d_w_id) REFERENCES bmsql_warehouse(w_id)
);
ALTER TABLE bmsql_district ADD CONSTRAINT bmsql_district_pkey PRIMARY KEY (d_w_id, d_id);
--3
CREATE TABLE bmsql_customer (
c_w_id integer NOT NULL,
c_d_id integer NOT NULL,
c_id integer NOT NULL,
c_discount numeric(4,4),
c_credit character(2),
c_last character varying(16),
c_first character varying(16),
c_credit_lim numeric(12,2),
c_balance numeric(12,2),
c_ytd_payment numeric(12,2),
c_payment_cnt integer,
c_delivery_cnt integer,
c_street_1 character varying(20),
c_street_2 character varying(20),
c_city character varying(20),
c_state character(2),
c_zip character(9),
c_phone character(16),
c_since timestamp without time zone,
c_middle character(2),
c_data character varying(500),
CONSTRAINT c_district_fkey FOREIGN KEY (c_w_id, c_d_id) REFERENCES bmsql_district(d_w_id, d_id)
);
ALTER TABLE bmsql_customer ADD CONSTRAINT bmsql_customer_pkey PRIMARY KEY (c_w_id, c_d_id, c_id);
--4
CREATE TABLE bmsql_history (
hist_id  serial NOT NULL,
h_c_id integer,
h_c_d_id integer,
h_c_w_id integer,
h_d_id integer,
h_w_id integer,
h_date timestamp without time zone,
h_amount numeric(6,2),
h_data character varying(24),
CONSTRAINT h_district_fkey FOREIGN KEY (h_w_id, h_d_id) REFERENCES bmsql_district(d_w_id, d_id),
CONSTRAINT h_customer_fkey FOREIGN KEY (h_c_w_id, h_c_d_id, h_c_id) REFERENCES bmsql_customer(c_w_id, c_d_id, c_id)
);
ALTER TABLE bmsql_history ADD CONSTRAINT bmsql_history_pkey PRIMARY KEY (hist_id);
--5
CREATE TABLE bmsql_oorder (
o_w_id integer NOT NULL,
o_d_id integer NOT NULL,
o_id integer NOT NULL,
o_c_id integer,
o_carrier_id integer,
o_ol_cnt integer,
o_all_local integer,
o_entry_d timestamp without time zone,
CONSTRAINT o_customer_fkey FOREIGN KEY (o_w_id, o_d_id, o_c_id) REFERENCES bmsql_customer(c_w_id, c_d_id, c_id)
);
ALTER TABLE bmsql_oorder ADD CONSTRAINT bmsql_oorder_pkey PRIMARY KEY (o_w_id, o_d_id, o_id);
--6
CREATE TABLE bmsql_new_order (
no_w_id integer NOT NULL,
no_d_id integer NOT NULL,
no_o_id integer NOT NULL,
CONSTRAINT no_order_fkey FOREIGN KEY (no_w_id, no_d_id, no_o_id) REFERENCES bmsql_oorder(o_w_id, o_d_id, o_id)
);
ALTER TABLE bmsql_new_order ADD CONSTRAINT bmsql_new_order_pkey PRIMARY KEY (no_w_id, no_d_id, no_o_id);
--7
CREATE TABLE bmsql_item (
i_id integer NOT NULL,
i_name character varying(24),
i_price numeric(5,2),
i_data character varying(50),
i_im_id integer
);
ALTER TABLE bmsql_item ADD CONSTRAINT bmsql_item_pkey PRIMARY KEY (i_id);
--8
CREATE TABLE bmsql_stock (
s_w_id integer NOT NULL,
s_i_id integer NOT NULL,
s_quantity integer,
s_ytd integer,
s_order_cnt integer,
s_remote_cnt integer,
s_data character varying(50),
s_dist_01 character(24),
s_dist_02 character(24),
s_dist_03 character(24),
s_dist_04 character(24),
s_dist_05 character(24),
s_dist_06 character(24),
s_dist_07 character(24),
s_dist_08 character(24),
s_dist_09 character(24),
s_dist_10 character(24),
CONSTRAINT s_item_fkey FOREIGN KEY (s_i_id) REFERENCES bmsql_item(i_id),
CONSTRAINT s_warehouse_fkey FOREIGN KEY (s_w_id) REFERENCES bmsql_warehouse(w_id)
);
ALTER TABLE bmsql_stock ADD CONSTRAINT bmsql_stock_pkey PRIMARY KEY (s_w_id, s_i_id);
--9
CREATE TABLE bmsql_order_line (
ol_w_id integer NOT NULL,
ol_d_id integer NOT NULL,
ol_o_id integer NOT NULL,
ol_number integer NOT NULL,
ol_i_id integer NOT NULL,
ol_delivery_d timestamp without time zone,
ol_amount numeric(6,2),
ol_supply_w_id integer,
ol_quantity integer,
ol_dist_info character(24),
CONSTRAINT ol_stock_fkey FOREIGN KEY (ol_supply_w_id, ol_i_id) REFERENCES bmsql_stock(s_w_id, s_i_id),
CONSTRAINT ol_order_fkey FOREIGN KEY (ol_w_id, ol_d_id, ol_o_id) REFERENCES bmsql_oorder(o_w_id, o_d_id, o_id)
);
ALTER TABLE bmsql_order_line ADD CONSTRAINT bmsql_order_line_pkey PRIMARY KEY (ol_w_id, ol_d_id, ol_o_id, ol_number);&lt;/p&gt;
&lt;p&gt;使用以下命令查看创建的表
\d&lt;/p&gt;
&lt;p&gt;三 上传对应数据文件至/root/tpcc/目录下
1 退出gsql
\q
2 上传对应数据文件至/root/tpcc/目录下
mkdir /root/tpcc/
cd /root/tpcc
wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com/gaussdb/tpcc.tar.gz
tar -zxvf tpcc.tar.gz
mv /root/tpcc/home/user/rar/tpcc/bmsql_*  .&lt;/p&gt;
&lt;p&gt;3 进入gsql
cd /opt/
source gsql_env.sh
gsql -h 192.168.0.50  -d devdb -p 8000 -U hccdp -W NHY^7ujm -r&lt;/p&gt;
&lt;p&gt;4 使用\copy命令导入数据
对于bmsql_customer、bmsql_history、bmsql_stock、bmsql_order_line等数据量大的表，数据导入耗时会长些，需耐心等待。
\copy  bmsql_warehouse from &apos;/root/tpcc/bmsql_warehouse.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER  &apos;,&apos;,  ENCODING &apos;utf8&apos;);
\copy  bmsql_district from &apos;/root/tpcc/bmsql_district.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER &apos;,&apos;,  ENCODING &apos;utf8&apos;);
\copy  bmsql_customer from &apos;/root/tpcc/bmsql_customer.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER &apos;,&apos;,  ENCODING &apos;utf8&apos;);
\copy  bmsql_history from &apos;/root/tpcc/bmsql_history.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER &apos;,&apos;,  ENCODING &apos;utf8&apos;);
\copy  bmsql_oorder from &apos;/root/tpcc/bmsql_oorder.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER &apos;,&apos;,  ENCODING &apos;utf8&apos;);
\copy  bmsql_item from &apos;/root/tpcc/bmsql_item.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER &apos;,&apos;,  ENCODING &apos;utf8&apos;);
\copy  bmsql_new_order from &apos;/root/tpcc/bmsql_new_order.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER &apos;,&apos;,  ENCODING &apos;utf8&apos;);
\copy  bmsql_stock from &apos;/root/tpcc/bmsql_stock.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER &apos;,&apos;,  ENCODING &apos;utf8&apos;);
\copy  bmsql_order_line from &apos;/root/tpcc/bmsql_order_line.csv&apos; with ( FORMAT &apos;csv&apos;, DELIMITER &apos;,&apos;,  ENCODING &apos;utf8&apos;);&lt;/p&gt;
&lt;p&gt;analyze bmsql_stock;
analyze bmsql_order_line;
analyze bmsql_warehouse;
analyze bmsql_district;
analyze bmsql_customer;
analyze bmsql_history;
analyze bmsql_oorder;
analyze bmsql_new_order;
analyze bmsql_item;
所有命令执行失败，因为上一步的wget *并没有下载任何源文件
使用以下命令查看对应的表是否导入数据，其中bmsql_customer是当中某个表表名&lt;/p&gt;
&lt;p&gt;SELECT count(*) FROM bmsql_customer;&lt;/p&gt;
&lt;p&gt;四 添加约束以及索引
1 添加唯一约束
CREATE UNIQUE INDEX bmsql_oorder_idx1 ON bmsql_oorder USING btree (o_w_id, o_d_id, o_carrier_id, o_id);
GaussDB和MySQL系统表不同，无法通过以上SQL语句查看表结果，需要求助产品同事&lt;/p&gt;
&lt;p&gt;2 添加索引
create index bmsql_customer_idx1 on bmsql_customer (c_w_id, c_d_id, c_last, c_first);
--通过以下命令查询创建的索引
\di bmsql_customer_idx1         --di 查看索引对象
GaussDB和MySQL系统表不同，无法通过以上SQL语句查看表结果，需要求助产品同事&lt;/p&gt;
&lt;p&gt;五 SQL查询。
接下来的实验依托TPCC业务逻辑开展，相关SQL语句中的“？”可以替换为前面表中的数据。&lt;/p&gt;
&lt;p&gt;1 新建订单
TPCC中，新建订单事务对应的内容为：对于任意一个客户端，从固定的仓库随机选取 5-15 件商品，创建新订单，其中 1%的订单要由假想的用户操作失败而回滚。
此类事务在整个TPCC测试用例中占比 : 45%。
以下是新建订单事务中的语句举例：
以仓库id关联客户表和仓库表，查询客户及仓库相关信息
SELECT c_discount, c_last, c_credit, w_tax FROM bmsql_customer JOIN bmsql_warehouse ON (w_id = c_w_id) WHERE c_w_id = 1 AND c_d_id = 1 AND c_id = 114;
更新地区表
SELECT d_tax, d_next_o_id FROM bmsql_district WHERE d_w_id = 1 AND d_id = 1 FOR UPDATE;
UPDATE bmsql_district SET d_next_o_id = d_next_o_id + 1 WHERE d_w_id = 1 AND d_id = 1;
在新订单表中插入数据（未发货）
INSERT INTO bmsql_oorder (o_id, o_d_id, o_w_id, o_c_id, o_entry_d,o_ol_cnt, o_all_local)VALUES (3001, 1, 1, 114,&apos;2023-02-11 15:00&apos; , 14, 1);
在订单总表中插入数据
INSERT INTO bmsql_new_order (no_o_id, no_d_id, no_w_id)VALUES (3001, 1, 1);
查看商品库存
SELECT s_quantity, s_data,s_dist_01, s_dist_02, s_dist_03, s_dist_04,s_dist_05, s_dist_06, s_dist_07, s_dist_08,s_dist_09, s_dist_10 FROM bmsql_stock WHERE s_w_id = 1 AND s_i_id = 1  FOR UPDATE;
更新商品库存信息
UPDATE bmsql_stock SET s_quantity = 90, s_ytd = s_ytd + 4,s_order_cnt = s_order_cnt + 1,s_remote_cnt = s_remote_cnt + 1 WHERE s_w_id = 1 AND s_i_id = 1;
插入订货线数据
INSERT INTO bmsql_order_line (ol_o_id, ol_d_id, ol_w_id, ol_number,ol_i_id, ol_supply_w_id, ol_quantity,ol_amount, ol_dist_info)VALUES (3001, 1, 1, 16, 1, 1, 4, 0, &apos;j6vO1P7KCKKdP73IcBHkkkRQ&apos;);&lt;/p&gt;
&lt;p&gt;2 支付订单
TPCC中，支付订单事务对应的内容为：对于任意一个客户端，从固定的仓库随机选取一个辖区及其内用户，采用随机的金额支付一笔订单，并作相应历史纪录。
此类事务在整个TPCC测试用例中占比 : 43%
以下是支付订单事务中的语句举例：
选择一个仓库:
SELECT w_name, w_street_1, w_street_2, w_city,  w_state, w_zip FROM bmsql_warehouse WHERE w_id = 1;
选择一个辖区
SELECT d_name, d_street_1, d_street_2, d_city, d_state, d_zip FROM bmsql_district WHERE d_w_id = 1 AND d_id = 1;
根据仓库和辖区信息，选择一个客户
SELECT c_id FROM bmsql_customer WHERE c_w_id = 1 AND c_d_id = 1 AND c_last = &apos;BARBARPRI&apos; ORDER BY c_first;
查看该客户信息
SELECT c_first, c_middle, c_last, c_street_1, c_street_2,c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance FROM bmsql_customer WHERE c_w_id = 1 AND c_d_id = 1 AND c_id = 4 FOR UPDATE;
SELECT c_data FROM bmsql_customer WHERE c_w_id = 1 AND c_d_id = 1 AND c_id = 4;
采用随机的金额支付一笔订单，更新客户表、辖区表、仓库表数据
UPDATE bmsql_warehouse SET w_ytd = w_ytd + 3 WHERE w_id = 1;
UPDATE bmsql_district SET d_ytd = d_ytd + 3 WHERE d_w_id = 1 AND d_id = 1;
UPDATE bmsql_customer SET c_balance = c_balance - 50, c_ytd_payment = c_ytd_payment + 50 ,c_payment_cnt = c_payment_cnt + 1 WHERE c_w_id = 1 AND c_d_id = 1 AND c_id = 4;
记录该笔支付至历史表
INSERT INTO bmsql_history (h_id,h_c_id, h_c_d_id, h_c_w_id, h_d_id, h_w_id,h_date, h_amount, h_data)VALUES (300001,4, 1, 1, 1, 1, &apos;2023-02-11&apos;, 50, &apos;succeed&apos;);&lt;/p&gt;
&lt;p&gt;3 查询订单状态
TPCC中，查询订单状态事务对应的内容为：对于任意一个客户端，从固定的仓库随机选取一个辖区及其内用户，读取其最后一条订单，
显示订单内每件商品的状态，此类事务在整个TPCC测试用例中占比 : 4%。
以下是查询订单状态事务中的语句举例：
选择一个客户
SELECT c_id FROM bmsql_customer WHERE c_w_id = 1 AND c_d_id = 2 AND c_last = &apos;BAROUGHTPRES&apos; ORDER BY c_first
查看该客户的相关信息
SELECT c_first, c_middle, c_last, c_balance FROM bmsql_customer WHERE c_w_id = 1 AND c_d_id = 2 AND c_id = 15;
查看该客户的最新一条订单信息
SELECT o_id, o_entry_d, o_carrier_id FROM bmsql_oorder WHERE o_w_id = 1 AND o_d_id = 2 AND o_c_id = 15 AND o_id = (SELECT max(o_id) FROM bmsql_oorder WHERE o_w_id = 1 AND o_d_id = 2 AND o_c_id = 15);
查看订货线中该客户的最新订单的商品状态
SELECT ol_i_id, ol_supply_w_id, ol_quantity,ol_amount, ol_delivery_d FROM bmsql_order_line WHERE ol_w_id = 1 AND ol_d_id = 2 AND ol_o_id = 1229 ORDER BY ol_w_id, ol_d_id, ol_o_id, ol_number;&lt;/p&gt;
&lt;p&gt;4 发货
TPCC中，发货事务对应的内容为：对于任意一个客户端，随机选取一个发货包，更新被处理订单的用户余额，并把该订单从新订单中删除。此类事务在整个TPCC测试用例中占比 : 4%。
以下是发货事务中的语句举例：
选择一个发货包
SELECT min(no_o_id) FROM bmsql_new_order WHERE no_w_id = 2 AND no_d_id = 2 ;
在新订单中删除该发货包数据
DELETE FROM bmsql_new_order WHERE no_w_id = 2 AND no_d_id = 2 AND no_o_id = 2101;
获取该发货包的客户
SELECT o_c_id FROM bmsql_oorder WHERE o_w_id =2 AND o_d_id = 2 AND o_id = 2101;
更新订单总表中信息
SELECT sum(ol_amount) AS sum_ol_amount FROM bmsql_order_line WHERE ol_w_id = 2 AND ol_d_id = 2 AND ol_o_id = 2101;
计算该发货包的订单金额
SELECT sum(ol_amount) AS sum_ol_amount FROM bmsql_order_line WHERE ol_w_id = 2 AND ol_d_id = 2 AND ol_o_id = 2101;
更新订货线中发货状态
UPDATE bmsql_order_line SET ol_delivery_d = &apos;2023-2-11&apos; WHERE ol_w_id = 2 AND ol_d_id = 2 AND ol_o_id = 2101;
根据订单金额，更新用户余额
UPDATE bmsql_customer SET c_balance = c_balance + 31547.84, c_delivery_cnt = c_delivery_cnt + 1 WHERE c_w_id = 2 AND c_d_id = 2 AND c_id = 2855;&lt;/p&gt;
&lt;p&gt;5 查询库存
TPCC中，查询库存事务对应的内容为：对于任意一个客户端，从固定的仓库和辖区随机选取最后 20 条订单，查看订单中所有的货物的库存，计算并显示所有库存低于随机生成域值的商品数量。
此类事务在整个TPCC测试用例中占比 : 4%。
以下是查询库存事务中的语句举例：
选择一个辖区和仓库，并定义一个阈值，按上述要求查看库存&lt;/p&gt;
&lt;p&gt;SELECT count(*) AS low_stock FROM (	SELECT s_w_id, s_i_id, s_quantity  FROM bmsql_stock WHERE s_w_id = 1 AND s_quantity &amp;lt; 60 AND s_i_id IN ( SELECT ol_i_id FROM bmsql_district JOIN bmsql_order_line ON ol_w_id = d_w_id AND ol_d_id = d_id AND ol_o_id &amp;gt;= d_next_o_id - 20 AND ol_o_id &amp;lt; d_next_o_id WHERE d_w_id = 1 AND d_id = 1));&lt;/p&gt;
</content:encoded></item><item><title>替换sql绑定变量</title><link>https://blog.newworld.help/posts/%E6%9B%BF%E6%8D%A2sql%E7%BB%91%E5%AE%9A%E5%8F%98%E9%87%8F/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%9B%BF%E6%8D%A2sql%E7%BB%91%E5%AE%9A%E5%8F%98%E9%87%8F/</guid><description>SELECT t1.sql_id,</description><pubDate>Thu, 14 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;with temp as
(
SELECT t1.sql_id,
lower(T1.sql_text) sql_text,
lower(T2.NAME) name,
DATATYPE_STRING,
CASE
WHEN DATATYPE_STRING = &apos;DATE&apos; THEN &apos;to_date(&apos;&apos;&apos; || replace(T2.VALUE_STRING,&apos;:&apos;,&apos;.&apos;) || &apos;&apos;&apos;,&apos;&apos;mm/dd/yyyy hh24.mi.ss&apos;&apos;)&apos;
WHEN DATATYPE_STRING LIKE &apos;TIMESTAMP%&apos; THEN &apos;to_date(&apos;&apos;&apos; || replace(T2.VALUE_STRING,&apos;:&apos;,&apos;.&apos;) || &apos;&apos;&apos;,&apos;&apos;mm/dd/yyyy hh24.mi.ss&apos;&apos;)&apos;
WHEN DATATYPE_STRING = &apos;NUMBER&apos; THEN T2.VALUE_STRING
ELSE &apos;&apos;&apos;&apos; || T2.VALUE_STRING || &apos;&apos;&apos;&apos;
END VALUE_STRING,
position as rn
FROM (SELECT SQL_ID, SQL_TEXT FROM V$SQL GROUP BY SQL_ID, SQL_TEXT) T1
JOIN (SELECT a1.SQL_ID, a1.NAME, a1.VALUE_STRING, a1.position,a1.DATATYPE_STRING
FROM (SELECT SQL_ID, NAME, VALUE_STRING,SNAP_ID,position,DATATYPE_STRING
FROM DBA_HIST_SQLBIND
GROUP BY SQL_ID, NAME, VALUE_STRING,SNAP_ID,position,DATATYPE_STRING) a1
JOIN (SELECT SQL_ID, NAME, MAX(SNAP_ID) SNAP_ID,position,DATATYPE_STRING
FROM DBA_HIST_SQLBIND
WHERE VALUE_STRING IS NOT NULL
GROUP BY SQL_ID, NAME,position,DATATYPE_STRING) a2
ON a1.SQL_ID = a2.SQL_ID
AND a1.NAME = a2.NAME
AND a1.SNAP_ID = a2.SNAP_ID
AND a1.position = a2.position) T2
ON T1.SQL_ID = T2.SQL_ID
WHERE T2.VALUE_STRING IS NOT NULL
AND t1.SQL_ID = &apos;5u7g54s63p4ts&apos;
)
select str1 from
(
select str1,rn from temp
MODEL RETURN UPDATED ROWS
DIMENSION BY (rn)
MEASURES (sql_text,name,value_string,CAST(&apos; &apos; AS VARCHAR2(2000)) STR1)
RULES AUTOMATIC ORDER
(
STR1[ANY] ORDER BY rn = DECODE(CV(rn),1
,REPLACE(sql_text[CV(rn)],name[CV(rn)],value_string[CV(rn)])
,replace(STR1[CV(rn)-1],name[CV(RN)],value_string[CV(rn)])
)
)
ORDER BY rn desc
) where rownum &amp;lt;= 1;&lt;/p&gt;
</content:encoded></item><item><title>清理不常用租户</title><link>https://blog.newworld.help/posts/%E6%B8%85%E7%90%86%E4%B8%8D%E5%B8%B8%E7%94%A8%E7%A7%9F%E6%88%B7/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E6%B8%85%E7%90%86%E4%B8%8D%E5%B8%B8%E7%94%A8%E7%A7%9F%E6%88%B7/</guid><description>LOG_FILE=ob_tenant_recycle_$(date +&apos;%Y%m%d_%H%M%S&apos;).log</description><pubDate>Tue, 12 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;#!/bin/bash
##########################################################################################################&lt;/p&gt;
&lt;h1&gt;脚本：自动回收OceanBase租户&lt;/h1&gt;
&lt;h1&gt;功能：1.识别并锁定低用量租户 2.记录日志 3.减配资源 4.生成删除租户语句&lt;/h1&gt;
&lt;h1&gt;备注：本脚本只能保证当天使用过的租户不会被锁，要更长时间需要调整 ob_sql_audit_percentage 参数&lt;/h1&gt;
&lt;h1&gt;租户内存需要修改至2G（改1G有bug），需要在sys租户修改参数 __min_full_resource_pool_memory = 2147483648&lt;/h1&gt;
&lt;h1&gt;作者：user@example.com&lt;/h1&gt;
&lt;p&gt;##########################################################################################################&lt;/p&gt;
&lt;h1&gt;定义日志文件名&lt;/h1&gt;
&lt;p&gt;LOG_FILE=&quot;ob_tenant_recycle_$(date +&apos;%Y%m%d_%H%M%S&apos;).log&quot;
BACKUP_FILE=&quot;tenant_backup_list_$(date +&apos;%Y%m%d&apos;).txt&quot;&lt;/p&gt;
&lt;h1&gt;数据库连接配置（请根据实际情况修改）&lt;/h1&gt;
&lt;p&gt;declare -a DB_CONNECTIONS=(
&quot;mysql -h192.194.33.10 -P3306 -uroot@sys#YZH_SC_YW3_OB1 -p****** -A -c -N&quot;
&quot;mysql -h192.194.33.14 -P3306 -uroot@sys#CS_ZY -p****** -A -c -N&quot;
&quot;mysql -h192.194.33.15 -P3306 -uroot@sys#CS_TP -p****** -A -c -N&quot;
&quot;mysql -h192.194.33.16 -P3306 -uroot@sys#CS_AP -p****** -A -c -N&quot;
&quot;mysql -h192.194.33.18 -P3306 -uroot@sys#CS_OB01 -p****** -A -c -N&quot;
)&lt;/p&gt;
&lt;h1&gt;函数：记录日志&lt;/h1&gt;
&lt;p&gt;log() {
echo &quot;$(date &apos;+%Y-%m-%d %H:%M:%S&apos;) - $1&quot; &amp;gt;&amp;gt; &quot;$LOG_FILE&quot;
}&lt;/p&gt;
&lt;h1&gt;函数：执行SQL并返回结果&lt;/h1&gt;
&lt;p&gt;execute_sql() {
local conn=&quot;$1&quot;
local sql=&quot;$2&quot;
echo &quot;$sql&quot; | $conn 2&amp;gt;/dev/null
}&lt;/p&gt;
&lt;h1&gt;开始日志记录&lt;/h1&gt;
&lt;p&gt;log &quot;==================== OB租户回收脚本开始执行 ====================&quot;&lt;/p&gt;
&lt;h1&gt;循环处理每个集群&lt;/h1&gt;
&lt;p&gt;for DB_CONNECTION in &quot;${DB_CONNECTIONS[@]}&quot;; do
# 提取集群标识（用于日志记录）
CLUSTER_NAME=$(echo &quot;$DB_CONNECTION&quot; | grep -oP &apos;(?&amp;lt;=@sys#)[^ ]*&apos;)
log &quot;正在处理集群: $CLUSTER_NAME&quot;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 步骤1: 筛选符合条件的租户（修改超1个月，数据量&amp;lt;1G）
log &quot;步骤1: 筛选待处理租户&quot;
TENANTS_TO_PROCESS=$(execute_sql &quot;$DB_CONNECTION&quot; &quot;
    SELECT T2.TENANT_NAME,
           SUM(T1.MAX_CPU) AS CPU_CORES,
           ROUND(SUM(T4.MEMORY_SIZE)/1024/1024/1024) AS MEMORY_GB,
           ROUND(SUM(T1.LOG_DISK_IN_USE)/1024/1024/1024,2) AS LOG_USAGE_GB,
           ROUND(SUM(T1.DATA_DISK_IN_USE)/1024/1024/1024,2)AS DATA_USAGE_GB,
           T4.NAME
    FROM OCEANBASE.GV\$OB_UNITS T1
    JOIN OCEANBASE.DBA_OB_TENANTS T2
      ON T1.TENANT_ID=T2.TENANT_ID
    JOIN OCEANBASE.DBA_OB_RESOURCE_POOLS T3
      ON T2.TENANT_ID=T3.TENANT_ID
    JOIN OCEANBASE.DBA_OB_UNIT_CONFIGS T4
      ON T3.UNIT_CONFIG_ID=T4.UNIT_CONFIG_ID
    WHERE 1=1
      AND T2.TENANT_TYPE = &apos;USER&apos;
      AND LOCKED=&apos;NO&apos;
      AND T2.MODIFY_TIME &amp;lt;= DATE_SUB(NOW(), INTERVAL 2 MONTH)
      AND TENANT_NAME NOT IN (SELECT TENANT_NAME
                                FROM OCEANBASE.GV\$OB_SQL_AUDIT
                                WHERE TENANT_NAME NOT IN (&apos;SYS&apos;,&apos; &apos;)
                                  AND DB_NAME  NOT IN (&apos;information_schema&apos;,&apos;mysql&apos;,&apos;oceanbase&apos;,&apos;test&apos;,&apos;SYS&apos;,&apos;LBACSYS&apos;,&apos;ORAAUDITOR&apos;)
                               -- AND USER_NAME NOT IN (&apos;root&apos;,&apos;SYS&apos;) #有些人喜欢用系统用户连业务数据库，不能当过滤条件
                               -- AND SUBSTR(USEC_TO_TIME(REQUEST_TIME),1,10) &amp;gt; NOW()-INTERVAL 30 DAY #意义不大，还慢
                                GROUP BY TENANT_NAME)
            --  AND TENANT_NAME NOT IN (&apos;CS_MGAS2&apos;,&apos;sit_ebank2&apos;,&apos;CS_BOVIS&apos;,&apos;amcp_sit&apos;,&apos;amcp_uat&apos;)
    GROUP BY T2.TENANT_NAME,T4.NAME
    HAVING SUM(T1.LOG_DISK_IN_USE)/1024/1024/1024 &amp;lt; 52
       AND SUM(T1.DATA_DISK_IN_USE)/1024/1024/1024 &amp;lt; 1
    ORDER BY 2,1;
&quot;)

if [ -z &quot;$TENANTS_TO_PROCESS&quot; ]; then
    log &quot;当前集群无符合处理条件的租户，跳过锁定和减配步骤&quot;
else
    # 记录备份信息
    echo &quot;$TENANTS_TO_PROCESS&quot; | while IFS=$&apos;\t&apos; read -r tenant_name cpu memory log_use data_use conf_name; do
        echo &quot;$(date &apos;+%Y-%m-%d&apos;)|$CLUSTER_NAME|$tenant_name|${cpu}C|${memory}G|${log_use}G|${data_use}G&quot; &amp;gt;&amp;gt; &quot;$BACKUP_FILE&quot;
    done

    # 步骤2: 锁定租户并减配至1c1g
    log &quot;步骤2: 锁定并减配租户&quot;
    echo &quot;$TENANTS_TO_PROCESS&quot; | while IFS=$&apos;\t&apos; read -r tenant_name cpu memory log_use data_use conf_name; do
        log &quot;正在处理租户: $tenant_name&quot;

        # 锁定租户
        execute_sql &quot;$DB_CONNECTION&quot; &quot;ALTER TENANT $tenant_name LOCK;&quot; &amp;gt;&amp;gt; &quot;$LOG_FILE&quot; 2&amp;gt;&amp;amp;1
        if [ $? -eq 0 ]; then
            log &quot;成功锁定租户: $tenant_name&quot;
        else
            log &quot;错误: 锁定租户 $tenant_name 失败&quot;
            continue
        fi

        # 减配资源（这里需要根据实际资源池配置调整SQL）
        execute_sql &quot;$DB_CONNECTION&quot; &quot;ALTER RESOURCE UNIT $conf_name MAX_CPU=1, MIN_CPU=1, MEMORY_SIZE=&apos;5G&apos;;&quot; &amp;gt;&amp;gt; &quot;$LOG_FILE&quot; 2&amp;gt;&amp;amp;1
        if [ $? -eq 0 ]; then
            log &quot;成功减配$tenant_name的UNIT: $conf_name&quot;
        else
            log &quot;警告: 减配$tenant_name的UNIT $conf_name 失败&quot;
        fi
    done
fi

# 步骤3: 筛选锁定超1个月的租户（始终执行）
log &quot;步骤3: 筛选锁定超1个月的租户&quot;
TENANTS_TO_DELETE=$(execute_sql &quot;$DB_CONNECTION&quot; &quot;
    SELECT TENANT_NAME
    FROM OCEANBASE.DBA_OB_TENANTS
    WHERE TENANT_TYPE=&apos;USER&apos;
    AND LOCKED=&apos;YES&apos;
    AND MODIFY_TIME &amp;lt;= DATE_SUB(NOW(), INTERVAL 1 MONTH);
&quot;)

# 步骤4: 生成删除语句（不实际执行）
if [ -n &quot;$TENANTS_TO_DELETE&quot; ]; then
    echo &quot;-- ===========================================&quot; &amp;gt;&amp;gt; &quot;pending_deletions_$(date +%Y%m%d).sql&quot;
    echo &quot;-- 连接信息: $(echo &quot;$DB_CONNECTION&quot;)&quot; &amp;gt;&amp;gt; &quot;pending_deletions_$(date +%Y%m%d).sql&quot;
    echo &quot;-- 生成时间: $(date &apos;+%Y-%m-%d %H:%M:%S&apos;)&quot; &amp;gt;&amp;gt; &quot;pending_deletions_$(date +%Y%m%d).sql&quot;
    log &quot;步骤4: 为以下租户生成删除语句（请手动确认后执行）&quot;
    echo &quot;$TENANTS_TO_DELETE&quot; | while read -r tenant_name; do
        # 使用PURGE或FORCE选项确保直接删除
        echo &quot;DROP TENANT $tenant_name FORCE;&quot; &amp;gt;&amp;gt; &quot;pending_deletions_$(date +%Y%m%d).sql&quot;
        log &quot;生成删除语句: DROP TENANT $tenant_name FORCE;&quot;
    done
    echo &quot;-- ===========================================&quot; &amp;gt;&amp;gt; &quot;pending_deletions_$(date +%Y%m%d).sql&quot;
    log &quot;删除语句已保存至 pending_deletions_$(date +%Y%m%d).sql，请手动审核后执行&quot;
else
    log &quot;当前集群无符合删除条件的租户（锁定超过1个月）&quot;
fi
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;done&lt;/p&gt;
&lt;h1&gt;日志最终去重&lt;/h1&gt;
&lt;p&gt;log &quot;开始处理备份文件...&quot;&lt;/p&gt;
&lt;p&gt;if [ -f &quot;$BACKUP_FILE&quot; ] &amp;amp;&amp;amp; [ -s &quot;$BACKUP_FILE&quot; ]; then
log &quot;备份文件存在且非空，开始去重...&quot;
sort -t&apos;|&apos; -k2,3 -u &quot;$BACKUP_FILE&quot; &amp;gt; &quot;${BACKUP_FILE}.tmp&quot;
if [ $? -eq 0 ]; then
mv &quot;${BACKUP_FILE}.tmp&quot; &quot;$BACKUP_FILE&quot;
log &quot;备份文件去重完成&quot;
else
log &quot;错误: 备份文件去重失败&quot;
rm -f &quot;${BACKUP_FILE}.tmp&quot;
fi
else
log &quot;备份文件不存在或为空，跳过去重操作&quot;
fi&lt;/p&gt;
&lt;p&gt;log &quot;==================== OB租户回收脚本执行完成 ====================&quot;
log &quot;请查看以下文件:&quot;
log &quot;1. 操作日志: $LOG_FILE&quot;
log &quot;2. 租户备份列表: $BACKUP_FILE&quot;
log &quot;3. 待删除语句: pending_deletions_$(date +%Y%m%d).sql（请手动审核执行）&quot;&lt;/p&gt;
</content:encoded></item><item><title>Oracle10g建库raw</title><link>https://blog.newworld.help/posts/oracle10g%E5%BB%BA%E5%BA%93raw/</link><guid isPermaLink="true">https://blog.newworld.help/posts/oracle10g%E5%BB%BA%E5%BA%93raw/</guid><description>vim /etc/udev/rules.d/60-raw.rules</description><pubDate>Tue, 14 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;建库&lt;/p&gt;
&lt;p&gt;裸设备建库
分区
fdisk /dev/sdc
创建3个1g,8个100m&lt;/p&gt;
&lt;p&gt;字符设备文件映射
vim /etc/udev/rules.d/60-raw.rules
ACTION==&quot;add&quot;, KERNEL==&quot;sdc5&quot;, RUN+=&quot;/bin/raw /dev/raw/raw5 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc6&quot;, RUN+=&quot;/bin/raw /dev/raw/raw6 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc7&quot;, RUN+=&quot;/bin/raw /dev/raw/raw7 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc8&quot;, RUN+=&quot;/bin/raw /dev/raw/raw8 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc9&quot;, RUN+=&quot;/bin/raw /dev/raw/raw9 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc10&quot;, RUN+=&quot;/bin/raw /dev/raw/raw10 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc11&quot;, RUN+=&quot;/bin/raw /dev/raw/raw11 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc12&quot;, RUN+=&quot;/bin/raw /dev/raw/raw12 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc13&quot;, RUN+=&quot;/bin/raw /dev/raw/raw13 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc14&quot;, RUN+=&quot;/bin/raw /dev/raw/raw14 %N&quot;
ACTION==&quot;add&quot;, KERNEL==&quot;sdc15&quot;, RUN+=&quot;/bin/raw /dev/raw/raw15 %N&quot;
KERNEL==&quot;raw*&quot;,OWNER=&quot;oracle&quot;,GROUP=&quot;dba&quot;,MODE=&quot;0660&quot;&lt;/p&gt;
&lt;p&gt;start_udev&lt;/p&gt;
&lt;p&gt;oracle用户
编写映射文件
vim ~/mapfile
system=/dev/raw/raw5
sysaux=/dev/raw/raw6
undotbs1=/dev/raw/raw7
temp=/dev/raw/raw8
users=/dev/raw/raw9
redo1_1=/dev/raw/raw10
redo1_2=/dev/raw/raw11
redo1_3=/dev/raw/raw12
control1=/dev/raw/raw13
control2=/dev/raw/raw14
control3=/dev/raw/raw15&lt;/p&gt;
&lt;p&gt;dbca
在选择系统类型中勾选映射关系,选中mapfile配置前面配置每个文件对应磁盘的位置
更换uf8显示界面,点下parameter file
文件路径不对应,检查~/mapfile参数文件&lt;/p&gt;
</content:encoded></item><item><title>索引重建</title><link>https://blog.newworld.help/posts/%E7%B4%A2%E5%BC%95%E9%87%8D%E5%BB%BA/</link><guid isPermaLink="true">https://blog.newworld.help/posts/%E7%B4%A2%E5%BC%95%E9%87%8D%E5%BB%BA/</guid><description>oracle 索引重建,分区索引重建</description><pubDate>Sun, 12 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;oracle 索引重建,分区索引重建&lt;/p&gt;
&lt;p&gt;普通索引重建会引起报错
ORA-14086 When Rebuilding Index Of Partition Table (Doc ID 2403717.1)&lt;/p&gt;
&lt;p&gt;Step 1: Look-up the partition name in dba_ind_partitions view.
select Index_owner,Index_name,partition_name from dba_ind_partitions where index_name = &apos;&amp;lt;index_name&amp;gt;&apos;;&lt;/p&gt;
&lt;p&gt;Step 2: specify the partition name in the index rebuild statement:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; alter index &amp;lt;Index_name&amp;gt; rebuild partition &amp;lt;Partition_name&amp;gt;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;普通索引重建
alter index &amp;lt;Index_name&amp;gt; rebuild;&lt;/p&gt;
&lt;p&gt;##################################################################
GRANT SELECT ANY TABLE TO oracle;
GRANT SELECT ANY DICTIONARY TO oracle;
GRANT EXECUTE ANY PROCEDURE TO oracle;&lt;/p&gt;
&lt;p&gt;1.重建索引
CREATE OR REPLACE PROCEDURE REBUILD_INDEX(USER_NAME IN VARCHAR2)
AUTHID CURRENT_USER
IS
V_SQL1   VARCHAR2(500);
V_SQL2   VARCHAR2(500);
ACCOUNT NUMBER:= 0;
BEGIN
FOR LINE1 IN (SELECT T.OWNER, T.INDEX_NAME
FROM DBA_INDEXES T
WHERE T.OWNER = UPPER(USER_NAME)
AND T.STATUS IN (&apos;UNUSABLE&apos;,&apos;N/A&apos;)) LOOP
V_SQL1   := &apos;alter index &apos; || LINE1.OWNER || &apos;.&apos; || LINE1.INDEX_NAME ||&apos; rebuild ONLINE PARALLEL 6&apos;;
V_SQL2   := &apos;alter index &apos; || LINE1.OWNER || &apos;.&apos; || LINE1.INDEX_NAME ||&apos; NOPARALLEL&apos;;
EXECUTE IMMEDIATE V_SQL1;
EXECUTE IMMEDIATE V_SQL2;
ACCOUNT := ACCOUNT + 1;
END LOOP;&lt;/p&gt;
&lt;p&gt;DBMS_OUTPUT.PUT_LINE(&apos;重建索引数量:&apos;||ACCOUNT);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END REBUILD_INDEX;&lt;/p&gt;
&lt;p&gt;#自动重建
begin
-- Call the procedure
REBUILD_INDEX(user_name =&amp;gt; &apos;hs_user&apos;); --输入用户名&lt;/p&gt;
&lt;p&gt;end;&lt;/p&gt;
&lt;p&gt;2.重建分区索引&lt;/p&gt;
&lt;p&gt;CREATE OR REPLACE PROCEDURE REBUILD_PARTITION_INDEX(USER_NAME IN VARCHAR2)
AUTHID CURRENT_USER
IS
V_SQL1   VARCHAR2(500);
V_SQL2   VARCHAR2(500);
ACCOUNT1 NUMBER:= 0;
ACCOUNT2 NUMBER:= 0;
BEGIN
FOR LINE1 IN (SELECT T.INDEX_OWNER, T.INDEX_NAME,T.PARTITION_NAME
FROM DBA_IND_PARTITIONS T
WHERE T.INDEX_OWNER = UPPER(USER_NAME)
AND T.STATUS = &apos;UNUSABLE&apos;) LOOP
V_SQL1   := &apos;alter index &apos; || LINE1.INDEX_OWNER || &apos;.&apos; || LINE1.INDEX_NAME ||&apos; rebuild PARTITION &apos;||LINE1.PARTITION_NAME||&apos; ONLINE PARALLEL 6&apos;;
EXECUTE IMMEDIATE V_SQL1;
ACCOUNT1 := ACCOUNT1 + 1;
END LOOP;&lt;/p&gt;
&lt;p&gt;FOR LINE2 IN (SELECT DISTINCT T.INDEX_OWNER, T.INDEX_NAME
FROM DBA_IND_PARTITIONS T
WHERE T.INDEX_OWNER = UPPER(USER_NAME)
AND T.STATUS = &apos;UNUSABLE&apos;) LOOP
V_SQL2   := &apos;alter index &apos; || LINE2.INDEX_OWNER || &apos;.&apos; || LINE2.INDEX_NAME ||&apos; NOPARALLEL&apos;;
EXECUTE IMMEDIATE V_SQL2;
ACCOUNT2 := ACCOUNT2 + 1;
END LOOP;&lt;/p&gt;
&lt;p&gt;DBMS_OUTPUT.PUT_LINE(&apos;分区数量:&apos;||ACCOUNT1||&apos;,重建索引数量:&apos;||ACCOUNT2);&lt;/p&gt;
&lt;p&gt;EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END REBUILD_PARTITION_INDEX;&lt;/p&gt;
&lt;p&gt;#自动重建&lt;/p&gt;
&lt;p&gt;begin
-- Call the procedure
REBUILD_PARTITION_INDEX(user_name =&amp;gt; &apos;hs_user&apos;); --输入用户名&lt;/p&gt;
&lt;p&gt;end;&lt;/p&gt;
&lt;p&gt;3.验证
SELECT T.OWNER, T.INDEX_NAME
FROM DBA_INDEXES T
WHERE T.OWNER = UPPER(&apos;&apos;)&lt;/p&gt;
&lt;p&gt;SELECT T.INDEX_OWNER, T.INDEX_NAME,T.PARTITION_NAME
FROM DBA_IND_PARTITIONS T
WHERE T.INDEX_OWNER = UPPER(&apos;&apos;)
AND T.STATUS = &apos;UNUSABLE&apos;&lt;/p&gt;
</content:encoded></item><item><title>博客开张，记录数据库运维的折腾日常</title><link>https://blog.newworld.help/posts/hello/</link><guid isPermaLink="true">https://blog.newworld.help/posts/hello/</guid><description>你好，这里是勇敢DBA不怕困难的博客。</description><pubDate>Tue, 31 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;你好，欢迎来到我的博客。&lt;/p&gt;
&lt;p&gt;我是「勇敢DBA不怕困难」，一名常年泡在生产一线的数据库 DBA，主要折腾 OceanBase、Oracle、MySQL，偶尔也碰碰 GBase、金仓这些国产库。&lt;/p&gt;
&lt;h2&gt;这里会写什么&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;真实生产案例&lt;/strong&gt;：升级、排障、调优、踩坑——不讲大道理，只记真问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;运维脚本/工具&lt;/strong&gt;：日常用到的自动化脚本，能复用的就分享出来。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;折腾笔记&lt;/strong&gt;：从 OCP/OAT 到 NFS、GPU 驱动，遇到啥记啥。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;联系我&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHub：&lt;a href=&quot;https://github.com/649082922&quot;&gt;@649082922&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;邮箱：649082922@qq.com&lt;/li&gt;
&lt;li&gt;微信公众号：&lt;strong&gt;勇敢DBA不怕困难&lt;/strong&gt;（欢迎关注，解锁更多数据库运维知识）&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;深耕数据库，热爱折腾。共勉。&lt;/p&gt;
&lt;/blockquote&gt;
</content:encoded></item><item><title>OUTFILE导出</title><link>https://blog.newworld.help/posts/outfile%E5%AF%BC%E5%87%BA/</link><guid isPermaLink="true">https://blog.newworld.help/posts/outfile%E5%AF%BC%E5%87%BA/</guid><description>使用INTO OUTFILE两种格式</description><pubDate>Sun, 15 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;使用INTO OUTFILE两种格式
#直接导出
mysql -hxx.xx.xx.xx -p2881 -uroot@ocp_meta -p &lt;br /&gt;
-e &quot;SELECT * FROM oracle.active_log_table INTO OUTFILE &apos;/tmp/data.xls&apos;;&quot;&lt;/p&gt;
&lt;p&gt;#在数据库里导出
mysql -hxx.xx.xx.xx -p2881 -uroot@sys -p
SELECT *
INTO OUTFILE &apos;/tmp/data.xls&apos;
fields terminated by &apos;,&apos;
lines terminated by &apos;\n&apos;
FROM oracle.active_log_table;&lt;/p&gt;
&lt;p&gt;#############################################报错问题#############################################&lt;/p&gt;
&lt;p&gt;1.设置参数为空,修改参数需要使用sock连接方式修改,否则报错
ERROR 1235 (0A000): modify SECURE_FILE_PRIV not by unix socket connection not supported
#sql.sock路径不同版本查看:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002522398&lt;/p&gt;
&lt;p&gt;2.使用observer直连2881,不能通过obproxy,并且secure_file_priv从 V4.2.1需要为&apos;/&apos;,否则报错
ERROR 1227 (42501): Access denied
#secure_file_priv设置方法:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002015981&lt;/p&gt;
&lt;p&gt;mysql -uroot@ocp_meta -pxxxx -S $OB_HOME/run/sql.sock
SET GLOBAL secure_file_priv = &apos;/&apos;;
#重连
show variables like &apos;secure-file-priv&apos;&lt;/p&gt;
&lt;p&gt;3.如果是多表子查询,最后要把sql再套一层,否则报错
ERROR 5617 (HY000): inapproproiate INTO&lt;/p&gt;
&lt;p&gt;4.导出目录在-hxx.xx.xx.xx服务器上必须有admin的读写权限,否则报错
ERROR 4009 (58030): IO error&lt;/p&gt;
&lt;p&gt;#########################################另一种临时方法
mysql -H &apos;select x from x;&apos; &amp;gt; xxx.html
然后浏览器打开, 然后ctrl+a ctrl+c 然后在excel里ctrl+v&lt;/p&gt;
</content:encoded></item></channel></rss>