杂记 ¶
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';DBLINK ¶
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=weblogic2019Tomcat ¶
cmd 窗口 ¶
bash
1# 设置当前cmd界面编码为 UTF-8
2chcp 65001
3
4# 设置环境变量 JAVA_HOME、CATALINA_HOME
5set JAVA_HOME=F:\study\environment\javaDevelopmentKit\jdk1.7
6set CATALINA_HOME=F:\study\soft\apache\apache-tomcat-8.5.99
7
8# 设置 PATH
9set PATH=%JAVA_HOME%\bin;%PATH%
10
11# 设置 JVM 参数
12set JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8
13
14# 在当前窗口启动 Tomcat
15%CATALINA_HOME%\bin\catalina.bat runLinux ¶
扩容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数据库 ¶
参数化查询 ¶
sql
1-- 清空用户数据
2DO $$
3DECLARE
4 v_user_id TEXT := '78914762532372551';
5BEGIN
6 -- 可选:记录操作日志或检查是否存在
7 RAISE NOTICE 'Deleting user data for user_id: %', v_user_id;
8
9 DELETE FROM health_management_ta404.et_user WHERE user_id = v_user_id;
10 DELETE FROM health_management_biz.health_checkin_user WHERE user_id = v_user_id;
11 DELETE FROM health_management_biz.reg_infor WHERE user_id = v_user_id;
12 DELETE FROM health_management_biz.ship_address WHERE user_id = v_user_id;
13 DELETE FROM health_management_biz.user_info_ext WHERE user_id = v_user_id;
14 DELETE FROM health_management_biz.user_points_details WHERE user_id = v_user_id;
15 DELETE FROM health_management_biz.user_points_summary WHERE user_id = v_user_id;
16
17 RAISE NOTICE 'User data deleted successfully.';
18EXCEPTION
19 WHEN OTHERS THEN
20 RAISE WARNING 'Error deleting user %: %', v_user_id, SQLERRM;
21 -- 可选择是否回滚(在 DO 块中自动回滚)
22END $$;PGSQL 新建数据库和用户 ¶
sql
1-- ======================================
2-- 核心操作:新建数据库、用户、专属模式(超级管理员 postgres 执行)
3-- 适用场景:为业务用户分配专属数据库/模式,保障数据隔离与权限可控
4-- ======================================
5
6-- 1. 新建数据库 test_db,指定 UTF-8 编码(避免中文乱码)
7CREATE DATABASE test_db
8 WITH ENCODING 'UTF8'
9 CONNECTION LIMIT -1; -- 连接数限制(-1 表示无限制,可根据业务调整为具体数值,如 100)
10
11-- 2. 新建数据库用户 test_user,设置强密码、指定连接有效期(可选)
12CREATE USER test_user
13 WITH PASSWORD 'LongerPassword123.' -- 登录密码
14 VALID UNTIL '2027-12-31 23:59:59' -- 密码有效期(可选,不写则永久有效)
15 CONNECTION LIMIT 50; -- 该用户单实例连接数限制(可选,配合数据库连接限制使用)
16
17-- 3. 新建专属模式 schema_a,直接指定拥有者为 test_user(简化后续授权,test_user 默认拥有该模式全部权限)
18-- 备注:模式(Schema)用于数据库内对象隔离,避免多业务表名冲突,相当于「数据库内的子目录」
19CREATE SCHEMA schema_a AUTHORIZATION test_user;
20
21-- ======================================
22-- 后续操作:test_user 登录使用(无需超级管理员权限)
23-- ======================================
24-- 登录命令(终端执行):psql -U test_user -d test_db -h localhost -p 5432
25-- 登录后默认操作 schema_a 步骤(可选,避免每次操作都写 schema_a.表名):
26-- 1. 设置当前会话默认模式:SET search_path TO schema_a, public;
27-- 2. (可选)修改用户永久默认模式:ALTER USER test_user SET search_path TO schema_a, public;
28--
29-- 登录后可直接在 schema_a 下创建表/视图/索引等对象,所有对象所有者均为 test_user
30-- 示例:CREATE TABLE schema_a.user_info (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL);
31-- (若已设置 search_path,可简化为:CREATE TABLE user_info (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL);)
32
33-- ======================================
34-- 补充操作:额外授权命令(根据业务场景选择,超级管理员 postgres 执行)
35-- 适用场景:多人共享 test_db 数据库、需要给 test_user 分配 public 模式权限等
36-- ======================================
37
38-- 场景1:将 test_db 数据库所有权转移给 test_user(权限最高,适合 test_user 专属数据库)
39-- 备注:转移后 test_user 成为数据库所有者,拥有该数据库内所有操作权限(包括删除数据库)
40ALTER DATABASE test_db OWNER TO test_user;
41
42-- 场景2:授予 test_user 对 test_db 数据库的全部操作权限(不转移所有权,适合多人共享数据库)
43-- 备注:仅数据库层面权限(连接、创建模式等),不包含模式内对象的操作权限
44GRANT ALL PRIVILEGES ON DATABASE test_db TO test_user;
45
46-- 场景3:授予 test_user 对 public 模式的全部操作权限(创建、修改、删除模式内对象)
47-- 备注:public 是 PostgreSQL 默认模式,未指定模式时对象会创建在该模式下
48GRANT ALL PRIVILEGES ON SCHEMA public TO test_user;
49
50-- 场景4:授予 test_user 对 public 模式下现有对象的全部操作权限
51-- 备注:仅对「已存在」的表、序列、函数生效,后续新建对象需依赖默认权限设置
52GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO test_user;
53GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO test_user; -- 自增字段依赖序列,需单独授权
54GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO test_user;
55
56-- 场景5:设置 public 模式下「未来新建」对象的默认权限(避免后续新建对象无权限)
57-- 备注:仅对「超级管理员或拥有模式权限的用户」后续新建的对象生效,保障权限继承
58ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO test_user;
59ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO test_user;
60ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON FUNCTIONS TO test_user;
61
62-- 场景6:删除用户
63-- 将 test_user 拥有的所有数据库的 ownership 转移给 postgres(或其他管理员)
64REASSIGN OWNED BY test_user TO postgres;
65-- 然后删除该用户拥有的所有权限和依赖对象(安全清理)
66DROP OWNED BY test_user;
67-- 再删除用户
68DROP USER test_user;
69
70-- 场景7:查询所有用户(角色)信息
71-- 备注:在 PostgreSQL 中,用户(User)本质上是具有 LOGIN 权限的角色(Role)
72SELECT rolname AS username,
73 rolsuper AS is_superuser,
74 rolcreatedb AS can_create_db,
75 rolcreaterole AS can_create_role,
76 rolcanlogin AS can_login,
77 rolreplication AS can_replicate,
78 rolconnlimit AS connection_limit,
79 rolvaliduntil AS password_valid_until
80FROM pg_roles
81ORDER BY rolname;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 连接的完整详情PGSQL 库迁移 ¶
bash
1# PGPASSWORD 是 PostgreSQL 客户端(如 psql、pg_dump 等)用来自动提供密码的环境变量
2# cmd: set PGPASSWORD=your_password
3# powershell: $env:PGPASSWORD = "your_password"
4
5# 导出
6pg_dump.exe --verbose \
7 --host=192.168.116.131 --port=5432 \
8 --username=postgres \
9 --format=t --encoding=UTF-8 \
10 --file E:/dump-404 \
11 --no-owner --no-privileges \
12 -n "health_management_ta404" postgres
13
14
15# 导入
16pg_restore.exe --verbose \
17 --host=20.1.1.5 --port=5433 \
18 --username=postgres \
19 --dbname=health_db \
20 --no-owner --no-privileges \
21 E:/dump-404达梦新建用户 ¶
bash
1CREATE USER "KXCWT_TA404" IDENTIFIED BY "Dameng123" DEFAULT TABLESPACE MAIN;
2GRANT CREATE SESSION TO "KXCWT_TA404"; -- 授予连接权限
3GRANT RESOURCE TO "KXCWT_TA404"; -- 授予建表等基本资源权限
4# GRANT DBA TO "KXCWT_TA404"; -- 或者一次性授予 DBA 权限(谨慎使用)达梦库迁移 ¶
bash
1# 导出 KXCWT_TA404 模式表到 KXCWT_TA404.dmp
2dexp USERID=KXCWT_TA404/Dameng123@127.0.0.1:5236 FILE=KXCWT_TA404.dmp SCHEMAS=KXCWT_TA404
3
4# 导入到 KXCHX_TA404 模式
5dimp USERID=KXCHX_TA404/Dameng123@127.0.0.1:5236 FILE=KXCWT_TA404.dmp REMAP_SCHEMA=KXCWT_TA404:KXCHX_TA404运维 ¶
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