一、系统准备与依赖安装
1. 安装基础软件包
zypper install -y unzip gzip tar iproute2 net-tools sysstat lvm2 chrony kexec-tools
-
若提示已安装,属正常。
-
代理设置临时生效:
export http_proxy="http://192.168.20.80:3128" export https_proxy="http://192.168.20.80:3128"
永久生效需修改
/etc/sysconfig/proxy。
2. 解决 GCC 9 运行时库缺失
错误:HANA 安装检查要求 libgcc_s1、libstdc++6、libatomic1 ≥ 9.2.1。 解决:
zypper addrepo -f https://download.opensuse.org/distribution/leap/15.3/repo/oss/ openSUSE-Leap-15.3
zypper --gpg-auto-import-keys refresh
zypper install -y --allow-vendor-change gcc9 gcc9-c++
验证:
rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}\n' libgcc_s1 libstdc++6 libatomic1
备选:加 --ignore=check_platform 跳过检查,但不推荐。
3. NTP 时间同步
chronyc sources 中 ^? 表示源不可用,Reach=0 表示未响应。 检查:
chronyc tracking
chronyc sources -v
systemctl status chronyd
二、SAP HANA 安装(hdblcm)
1. 解压与权限
unzip saphana-2.00.057.zip -d /opt/install/hana_unpacked
chmod -R 755 /opt/install/hana_unpacked/saphana-2.00.057
若 ./hdblcm 报 Permission denied,需确保有执行权限。
2. 正确安装命令
./hdblcm --action=install \
--sid=HDB \
--number=00 \
--batch \
--password=Csdu_1234 \
--system_user_password=Csdu_1234 \
--sapadm_password=Csdu_1234 \
--datapath=/hana/data/HDB \
--logpath=/hana/log/HDB \
--sapmnt=/hana/shared
注意:参数是 --sapmnt,不是 --sharedpath。
3. 常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
Unknown option: sharedpath |
参数名错误 | 改用 --sapmnt |
Permission denied |
缺少执行权限 | chmod -R +x |
| GCC 9 检查失败 | 运行时库版本低 | 安装 gcc9/gcc9-c++ |
三、HANA 多容器(MDC)与租户管理
1. 核心概念
-
SYSTEMDB:系统数据库,管理租户,端口
3<实例号>13(如 30013)。 -
租户数据库:业务数据库,端口
3<实例号>15(如 30015)。 -
所有建库操作必须在 SYSTEMDB 执行。
2. 创建租户数据库
-- 连接 SYSTEMDB
hdbsql -i 00 -d SYSTEMDB -u SYSTEM -p Csdu_1234
-- 创建租户,密码需满足 A1a 规则(大写+小写+数字)
CREATE DATABASE csdu_db SYSTEM USER PASSWORD CsduDb123;
-- 查看状态
SELECT DATABASE_NAME, ACTIVE_STATUS FROM M_DATABASES;
3. 连接租户数据库
hdbsql -i 00 -d csdu_db -u SYSTEM -p CsduDb123
提示符变为 hdbsql CSDU_DB=> 表示连接成功。
4. 创建 Schema 和表
CREATE SCHEMA csdu;
CREATE COLUMN TABLE csdu.csdu_customer (cust_id NVARCHAR(32) PRIMARY KEY, cust_name NVARCHAR(100), id_type NVARCHAR(20), id_no NVARCHAR(50), phone NVARCHAR(30), address NVARCHAR(500), cust_type NCHAR(1), risk_level NCHAR(1), open_date DATE, status NCHAR(1), branch_no NVARCHAR(20), remark NCLOB, csdun_tag NVARCHAR(20));
CREATE COLUMN TABLE csdu.csdu_transaction (trans_id NVARCHAR(64) PRIMARY KEY, acct_no NVARCHAR(32), trans_type NVARCHAR(10), trans_date DATE, trans_time TIMESTAMP, dr_cr_flag NCHAR(1), trans_amt DECIMAL(18,2), balance DECIMAL(18,2), opp_acct_no NVARCHAR(32), opp_name NVARCHAR(100), opp_bank_no NVARCHAR(20), trans_channel NVARCHAR(20), trans_summary NVARCHAR(200), trans_detail NCLOB, teller_no NVARCHAR(20), branch_no NVARCHAR(20), check_flag NCHAR(1), csdun_tag NVARCHAR(20));
四、hdbsql 使用要点
1. 交互模式规则
-
回车即执行,不会等待分号。
-
多行 SQL 会被拆成多条语句,逐条报错。
-
必须将完整 SQL 写成一行,或使用
-f执行 SQL 文件。
2. 批量插入数据
利用 SERIES_GENERATE_INTEGER 生成序列:
INSERT INTO csdu.csdu_transaction (trans_id, acct_no, trans_type, trans_date, trans_time, dr_cr_flag, trans_amt, balance, opp_acct_no, opp_name, opp_bank_no, trans_channel, trans_summary, trans_detail, teller_no, branch_no, check_flag, csdun_tag) SELECT 'TXN' || LPAD(TO_VARCHAR(GENERATED_PERIOD_START), 15, '0'), 'ACCT' || LPAD(TO_VARCHAR(GENERATED_PERIOD_START), 10, '0'), 'DEPOSIT', CURRENT_DATE, CURRENT_TIMESTAMP, 'C', 100.00, 1000.00, 'OPP' || LPAD(TO_VARCHAR(GENERATED_PERIOD_START), 10, '0'), 'OPP_NAME', 'BANK001', 'ONLINE', 'TEST SUMMARY', 'TEST DETAIL', 'TELLER01', 'BRANCH01', 'N', 'TAG01' FROM SERIES_GENERATE_INTEGER(1, 1, 100000);
建议:保存为 .sql 文件后用 hdbsql -f file.sql 执行。
3. CSV 导入
IMPORT FROM CSV FILE '/usr/sap/HDB/HDB00/work/csdu_trans.csv' INTO csdu.csdu_transaction;
-
文件必须放在 HANA 允许的目录(
work、backup)。 -
或修改配置:
ALTER SYSTEM ALTER CONFIGURATION ('indexserver.ini', 'system') SET ('import_export', 'csv_import_path_filter') = '/backup' WITH RECONFIGURE;
4. 常用命令
hdbsql -i 00 -u SYSTEM -p Csdu_1234 "SELECT * FROM M_DATABASE;"
hdbnsutil -sr_state # 查看系统复制状态
HDB info # 查看进程
五、CSDU 客户端安装与端口检查
1. 安装客户端
chmod +x csdu-client-linux-glibc2.17-x86_64.bin
./csdu-client-linux-glibc2.17-x86_64.bin
-
选择
client类型,端口默认10002。 -
若报
/lib/systemd/system/csdu.service: No such file or directory:mkdir -p /usr/lib/systemd/system ln -s usr/lib /lib # 若 /lib 链接损坏 systemctl daemon-reload systemctl enable csdu.service
2. 端口检查
netstat -tlnp | grep 10002
ps -ef | grep csdu
日志中大量 check_remote_port error ... 10002 timed out 表示:
-
目标节点客户端未启动
-
网络不通或防火墙拦截
-
客户端离线
六、备份恢复错误处理
错误现象
目标数据库[CSDU_DB]状态非停止,需要先执行停止操作 检查目标数据库[CSDU_DB]的运行状态为:YES
解决步骤
-
连接 SYSTEMDB:
hdbsql -i 00 -d SYSTEMDB -u SYSTEM -p csdu_1234 -
停止租户数据库:
ALTER SYSTEM STOP DATABASE CSDU_DB; -
验证状态:
SELECT DATABASE_NAME, ACTIVE_STATUS FROM M_DATABASES WHERE DATABASE_NAME = 'CSDU_DB';状态变为
NO后,重新执行恢复任务。
强制断开连接(可选)
ALTER SYSTEM DISCONNECT SESSION ALL;
七、其他问题速查
| 问题 | 原因 | 解决 |
|---|---|---|
ldd: bad interpreter |
/usr/bin/bash 缺失 |
ln -s /bin/bash /usr/bin/bash |
hdbsql: command not found |
PATH 未包含 | 使用全路径 /usr/sap/HDB/HDB00/exe/hdbsql |
M_SYSTEM_REPLICATION 0 行 |
未配置系统复制 | 正常,需 hdbnsutil -sr_enable |
invalid schema name |
在 SYSTEMDB 中建业务表 | 连接到租户数据库再建 |
密码 A1a 规则 |
缺少大写/小写/数字 | 使用 CsduDb123 类密码 |
八、关键路径与命令汇总
| 项目 | 路径/命令 |
|---|---|
| HANA 安装目录 | /opt/install/hana_unpacked/saphana-2.00.057 |
| hdblcm | ./hdblcm --action=install ... |
| hdbsql | /usr/sap/HDB/HDB00/exe/hdbsql |
| 实例目录 | /usr/sap/HDB/HDB00 |
| 系统数据库端口 | 30013 |
| 租户数据库端口 | 30015 |
| CSDU 客户端端口 | 10002 |
| 日志文件 | /var/tmp/hdb_HDB_hdblcm_install_*/hdblcm.log |