LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

每个 DBA 都应该知道的SQL Server高级功能

admin
2024年5月29日 15:25 本文热度 275
 

概述:Microsoft SQL Server 是不断变化的数据管理领域的基石,因其广泛的功能集、可伸缩性和可靠性而受到重视。一组知识渊博的数据库管理员 (DBA) 对于每个 SQL Server 实现都是必不可少的,因为他们负责维护数据库系统的高效运行和最佳性能。尽管对 SQL Server 有基本的了解是必要的,但成功的 DBA 是彻底掌握其高级功能的人。为了深入研究 SQL Server 的高级功能,这本详尽的书旨在为 DBA 提供发展其技能集和提高其能力的路线图。本教程可以帮助您发现 SQL Server 的全部潜力,SQL Server 是一个强大的关系数据库管理系统,无论您是试图磨练技能

Microsoft SQL Server 是不断变化的数据管理领域的基石,因其广泛的功能集、可伸缩性和可靠性而受到重视。一组知识渊博的数据库管理员 (DBA) 对于每个 SQL Server 实现都是必不可少的,因为他们负责维护数据库系统的高效运行和最佳性能。尽管对 SQL Server 有基本的了解是必要的,但成功的 DBA 是彻底掌握其高级功能的人。

为了深入研究 SQL Server 的高级功能,这本详尽的书旨在为 DBA 提供发展其技能集和提高其能力的路线图。本教程可以帮助您发现 SQL Server 的全部潜力,SQL Server 是一个强大的关系数据库管理系统,无论您是试图磨练技能的经验丰富的 DBA,还是渴望了解其细微差别的初学者。

在本指南中,我们将探讨每个 SQL Server DBA 都应掌握的关键高级功能,提供详细的解释、实用见解和说明性代码示例。从优化查询性能到实施可靠的安全措施,从确保高可用性到利用高级监视和优化工具,我们将涵盖熟练管理 SQL Server 所必需的广泛主题。

认识到在不断变化的数据库管理领域中持续教育和适应性的需求至关重要,因为我们踏上了这条精通之路。在每个新版本中,SQL Server 都会通过提供新颖的功能和升级来更好地满足当代数据驱动型企业不断变化的需求。DBA 可以通过采用终身学习方法和跟上最新进展来保持他们在各自领域的领导地位并为他们的公司增加价值。

因此,无论你是准备深入研究错综复杂的索引策略、探索查询优化的细微差别,还是利用高级安全措施的强大功能,本指南都将为你提供所需的知识和技能,让你自信而熟练地驾驭复杂的 SQL Server 管理。

加入我们,踏上掌握 SQL Server 高级功能的旅程,使 DBA 能够解锁新的可能性、优化性能并确保其数据库环境的弹性和安全性。让我们深入了解并发现基础知识领域之外的内容,因为我们为成为 SQL Server 的真正主人铺平了道路。

了解 SQL Server 中的索引策略

索引对于提高 SQL Server 查询速度至关重要,因为它们可以快速检索数据。了解 SQL Server 中可用的各种索引算法以及它们如何影响查询执行对于数据库管理员 (DBA) 至关重要。

1. 聚集索引

在表中,聚集索引建立数据的物理顺序。由于聚集索引决定了整个表的存储结构,因此每个表只能有一个聚集索引。在表上构造聚集索引时,数据行将按索引键指定的顺序保存。

示例:创建聚集索引

CREATE CLUSTERED INDEX IX_Employee_ID   
ON dbo.Employee (EmployeeID);

在此示例中,我们使用列创建在表上命名的聚集索引。此索引将根据 .IX_Employee_IDEmployeeEmployeeIDEmployeeEmployeeID

2. 非聚集索引

与聚集索引相比,非聚集索引对数据库中的实际数据顺序没有影响。相反,它们使用索引键列和对匹配数据行的引用构建一个独立的结构。

示例:创建非聚集索引

CREATE NONCLUSTERED INDEX IX_LastName   
ON dbo.Employee (LastName);

在这里,我们使用列创建一个在表上命名的非聚集索引。此索引将提高按列筛选或排序的查询的查询性能。IX_LastNameEmployeeLastNameLastName

3. 过滤索引

筛选索引提供了一种基于筛选谓词在表中的行子集上创建索引的方法。这对于仅访问特定数据子集的查询特别有用。

示例:创建筛选索引

CREATE NONCLUSTERED INDEX IX_SalaryHigh   
ON dbo.Employee (Salary)  
WHERE Salary > 50000;

在此示例中,我们为列大于 50000 的行创建在表上命名的筛选索引。此索引将提高涉及筛选高薪员工的查询的性能。IX_SalaryHighEmployeeSalary

4. 覆盖指数

覆盖索引是包含满足查询所需的所有列的索引,因此无需进一步查找基表。覆盖索引允许 SQL Server 直接从索引中检索所有必要的数据,从而显著提高查询性能。

示例:创建覆盖指数

CREATE NONCLUSTERED INDEX IX_CoveringIndex   
ON dbo.Employee (LastName, FirstName)  
INCLUDE (DepartmentID, Salary);

在此示例中,我们创建了在表上命名的覆盖索引,包括 和 列作为索引键列,和 列作为包含列。此索引可以满足选择 、 、 和 的查询,而无需访问基表。IX_CoveringIndexEmployeeLastNameFirstNameDepartmentIDSalaryLastNameFirstNameDepartmentIDSalary

了解索引策略是高效 SQL Server 性能优化的基础。通过适当地利用聚集索引、非聚集索引、筛选索引和覆盖索引,DBA 可以优化查询执行并增强其数据库系统的整体响应能力。但是,必须在索引创建和维护开销之间取得平衡,因为过多的索引可能会导致数据修改操作期间的性能下降。在继续探索和优化索引策略时,请记住监视索引使用情况并进行相应调整,以确保 SQL Server 环境的最佳性能。

优化查询性能

SQL Server 管理最重要的方面之一是查询性能优化。数据库管理员 (DBA) 可以通过利用各种策略和最佳实践来提高 SQL 查询的有效性,从而缩短响应时间和提高系统性能。

1. 了解执行计划

为了找到运行查询的最有效方法,SQL Server 会创建执行计划。DBA 可以通过查看执行计划来发现可能的性能瓶颈并调整查询优化。

示例:查看执行计划

-- Enable execution plan  
SET SHOWPLAN_ALL ON;  
-- Your query here  
SELECT * FROM Orders WHERE CustomerID = 123;  
-- Disable execution plan  
SET SHOWPLAN_ALL OFF;

通过启用该选项,SQL Server 将显示后续查询的执行计划,而不执行它。这允许 DBA 分析计划并做出优化决策。SHOWPLAN_ALL

2. 查询提示

SQL Server 提供了查询提示,允许 DBA 影响查询优化器的行为。虽然应明智地使用查询提示,但它们可以有效地优化特定的查询方案。

示例:使用查询提示强制索引

SELECT * FROM Orders WITH (INDEX=IX_CustomerID) WHERE CustomerID = 123;

在此示例中,提示用于强制查询优化器在执行查询时使用索引。如果优化程序选择次优执行计划,这可能是有益的。INDEXIX_CustomerID

3. 更新统计数据

为了确定最佳查询执行策略,SQL Server 使用统计信息。不准确或过时的统计数据可能会导致性能低于标准。为了确保查询优化器具有最新的数据,DBA 应经常更新统计信息。

示例:更新统计信息

-- Update statistics for a specific table  
UPDATE STATISTICS Orders;  
-- Update statistics for all tables in a database  
EXEC sp_updatestats;

通过更新统计信息,DBA 可确保 SQL Server 的查询优化器具有有关数据分布的准确信息,从而能够生成最佳执行计划。

4. 指标维护

正确的索引维护对于查询性能至关重要。DBA 应定期监视索引碎片并执行索引维护任务,例如重建或重新组织索引以保持最佳性能。

示例:重建索引

ALTER INDEX IX_CustomerID ON Orders REBUILD;

通过重建索引,DBA 可以消除碎片并确保查询高效执行。

5. 查询重写

有时,优化查询性能涉及重写查询以更有效地实现所需结果。这可能涉及重构联接、消除冗余子查询或使用替代方法来实现相同的结果。

示例:查询重写

-- Original query  
SELECT * FROM Orders o  
JOIN Customers c ON o.CustomerID = c.CustomerID  
WHERE c.Country = 'USA';  
-- Rewritten query  
SELECT * FROM Orders WHERE CustomerID IN (SELECT CustomerID FROM Customers WHERE Country = 'USA');

在此示例中,重写的查询通过使用子查询消除了对联接的需要,这可能会根据数据分布和索引带来更好的性能。

它需要全面掌握 SQL Server 内部结构、查询优化策略和数据库设计概念来优化查询性能,这是一项复杂的任务。DBA 能够通过利用执行计划、查询提示、统计信息更新、索引维护和查询重写来提高其数据库系统的响应能力并显著提高 SQL 查询的性能。为了获得最佳结果,必须有条不紊地进行查询优化,并利用各种工具和策略。在继续磨练查询优化技术时,请密切关注性能指标,并根据需要调整优化策略,以保证 SQL Server 性能达到峰值。

实施高级安全措施

对于每个公司来说,确保 SQL Server 数据库中保存的数据的安全性至关重要。SQL Server 提供了全面的安全功能和过程,从审核和加密到身份验证和授权。我们将在这一部分中介绍数据库管理员 (DBA) 可以实施的高级安全方法,以正确保护敏感数据。

1. 透明数据加密 (TDE)

透明数据加密 (TDE) 提供了额外的保护,防止对数据文件的不必要访问,该加密在数据库处于静止状态时对其进行加密。TDE 使用受 master 数据库中保存的证书保护的数据库加密密钥 (DEK) 对数据进行加密。

示例:启用 TDE

USE master;  
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourMasterKeyPassword';  
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My TDE Certificate';  
USE YourDatabase;  
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE MyServerCert;  
ALTER DATABASE YourDatabase SET ENCRYPTION ON;

执行这些命令将创建主密钥、证书,并使用该证书对数据库进行加密。

2.始终加密

敏感数据可以在传输过程中和静态时使用“始终安全”进行保护,从而保证在其生命周期内对其进行加密。由于加密密钥是独立于 SQL Server 维护的,因此管理员无法查看纯文本数据。

示例:启用 Always Encrypted

CREATE COLUMN MASTER KEY MyCMK  
WITH (KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',  
     KEY_PATH = 'CurrentUser/My/9C573AF808CA04188B274F46E16C5C9E938E6504');  
CREATE COLUMN ENCRYPTION KEY MyCEK  
WITH VALUES (  
   COLUMN_MASTER_KEY = MyCMK,  
   ALGORITHM = 'RSA_OAEP',  
   ENCRYPTED_VALUE = <EncryptedColumnEncryptionKey>  
);  
ALTER TABLE dbo.MyTable  
ALTER COLUMN MySensitiveColumn  
ADD ENCRYPTED WITH (ENCRYPTION_TYPE = DETERMINISTIC,  
                   ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256',  
                   COLUMN\_ENCRYPTION_KEY = MyCEK);

此示例演示为表中的特定列设置 Always Encrypted 的过程。

3. 行级安全性 (RLS)

行级安全性 (RLS) 允许基于安全谓词对数据库表中行的访问进行精细控制。RLS 使组织能够实施安全策略,根据用户身份或角色成员身份限制对特定行的访问。

示例:实现行级安全性

CREATE SECURITY POLICY SalesFilter  
ADD FILTER PREDICATE dbo.fn_securitypredicate(UserID) ON Sales  
WITH (STATE = ON);

创建名为 URITY 的策略,该策略根据列将筛选谓词应用于表。SalesFilterSalesUserID

4. 动态数据脱敏

通过在查询结果中隐藏敏感数据,动态数据掩码 (DDM) 可以保护机密信息免受未经授权的用户的侵害。DDM 根据既定的屏蔽标准动态屏蔽数据,确保敏感数据对未经授权的用户隐藏。

示例:应用动态数据掩码

ALTER TABLE dbo.MyTable  
ALTER COLUMN MySensitiveColumn  
ADD MASKED WITH (FUNCTION = 'partial(2,"XXXXXX",0)');  
-- This masks all characters except the first two characters of the sensitive column.

组织可以通过对敏感列应用动态数据掩码来管理对敏感数据的访问,而无需更改基础数据。

保护 SQL Server 数据库中保存的敏感数据需要实施复杂的安全过程。组织可以实施强大的安全规则,并利用透明数据加密 (TDE)、始终加密、行级安全性 (RLS) 和动态数据掩码 (DDM) 等强大技术来保护关键数据免受不必要的访问。数据库管理员可以通过利用这些高级安全方法来减少安全威胁并保持法规遵从性,从而提高对其数据库环境完整性和安全性的信任和信心。

高可用性和灾难恢复解决方案

数据库管理的一个关键部分是灾难恢复 (DR) 和高可用性 (HA),它们保证 SQL Server 数据库即使在硬件故障、自然灾害或其他干扰的情况下也是可靠的和可用的。组织可以通过使用 SQL Server 的灾难恢复和高可用性功能和解决方案套件来减少停机时间和数据丢失。本节将讨论 SQL Server 提供的一些更复杂的 HA/DR 选项,以及演示如何使用这些选项的代码示例。

1. Always On 可用性组

Always On 可用性组具有本地高可用性和远程灾难恢复功能,可在数据库级别提供高可用性和灾难恢复解决方案。在主副本发生故障的情况下,可用性组在同步副本之间提供自动故障转移,从而最大程度地减少停机时间和数据丢失。

示例:配置 Always On 可用性组

-- Create an availability group  
CREATE AVAILABILITY GROUP MyAG  
 WITH (AUTOMATED_BACKUP_PREFERENCE = PRIMARY);  
-- Add replicas to the availability group  
ALTER AVAILABILITY GROUP MyAG  
 ADD REPLICA ON 'SQLServer2'  
 WITH (ENDPOINT_URL = 'TCP://SQLServer2:5022');  
-- Add databases to the availability group  
ALTER AVAILABILITY GROUP MyAG  
 ADD DATABASE AdventureWorks;

在此示例中,在两个 SQL Server 实例( 和 )上创建了一个名为 的可用性组,其中包含副本。数据库将添加到可用性组以进行自动故障转移。MyAGSQLServer1SQLServer2AdventureWorks

2. 日志传送

日志传送是一种灾难恢复解决方案,涉及将事务日志备份从主数据库传送到一个或多个辅助数据库。通过应用事务日志备份,辅助数据库会定期联机,从而在主数据库发生故障时提供热备用数据库。

示例:设置日志传送

-- Configure log shipping on the primary database
EXEC sp_add_log_shipping_primary_database
 @database = N'AdventureWorks',
 @backup_directory = N'C:\Backup',
 @backup_share = N'\\BackupServer\BackupShare',
 @backup_job_name = N'AdventureWorks Backup';
-- Add secondary database and monitor server
EXEC sp_add_log_shipping_secondary_database
 @secondary_database = N'AdventureWorks_Secondary',
 @primary_server = N'PrimaryServer',
 @primary_database = N'AdventureWorks',
 @restore_delay = 60,
 @restore_mode = 1,
 @disconnect_users = 1;
-- Schedule backup and restore jobs
EXEC sp_add_schedule
 @schedule_type = 'Daily',
 @freq_type = 4,
 @freq_interval = 1,
 @freq_subday_type = 1,
 @freq_subday_interval = 0;
EXEC sp_add_log_shipping_schedule
 @agent_id = @agent_id,
 @schedule_id = @schedule_id;

存储基础架构、故障转移群集实例提供高可用性。SQL Server 故障转移群集实例通过在节点发生故障时自动切换到正常运行的节点来最大程度地减少停机时间。

示例:设置故障转移群集实例

-- Create a failover cluster
USE master;
CREATE CLUSTER ResourceName
ON DiskName ( DriveLetter:Path\FileName, DriveLetter:Path\FileName )
[ WITH (
   FILENAME = Path\FileName,
   FILESIZE = Size [KB|MB|GB],
   MAXSIZE = MaxSize [KB|MB|GB],
   FILEGROWTH = GrowthIncrement [KB|MB|GB],
   OFFLINE = {0|1},
   ONLINE = {0|1}
 ) ];

此示例演示如何为 SQL Server 实例创建群集资源。

为了在面对不可预见的中断时维护数据库的可访问性和弹性,灾难恢复和高可用性是 SQL Server 管理的基本要素。SQL Server 提供的高级 HA/DR 解决方案包括 Always On 可用性组、日志传送和故障转移群集实例;每个都有特定的优点和应用。在发生硬件故障、自然灾害或其他紧急情况时,组织可以通过将这些解决方案付诸实践并定期评估灾难恢复计划来减少停机时间、限制数据丢失并保证业务连续性。

利用数据压缩技术

在 SQL Server 系统中,数据压缩是降低存储成本和提高查询速度的有效方法。数据库管理员 (DBA) 可以通过在行或页级别压缩数据来最大程度地减少 I/O 开销并最大限度地提高存储使用率。我们将在本节中检查 SQL Server 数据压缩选项,并提供演示如何使用这些选项的代码示例。

1. 行级压缩

行级压缩通过消除每行中未使用的空间来减少单个行的存储占用空间。这种压缩技术对于具有可变长度列或稀疏数据的表特别有效。

示例:启用行级压缩

-- Enable row-level compression for a table  
ALTER TABLE dbo.MyTable  
REBUILD WITH (DATA_COMPRESSION = ROW);

在此示例中,为表启用了行级压缩,从而减少了每行所需的存储空间。MyTable

2. 页面级压缩

页面级压缩可压缩整个数据页,与行级压缩相比,可节省更多存储空间。页面压缩的工作原理是识别和消除每个页面中的冗余数据,从而减少整体存储占用空间。

示例:启用页面级压缩

-- Enable page-level compression for a table  
ALTER TABLE dbo.MyTable  
REBUILD WITH (DATA_COMPRESSION = PAGE);

在这里,为表启用了页面级压缩,压缩整个数据页以减少存储开销。MyTable

3. 分区级压缩

分区级压缩允许 DBA 有选择地将压缩应用于分区表中的各个分区。这样可以对存储优化进行更精细的控制,从而仅将压缩应用于具有最大存储节省潜力的分区。

示例:启用分区级压缩

-- Enable partition-level compression for a partition  
ALTER TABLE dbo.MyPartitionedTable  
PARTITION MyPartition  
REBUILD WITH (DATA_COMPRESSION = PAGE);

在此示例中,页面级压缩应用于表中的特定分区 (),允许针对特定数据子集定制压缩。MyPartitionMyPartitionedTable

4. 列存储压缩

列存储压缩是一种专门的压缩技术,专为分析工作负载和数据仓库方案而设计。列存储索引将数据组织成列而不是行,从而为分析查询提供高效的压缩和查询性能。

示例:创建列存储索引

-- Create a columnstore index on a table  
CREATE NONCLUSTERED COLUMNSTORE INDEX IX_Columnstore  
ON dbo.MyTable (Column1, Column2, Column3);

在这里,在表上创建一个名为的列存储索引,指定要包含在列存储索引中的列。IX_ColumnstoreMyTable

在 SQL Server 设置中,数据压缩技术对于提高查询性能和存储效率非常有益。DBA 可以有效地降低存储成本,最大限度地减少 I/O 开销,并通过利用行级、页级、分区级和列存储压缩来增强整体数据库性能。但是,必须仔细考虑压缩的权衡,例如压缩和解压缩过程中较高的 CPU 使用率。DBA 可以选择最佳压缩方法,并通过评估其 SQL Server 系统的工作负载模式和存储功能来最大限度地提高存储利用率,同时保持最佳查询性能。

高级监控和调优

在 SQL Server 系统中,确保最佳性能和可靠性需要高级监视和优化过程。数据库管理员 (DBA) 可以利用高级监视工具和优化策略主动检测性能瓶颈,增强查询执行,并保证 SQL Server 数据库的无缝运行。本节将介绍高级优化和监视技术,并提供代码示例来说明如何使用这些技术。

1. 动态管理视图 (DMV)

在动态管理视图 (DMV) 的帮助下,DBA 可以监视性能指标、发现资源瓶颈并解决性能问题。DMV 提供有关 SQL Server 内部工作原理的深入信息。

示例:使用 DMV 监视查询性能

-- Identify top CPU-consuming queries
SELECT TOP 10
   qs.execution_count,
   qs.total_worker_time AS TotalCPU,
   qs.total_worker_time / qs.execution_count AS AvgCPU,
   SUBSTRING(qt.text, qs.statement_start_offset/2 + 1,
   (CASE
       WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
       ELSE qs.statement_end_offset
   END - qs.statement_start_offset)/2 + 1) AS statement_text
FROM
   sys.dm_exec_query_stats AS qs
CROSS APPLY
   sys.dm_exec_sql_text(qs.sql_handle) AS qt
ORDER BY
   qs.total_worker_time DESC;

此查询利用 DMV 来识别 SQL Server 实例中占用 CPU 最多的查询,从而帮助 DBA 确定优化工作的优先级,以解决性能瓶颈问题。

2. 查询商店

查询存储是 SQL Server 中的一项内置功能,用于捕获查询执行统计信息和执行计划,使 DBA 能够监视一段时间内的查询性能并识别回归。

示例:启用查询存储

-- Enable Query Store for a database  
ALTER DATABASE AdventureWorks  
SET QUERY_STORE = ON;

d 事件并解决性能问题。

示例:创建扩展事件会话

-- Create an Extended Events session to monitor deadlock events  
CREATE EVENT SESSION DeadlockMonitor  
ON SERVER  
ADD EVENT sqlserver.xml_deadlock_report  
ADD Tage0.eent_file(SET filename = N'DeadlockMonitor');

此代码创建一个扩展事件会话,该会话用于捕获 SQL Server 中发生的死锁事件,并将其写入事件文件进行分析。DeadlockMonitor

4. 查询优化

优化查询性能是优化 SQL Server 数据库的一个关键方面。DBA 可以使用各种技术(如索引优化、查询重写和统计信息更新)来改进查询执行计划并增强整体性能。

示例:索引优化

-- Identify missing indexes using dynamic management views
SELECT
   migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,
   'CREATE INDEX IX_' + CONVERT(VARCHAR, mig.index_group_handle) + '_' + CONVERT(VARCHAR, mid.index_handle) +
   ' ON ' + mid.statement + ' (' + ISNULL(mid.equality_columns, '') +
   CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END +
   ISNULL(mid.inequality_columns, '') + ')' +
   ISNULL(' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
   migs.*, mid.database_id, mid.[object_id]
FROM
   sys.dm_db_missing_index_groups AS mig
INNER JOIN
   sys.dm_db_missing_index_group_stats AS migs
   ON migs.group_handle = mig.index_group_handle
INNER JOIN
   sys.dm_db_missing_index_details AS mid
   ON mig.index_handle = mid.index_handle
WHERE
   mid.database_id = DB_ID()
ORDER BY
   migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC;

此查询使用 DMV 来识别可能提高查询性能的缺失索引,并生成语句以创建缺失的索引。CREATE INDEX

在 SQL Server 系统中,确保最佳性能和可靠性需要高级监视和优化过程。为了确保 SQL Server 数据库的无缝运行,DBA 可以主动识别性能瓶颈,优化查询执行,并通过利用查询存储、扩展事件、动态管理视图 (DMV) 和查询优化等工具和技术获得对 SQL Server 性能的宝贵见解。DBA 可以通过将这些复杂的监视和优化策略集成到其流程中,有效地维护 SQL Server 设置并为其公司提供最佳性能。


该文章在 2024/5/29 15:25:23 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved