# Oracle 11g 数据库使用指南 ## 🎯 配置已完成 您的 `production_config.json` 已经调整为Oracle 11g配置: ```json "Database": { "Enabled": true, "Type": "Oracle", "ConnectionString": "Data Source=localhost:1521/XE;User Id=PRODUCTION_MES;Password=your_password;Pooling=true;Connection Timeout=60;", "AutoCreateTables": true, "BatchSize": 100, "DataRetentionDays": 90, "Tables": { "ModbusDataTable": "PRODUCTION_DATA", "CommunicationLogTable": "COMMUNICATION_LOG", "ErrorLogTable": "ERROR_LOG", "StatisticsTable": "STATISTICS" } } ``` ## 🔧 Oracle数据库准备步骤 ### 1. 创建数据库用户(必须先执行) 使用sys或system用户连接Oracle,执行以下SQL: ```sql -- 连接为sys用户 sqlplus sys/password@localhost:1521/XE as sysdba -- 创建表空间 CREATE TABLESPACE PRODUCTION_MES_DATA DATAFILE 'D:\oracle\oradata\XE\production_mes_data.dbf' SIZE 500M AUTOEXTEND ON NEXT 10M MAXSIZE 2G; -- 创建用户 CREATE USER PRODUCTION_MES IDENTIFIED BY your_password DEFAULT TABLESPACE PRODUCTION_MES_DATA TEMPORARY TABLESPACE TEMP; -- 授予权限 GRANT CONNECT, RESOURCE TO PRODUCTION_MES; GRANT CREATE TABLE TO PRODUCTION_MES; GRANT CREATE SEQUENCE TO PRODUCTION_MES; GRANT CREATE VIEW TO PRODUCTION_MES; GRANT UNLIMITED TABLESPACE TO PRODUCTION_MES; ``` ### 2. 修改连接字符串 根据您的Oracle环境,修改 `production_config.json` 中的连接字符串: #### 本地Oracle XE(推荐) ```json "ConnectionString": "Data Source=localhost:1521/XE;User Id=PRODUCTION_MES;Password=your_actual_password;Pooling=true;Connection Timeout=60;" ``` #### 远程Oracle服务器 ```json "ConnectionString": "Data Source=your_server_ip:1521/ORCL;User Id=PRODUCTION_MES;Password=your_password;Pooling=true;Connection Timeout=60;" ``` #### 使用TNS别名 ```json "ConnectionString": "Data Source=YOUR_TNS_NAME;User Id=PRODUCTION_MES;Password=your_password;Pooling=true;Connection Timeout=60;" ``` ## 📋 数据表结构(自动创建) 程序启动后会自动创建以下表: ### PRODUCTION_DATA - 生产数据主表 - 存储所有Modbus采集的生产数据 - JSON格式存储控制信号、产品数据、测量数据 - 支持大数据量存储 ### COMMUNICATION_LOG - 通信日志表 - 记录连接、断开、数据接收等事件 - 便于故障诊断和性能分析 ### ERROR_LOG - 错误日志表 - 记录所有通信错误和异常 - 支持错误级别和解决状态跟踪 ### STATISTICS - 统计数据表 - 记录通信质量统计信息 - 支持性能监控和趋势分析 ## 🚀 使用步骤 ### 1. 准备Oracle环境 - 确保Oracle 11g服务运行 - 创建PRODUCTION_MES用户(见上面步骤1) - 确认1521端口可访问 ### 2. 配置连接信息 - 修改 `production_config.json` 中的连接字符串 - 更新实际的服务器地址、用户名、密码 ### 3. 启动程序 - 在程序中选择 `production_config.json` - 点击"连接PLC" - 系统会自动创建数据库表并开始数据采集 ## 📊 数据查询示例 ### 查看最新生产数据 ```sql SELECT READ_TIME, PROJECT_NAME, JSON_VALUE(PRODUCT_DATA_JSON, '$.ProductModel') AS 产品型号, JSON_VALUE(PRODUCT_DATA_JSON, '$.TestResult') AS 测试结果, JSON_VALUE(MEASUREMENT_DATA_JSON, '$.WorkingVoltage') AS 工作电压 FROM PRODUCTION_DATA WHERE READ_TIME >= SYSDATE - 1 ORDER BY READ_TIME DESC; ``` ### 查看通信状态 ```sql SELECT LOG_TIME, EVENT_TYPE, IS_SUCCESS, EVENT_DESCRIPTION FROM COMMUNICATION_LOG WHERE LOG_TIME >= SYSDATE - 1 ORDER BY LOG_TIME DESC; ``` ### 查看错误统计 ```sql SELECT ERROR_TYPE, COUNT(*) AS 错误次数, MAX(ERROR_TIME) AS 最近错误时间 FROM ERROR_LOG WHERE ERROR_TIME >= SYSDATE - 7 GROUP BY ERROR_TYPE ORDER BY COUNT(*) DESC; ``` ## ⚠️ 注意事项 1. **用户权限**:必须先创建PRODUCTION_MES用户并授权 2. **表空间**:建议创建专用表空间,避免占用SYSTEM表空间 3. **字符编码**:Oracle支持中文字符,无需特殊配置 4. **连接池**:已启用连接池,提高性能 5. **超时设置**:连接超时60秒,适合网络不稳定环境 ## 🔍 故障排除 ### 连接失败 ``` ORA-12541: TNS:no listener ``` **解决**:检查Oracle监听器是否启动 ```cmd lsnrctl status lsnrctl start ``` ### 用户不存在 ``` ORA-01017: invalid username/password ``` **解决**:确认用户已创建且密码正确 ### 权限不足 ``` ORA-00942: table or view does not exist ``` **解决**:授予用户CREATE TABLE权限 ```sql GRANT CREATE TABLE TO PRODUCTION_MES; ``` ## 📈 性能优化建议 1. **定期清理数据**:设置DataRetentionDays=90,自动清理90天前数据 2. **创建索引**:为READ_TIME等常用字段创建索引 3. **分区表**:数据量大时考虑按时间分区 4. **统计信息**:定期收集表统计信息,优化查询性能 配置已完成,您现在可以使用Oracle 11g数据库进行生产数据采集了!🎉