工作杂项记录 杂记

2024-09-03 约 3302 字 阅读时长7 分钟

杂记

oracle

数据库

锁表

sql
 1-- 锁表
 2SELECT * FROM COSTINFO c FOR UPDATE;
 3
 4-- 查询锁表信息
 5SELECT t2.username, t2.sid,t2.serial#,t3.object_name,t2.OSUSER,t2.MACHINE,t2.PROGRAM,t2.LOGON_TIME,t2.COMMAND,t2.LOCKWAIT,t2.SADDR,t2.PADDR,t2.TADDR,t2.SQL_ADDRESS,t1.LOCKED_MODE
 6FROM v$locked_object t1, v$session t2, dba_objects t3
 7WHERE t1.session_id = t2.sid AND t1.object_id = t3.object_id
 8ORDER BY t2.logon_time;
 9
10-- 查询session
11SELECT a.OS_USER_NAME,c.owner,c.object_name,b.sid,b.serial#,logon_time
12FROM v$locked_object a, v$session b, dba_objects c
13WHERE a.session_id = b.sid AND a.object_id = c.object_id
14ORDER BY b.logon_time;
15
16-- 杀掉session 'sid,serial#'
17ALTER system kill SESSION '2844,28686' IMMEDIATE;

新建用户/授权

sql
1-- 其中username是你要创建的用户名,password是该用户的密码
2CREATE USER username IDENTIFIED BY password;
3
4-- 分配默认表空间和临时表空间
5ALTER USER username DEFAULT TABLESPACE tablespace_name
6    TEMPORARY TABLESPACE temp_tablespace;
sql
 1-- 授权创建session权限
 2grant create session,resource TO username;
 3
 4-- 设置为管理员用户(拥有大多权限)
 5GRANT DBA TO username;
 6
 7-- 查看用户拥有权限
 8SELECT * FROM USER_SYS_PRIVS;
 9-- 查看用户拥有的角色
10SELECT * FROM USER_ROLE_PRIVS;
11-- 查看用户拥有的对象权限
12SELECT * FROM USER_TAB_PRIVS;
13-- 查看用户拥有的系统权限和角色(查询结合了系统权限和角色,提供了一个更全面的视图)
14SELECT * FROM SESSION_PRIVS;

exp/imp

保持表空间一致

导出exp

sql
 1-- 导出完整数据库:用户名/密码@数据库名,file=d:/daochu1.dmp 是导出的文件路径,full=y 表示导出整个数据库。
 2exp username/passwd@ip:port/db file=d:/daochu1.dmp full=y
 3
 4-- 导出某个用户表空间: 在这里,owner=user 指定了要导出的数据库用户
 5exp username/passwd@ip:port/db file=d:/daochu1.dmp owner=username
 6
 7-- 导出某个用户的某个表: tables=table1 是要导出的表名,如果需要导出多个表,则使用(table1,table2)的形式。
 8exp username/passwd@ip:port/db file=d:/daochu1.dmp tables=(table1,...)
 9
10-- 示例
11exp MOHRSS_AIO_TA404/MOHRSS_AIO_TA404@10.161.18.39:1521/orclpdb file=e:/MOHRSS_AIO_TA404.dmp owner=MOHRSS_AIO_TA404 buffer=8192 

导入imp

sql
1-- 查看版本号
2select * from v$version;
3
4-- cmd 命令行执行导入
5imp username/passwd@ip:port/db file=d:/daochu1.dmp full=y ignore=y
6
7-- 示例
8imp MOHRSS_AIO_TA404_2025/MOHRSS_AIO_TA404_2025@10.161.18.39:1521/orclpdb file=e:/MOHRSS_AIO_TA404.dmp buffer=8192 ignore=y full=y

导出后导入中文乱码处理

sql
 1-- 查询库的字符集 ;SIMPLIFIED CHINESE_CHINA.AL32UTF8;
 2select userenv('language') from dual;
 3
 4-- 设置临时环境变量
 5set NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8
 6
 7-- 切换当前cmd使用 utf-8 编码
 8chcp 65001
 9
10-- 执行导出导入命令

其他相关sql

sql
1-- 查看所有表('table1','table2',...)
2SELECT LISTAGG(''''||table_name||'''' ,',') WITHIN GROUP (ORDER BY table_name) AS names
3FROM all_tables
4WHERE owner = 'MOHRSS_AIO_TA404' AND table_name!='ET_ATTACHMENT';
sql
 1-- 创建一个名为 remote_db_link 的数据库链接,连接到远程数据库
 2CREATE DATABASE LINK remote_db_link
 3CONNECT TO remote_username IDENTIFIED BY remote_password
 4USING '(DESCRIPTION =
 5  (ADDRESS = (PROTOCOL = TCP)(HOST = remote_host)(PORT = remote_port))
 6  (CONNECT_DATA =
 7    (SERVICE_NAME = remote_service_name)
 8  )
 9)';
10-- remote_db_link:数据库链接的名称,可以自定义。
11-- remote_username:远程数据库的用户名。
12-- remote_password:远程数据库的密码。
13-- remote_host:远程数据库服务器的主机名或 IP 地址。
14-- remote_port:远程数据库监听的端口号,默认是 1521。
15-- remote_service_name:远程数据库的服务名。
16
17-- 或下面写法
18CREATE DATABASE LINK myrsjhk_db_link
19    CONNECT TO SCCARD IDENTIFIED BY SCCARD
20    USING 'ip:port/service';
21
22-- 查询远程数据库中的表数据
23SELECT * FROM employees@remote_db_link;
24
25-- 修改远程数据库表数据
26UPDATE JXJYLOG@yhwsyw_db_link SET fieldName = 'value';
27
28--  删除 DBLINK
29DROP DATABASE LINK remote_db_link;
30
31-- 查询某个用户所有的DBLINK
32SELECT * FROM DBA_DB_LINKS WHERE OWNER = 'MY_EXAM_MANAGE';
33
34-- 查询某个DBLINK
35SELECT * FROM dba_db_links WHERE db_link = 'MYRSWT_DB_LINK'

统计Schema大小

sql
 1-- 查询某个模式(Schema)占用的物理空间大小
 2SELECT
 3    owner AS "模式名称",
 4    ROUND(SUM(bytes) / 1024 / 1024, 2) AS "占用空间(MB)"
 5FROM dba_segments
 6GROUP BY owner;
 7
 8-- 查询某个模式(Schema)占用的物理空间大小
 9SELECT 
10    u.username AS "模式名称",
11    SUM(s.bytes / 1024 / 1024) AS "占用空间(MB)"
12FROM dba_segments s JOIN dba_users u ON s.owner = u.username
13GROUP BY 
14    u.username
15ORDER BY u.username;
16
17-- 查询某个模式(Schema)各个对象占用的物理空间大小
18SELECT owner,
19       segment_name,
20       segment_type,
21       ROUND(bytes / 1024 / 1024, 2) AS SIZE_MB
22FROM dba_segments
23WHERE owner = 'MOHRSS_AIO_TA404'
24ORDER BY SIZE_MB DESC;
25
26-- 查询某个模式(Schema)表占用的物理空间大小
27SELECT
28    t.owner,
29    t.table_name,
30    ROUND(s.bytes / 1024 / 1024, 2) AS "表占用空间(MB)"
31FROM dba_tables t
32JOIN dba_segments s ON t.owner = s.owner AND t.table_name = s.segment_name
33WHERE t.owner = 'YOUR_SCHEMA_NAME'
34ORDER BY "表占用空间(MB)" DESC;

查看过期时间

sql
1# 该语句会返回数据库中所有用户的用户名、账户状态以及密码过期日期。如果expiry_date列的值为NULL,表示该用户的密码没有设置过期时间;如果有具体的日期值,则表示该用户的密码将在该日期过期。
2SELECT username, account_status, expiry_date FROM dba_users;
3
4# 同样以管理员身份连接到数据库,先查询用户对应的概要文件,一般用户的概要文件为DEFAULT
5SELECT username, PROFILE FROM dba_users;
6# 然后查询对应概要文件的密码有效期设置,如果返回的LIMIT值为UNLIMITED,表示密码永不过期;如果是一个数字,则表示密码的有效期为该数字指定的天数。
7SELECT * FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';

weblogic

打补丁(12 c)

cmd
 1# weblogic 版本在后台登录页左下角可以看到,命令行需要管理员打开
 2
 3# 查看 opatch 版本(补丁会有opatch版本要求)
 4%ORACLE_HOME%\OPatch\opatch.bat version
 5
 6# 查看已安装补丁
 7%ORACLE_HOME%\OPatch\opatch.bat  lspatches
 8
 9# 验证什么补丁应用到了 oracle_home
10%ORACLE_HOME%\OPatch\opatch.bat lsinventory
11
12# 解压补丁包
13jar -xvf xxxx_Generic.zip
14
15# 进入解压目录下的 tools\spbat 目录
16
17# windows需要将 spbat.bat 脚本处理下(去掉日期的星期几,不然中文会报错)
18    for /F "tokens=1-3 delims=/:" %%i in ('date /t') do set curdate=%%i-%%j-%%k
19    For /f "tokens=1-4 delims=/:.," %%a in ("%TIME%") do set curtime=%%a-%%b-%%c-%%d
20    set curdate=%curdate: =%
21    set curtime=%curtime: =%
22    改为
23    for /F "tokens=1-3 delims=/: " %%i in ('date /t') do set curdate=%%i-%%j-%%k
24    For /f "tokens=1-4 delims=/:.," %%a in ("%TIME%") do set curtime=%%a-%%b-%%c
25    set curdate=%curdate: =%
26    set curtime=%curtime: =%
27
28# 这个命令 验证补丁包
29spbat.bat -phase precheck -oracle_home D:\Oracle\Middleware\Oracle_Home
30
31# 进行补丁包安装,opatch版本会自动更新 (当opatch版本不符合要求时直接执行)
32spbat.bat -phase apply -oracle_home D:\Oracle\Middleware\Oracle_Home
33
34
35#------------- 其他命令 ----------
36# 安装补丁(单个和多个)
37# 单个需要进补丁解压目录
38%ORACLE_HOME%\OPatch\opatch.bat apply
39# 多个需要指定id
40%ORACLE_HOME%\OPatch\opatch.bat napply -id 29633448, 28298916
41
42#补丁回滚(单个和多个)
43%ORACLE_HOME%\OPatch\opatch.bat rollback -id 26519417
44%ORACLE_HOME%\OPatch\opatch.bat nrollback -id 15941858,15955138

重置密码(12 c)

bash
 1# 在 Oracle_Home 目录下
 2
 3# 执行命令重新生成 DefaultAuthenticatorInit.ldift 文件;账户: weblogic 密码: weblogic2019
 4java -classpath wlserver\server\lib\weblogic.jar weblogic.security.utils.AdminAccount weblogic weblogic2019 user_projects\domains\base_domain\security
 5
 6# 删除 user_projects\domains\base_domain\servers\AdminServer\data\ldap 文件夹
 7
 8# 修改 user_projects\domains\base_domain\servers\AdminServer\security\boot.properties
 9username=weblogic
10password=weblogic2019

Linux

扩容swap分区

bash
 1# 查看当前 swap 大小
 2free -m
 3
 4# 创建 swap 文件存储位置,并进入
 5mkdir /swap
 6
 7# 创建分区文件 16g 16348M
 8# if=/dev/zero 填充0;of=/swap/swapfile 分区文件位置;bs=1M 块大小;count=16348 分区大小
 9dd if=/dev/zero of=/swap/swapfile bs=1M count=16348
10
11# 查看创建文件
12du -h /swap/swapfile
13
14# 创建 swap 分区文件系统
15# 注意:这里会生成 uuid,需要记录,后面设置开机启动时需要用上
16mkswap /swap/swapfile
17
18# 启用交换分区文件
19swapon /swap/swapfile
20
21# 查看 swap 分区
22swapon --show
23
24# 设置开机启动 swap 分区,编辑/etc/fstab,新增一行;
25# 也可以使用创建 swap 分区时返回的 uuid;通过 file 命令也可以查看,file /swap/swapfile
26/swap/swapfile swap swap defaults 0 0

修改系统时间

bash
 1# 查看当前时间
 2date
 3
 4# 设置系统时间(临时),重启后会变回硬件时间
 5date -s "YYYY-MM-DD hh:mm:ss"
 6
 7# 将系统时间同步到硬件
 8hwclock --systohc
 9
10# 将硬件时间同步到系统
11hwclock --hctosys

数据库

PGSQL

sql
 1-- 新建用户
 2CREATE USER face_user WITH PASSWORD 'LongerPassword123.';
 3
 4-- 新建数据库
 5CREATE DATABASE face_lib;
 6
 7-- 授予连接数据库权限
 8GRANT CONNECT ON DATABASE face_lib TO face_user;
 9
10-- 连接新建库执行以下语句
11-- 授予数据库所有权限
12GRANT ALL PRIVILEGES ON DATABASE face_lib TO face_user;
13-- 授予 public 模式所有权限
14GRANT ALL PRIVILEGES ON SCHEMA public TO face_user;
15-- 授予现有表所有权限
16GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO face_user;
17-- 授予现有序列所有权限
18GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO face_user;
19-- 授予现有函数所有权限
20GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO face_user;
21-- 设置未来创建表的默认权限
22ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO face_user;
23-- 设置未来创建序列的默认权限
24ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO face_user;
25-- 设置未来创建函数的默认权限
26ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON FUNCTIONS TO face_user;

PGSQL排查连接问题

sql
 1-- 查询face_db数据库的活跃 / 非内部连接详情
 2SELECT 
 3  pid,  -- 连接的唯一进程ID(PostgreSQL内部标识每个连接的进程号)
 4  datname,  -- 连接的数据库名(这里过滤后只显示face_db)
 5  usename,  -- 发起连接的数据库用户名(比如fastapi_user)
 6  client_addr,  -- 客户端IP(能定位到是哪个FastAPI服务实例连过来的)
 7  application_name,  -- 应用名(如果FastAPI连接时配置了这个参数,能直接识别业务模块)
 8  state,  -- 连接状态(关键!比如:
 9          -- active:正在执行SQL;
10          -- idle:空闲(没执行SQL);
11          -- idle in transaction:事务中空闲(最危险,占连接且未提交/回滚);
12          -- idle in transaction (aborted):事务出错但未终止
13  state_change,  -- 连接状态最后一次变更的时间(比如idle状态持续了多久)
14  backend_start,  -- 连接建立的时间(能看连接是否长期不释放)
15  query,  -- 该连接最后/正在执行的SQL(能定位到慢SQL/异常SQL,比如未提交的DELETE)
16  now() - backend_start AS connection_age,  -- 连接存活总时长(排查长连接泄漏)
17  now() - state_change AS state_age  -- 当前状态持续时长(比如idle状态卡了几小时)
18FROM pg_stat_activity 
19WHERE datname = 'face_db'  -- 只查face_db数据库的连接
20  AND client_addr is not null;  -- 排除数据库内部连接(比如后台进程、本机localhost无IP的连接)
21  
22SELECT pg_terminate_backend(4750);  -- 终止指定 PID 的数据库连接
23
24SELECT * FROM pg_stat_activity WHERE pid = 4723;  -- 查询指定 PID 连接的完整详情

运维

jar 更改 war/jar 包中配置文件

bash
 1# 查看
 2jar -tvf app.war | grep -i application.yml   
 3
 4# 提取war包中某个文件
 5jar -xvf app.war WEB-INF/classes/application.yml   
 6
 7# 更新,常用于只替换包中某个配置文件,而不需要解压整个包
 8jar -uvf app.war WEB-INF/classes/application.yml   
 9
10# =============================================
11# 查看多个文件
12jar -tvf xxx.jar | grep -E 'application-datasource-zs.yml|application.yml|logback.xml'
13
14# 提取多个文件
15jar -xvf xxx.jar \
16    WEB-INF/classes/application-datasource-zs.yml \
17    WEB-INF/classes/application.yml \
18    WEB-INF/classes/logback.xml
19
20# 更新war中的多个文件
21jar -uvf xxx.jar \
22    WEB-INF/classes/application-datasource-zs.yml \
23    WEB-INF/classes/application.yml \
24    WEB-INF/classes/logback.xml
使用滚轮缩放
按住拖动