FYF
» HerBert
Toggle navigation
FYF
主页
1、用户
2、各种方案
3、备份恢复
4、表空间相关
5、OGG
6、文件管理
7、常见故障分析
8、DG
9、集群相关
HCCDP
实验题
About Me
归档
标签
二
无
2025-11-10 20:34:56
6
0
0
admin
# **GaussDB 实验任务执行指南** --- ## **任务 1:创建用户、数据库和表结构** ### **任务要求** * 使用 `gsql` 客户端连接数据库; * 创建用户 `hccdp` 并授予 `sysadmin` 权限; * 创建数据库 `hccdp_db`,所有者为 `hccdp`; * 在 `hccdp_db` 数据库下创建 `hccdp` schema; * 执行 `create_table.sql` 文件创建表结构。 ### **操作步骤** ```bash # 使用管理员账户连接数据库 gsql -d postgres -U omm -p 8000 -W [管理员密码] # 创建用户和数据库 CREATE USER hccdp SYSADMIN PASSWORD 'GaussDB@123'; CREATE DATABASE hccdp_db OWNER hccdp ENCODING 'UTF-8' TEMPLATE template0; # 退出再重新连接到新库 \q gsql -h 192.168.0.XXX -d hccdp_db -U hccdp -W GaussDB@123 -p 8000 -r # 创建 schema 并执行建表脚本 CREATE SCHEMA hccdp; SET search_path TO hccdp; \i /root/create_table.sql; \dt ``` --- ## **任务 2:导入数据** ### **任务要求** 使用 `COPY` 元命令将数据导入以下表: `nation`, `part`, `supplier`, `partsupp`, `orders`, `lineitem` ### **操作步骤** ```bash # 下载数据文件(修改为实际路径) wget [数据文件下载链接] # 导入数据 \copy nation FROM 'nation.csv' DELIMITER ','; \copy part FROM 'part.csv' DELIMITER ','; \copy supplier FROM 'supplier.csv' DELIMITER ','; \copy partsupp FROM 'partsupp.csv' DELIMITER ','; \copy orders FROM 'orders.csv' DELIMITER ','; \copy lineitem FROM 'lineitem.csv' DELIMITER ','; # 验证数据导入 SELECT COUNT(*) FROM nation; SELECT COUNT(*) FROM part; ``` --- ## **任务 3:备份与恢复实例** ### **任务要求** 1. 创建数据库备份; 2. 使用备份恢复新的实例; 3. 新实例命名为 **`gauss-hccdp-new`**。 ### **操作方式** * 可在 **数据库管理页面** 直接操作: * 执行“创建备份”; * 使用该备份恢复新实例; * 命名新实例为 `gauss-hccdp-new`。 --- ## **任务 4:创建游标存储过程一** ### **存储过程文件内容 (`test.txt`)** ```sql -- 创建 test.txt 文件内容 CREATE OR REPLACE PROCEDURE proc_nation() AS DECLARE n_name VARCHAR(100); n_regionkey VARCHAR(100); CURSOR C1 IS SELECT n_name,case n_regionkey when 0 then '非洲国家' when 1 then '美洲国家' when 2 then '亚洲国家' when 3 then '欧洲国家' when 4 then '穆斯林国家' end n_regionkey FROM hccdp.nation; TYPE CURSOR_TYPE IS REF CURSOR; BEGIN OPEN C1; LOOP FETCH C1 INTO n_name,n_regionkey; EXIT WHEN C1%NOTFOUND; DBE_OUTPUT.PRINT_LINE('国家:'||n_name||',该国属于'||n_regionkey); END LOOP; CLOSE C1; END; / -- 执行 \i /root/test.txt -- 验证 call proc_nation(); ``` ### **执行与验证** ```bash \i /root/test.txt CALL proc_nation(); ``` --- ## **任务 5:创建游标存储过程二** ### **存储过程文件内容 (`test1.txt`)** ```sql -- 创建 test1.txt 文件内容 CREATE OR REPLACE PROCEDURE proc_nation2(iname varchar(100)) AS DECLARE n_name VARCHAR(100); n_regionkey VARCHAR(100); CURSOR C1 IS SELECT n_name,case n_regionkey when 0 then '非洲国家' when 1 then '美洲国家' when 2 then '亚洲国家' when 3 then '欧洲国家' when 4 then '穆斯林国家' end n_regionkey FROM hccdp.nation where n_name=iname; TYPE CURSOR_TYPE IS REF CURSOR; BEGIN OPEN C1; LOOP FETCH C1 INTO n_name,n_regionkey; EXIT WHEN C1%NOTFOUND; DBE_OUTPUT.PRINT_LINE('国家:'||n_name||',该国属于'||n_regionkey); END LOOP; CLOSE C1; END; / -- 执行 \i /root/test1.txt -- 验证 call proc_nation2('CHINA'); ``` ### **执行与验证** ```bash \i /root/test1.txt CALL proc_nation2('CHINA'); ``` --- ## **任务 6:锁阻塞处理** ### **任务要求** 定位并解除数据库中造成阻塞的锁。 ### **操作步骤** ```sql -- 第一个会话:加锁 BEGIN; LOCK TABLE nation IN ACCESS EXCLUSIVE MODE; -- 第二个会话:尝试插入(阻塞) INSERT INTO nation VALUES (25, 'ZAMBIA', 4, 'test'); -- 第一个会话:查找并终止阻塞进程 SELECT pid, state, query FROM pg_stat_activity WHERE wait_event_type = 'Lock'; SELECT pg_terminate_backend(阻塞进程的pid); -- 回滚 ROLLBACK; -- 验证 SELECT * FROM nation WHERE n_nationkey = 25; ``` --- ## **任务 7:查询活跃会话** ### **任务要求** 查询当前数据库中状态不为 `idle` 的会话,显示: * 用户名; * 会话 ID; * 执行时长; * 数据库名; * 正在执行的 SQL; 并按执行时长倒序排序。 ### **SQL 语句** ```sql SELECT usename, pid, current_timestamp, query_start AS runtime, datname, query FROM pg_stat_activity WHERE state <> 'idle' ORDER BY query_start DESC; ``` --- ## **任务 8:生成 WDR 报告** ### **任务要求** 1. 使用 `create_wdr_snapshot()` 生成快照; 2. 使用 `generate_wdr_report()` 生成报告; 3. 节点名为 `dn_6001_6002_6003`; 4. 快照 ID 使用最新的 ID; 5. 可通过 `snapshot.snapshot` 表确认。 ### **操作步骤** ```sql -- 生成快照 SELECT create_wdr_snapshot(); SELECT pg_sleep(60); -- 等待一分钟 SELECT create_wdr_snapshot(); -- 查看快照 ID SELECT * FROM snapshot.snapshot; -- 生成节点报告 \a \t \o '/root/wdrNode.html' SELECT generate_wdr_report(2, 3, 'all', 'node', 'dn_6001_6002_6003'); \o \t \a -- 生成集群报告 \a \t \o '/root/wdrCluster.html' SELECT generate_wdr_report(2, 3, 'all', 'cluster'); \o \t \a ``` --- ## **任务 9:SQL 优化** ### **任务要求** * 优化执行时间最长的 SQL; * 程序输出“当前程序优化成功”视为通过。 ### **示例优化步骤** ```bash # 创建优化脚本 vim sql1.txt ``` #### **sql1.txt 内容** ```sql EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT s_name, s_address FROM supplier, nation WHERE s_suppkey IN ( SELECT ps_suppkey FROM partsupp WHERE ps_partkey IN ( SELECT p_partkey FROM part WHERE p_name LIKE 'forest%' ) AND ps_availqty > ( SELECT 0.5 * SUM(l_quantity) FROM lineitem WHERE l_partkey = ps_partkey AND l_suppkey = ps_suppkey AND l_shipdate >= DATE '1994-01-01' + INTERVAL '1' YEAR ) ) AND s_nationkey = n_nationkey AND n_name = 'CANADA' ORDER BY s_name; ``` ### **执行与优化** ```bash \i sql1.txt # 创建索引优化 CREATE INDEX idx_lineitem_shipdate ON lineitem(l_shipdate); CREATE INDEX idx_part_name ON part(p_name); # 再次执行查看优化效果 \i sql1.txt ``` ### **验证数据操作** ```sql SELECT * FROM nation; INSERT INTO nation VALUES (25, 'ZAMBIA', 4, 'This Message is generated by manual'); SELECT * FROM nation WHERE n_nationkey = 25; ``` --- ## **注意事项** 1. **权限问题**:确保执行操作的用户具有足够权限; 2. **文件路径**:确认所有路径准确无误; 3. **连接信息**:根据实际环境修改 IP 地址与端口号; 4. **时间间隔**:生成 WDR 快照时需留出足够间隔时间; 5. **备份恢复**:确保备份路径和实例命名一致。 --- ✅ **任务目录总览** | 序号 | 任务名称 | | -- | ------------ | | 1 | 创建用户、数据库和表结构 | | 2 | 导入数据 | | 3 | 备份与恢复实例 | | 4 | 创建游标存储过程 1 | | 5 | 创建游标存储过程 2 | | 6 | 锁阻塞处理 | | 7 | 查询活跃会话 | | 8 | 生成 WDR 报告 | | 9 | SQL 优化 |
上一篇:
一.一
下一篇:
二.二
0
赞
6 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网