如果您想了解SQLServer批量插入-Linux/RHEL错误和sqlserver批量导入的知识,那么本篇文章将是您的不二之选。我们将深入剖析SQLServer批量插入-Linux/RHEL错误的各
如果您想了解SQL Server 批量插入 - Linux/RHEL 错误和sql server 批量导入的知识,那么本篇文章将是您的不二之选。我们将深入剖析SQL Server 批量插入 - Linux/RHEL 错误的各个方面,并为您解答sql server 批量导入的疑在这篇文章中,我们将为您介绍SQL Server 批量插入 - Linux/RHEL 错误的相关知识,同时也会详细的解释sql server 批量导入的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- SQL Server 批量插入 - Linux/RHEL 错误(sql server 批量导入)
- Azure SQL - 从 Azure 文件而不是 blob 批量插入
- Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报
- JPA SQL Server 批量插入
- Linux rhel-server-7.0-x86_64安装Oracle Database 12c Release 1
SQL Server 批量插入 - Linux/RHEL 错误(sql server 批量导入)
如何解决SQL Server 批量插入 - Linux/RHEL 错误
我正在对驻留在 Linux/RHEL 虚拟机中的 sql Server 2019 执行批量插入查询(通过存储过程)。执行后,我收到此错误:
消息 4860,级别 16,状态 1,过程 dbo.Import_Store,第 25 行 [批量起始行 14]
无法批量加载。文件“/home/user1/FileStorage/Store1.csv”确实 不存在或您没有文件访问权限。
此错误消息不正确 - 即该文件物理存在于 VM 上的指定路径并具有正确的权限(每个人都获得了完全权限!)。
任何见解都受到高度赞赏。谢谢。
BULK INSERT dbo.Store
FROM ''/home/user1/FileStorage/Store1.csv''
WITH
(
FORMAT = ''CSV'',FirsTROW = 2,FIELDTERMINATOR = '','',ROWTERMINATOR = ''\\n''
);
仅供参考 - 我尝试了很多选项,例如使用 C:\\ 或 C:/ 而不是 /home,但到目前为止没有任何效果。
解决方法
感谢 Larnu 在上面发表评论。这让我做了一些解决我问题的事情。以下是我为同一条船上的任何人解决此问题的方法。
我基本上在 Linux VM 的根目录下创建了一个全新的共享文件夹。然后创建一个新的用户组并授予它对共享文件夹的完全访问权限。然后我将用户“mssql”添加到组中。现在我的 SQL Server 可以毫无错误地访问该位置了!
sudo mkdir -p /SharedFolder
sudo groupadd SharedUsers
sudo chgrp -R SharedUsers /SharedFolder
sudo chmod -R 2775 /SharedFolder
sudo usermod -a -G SharedUsers mssql
Azure SQL - 从 Azure 文件而不是 blob 批量插入
如何解决Azure SQL - 从 Azure 文件而不是 blob 批量插入
我在 azure 容器中有一个 ruby 应用程序,我已经为其安装了一个 azure 存储。该应用程序将一些文件上传到安装的驱动器,需要由 azure sql 提取以进行批量插入和处理。现在,从这篇文章 https://github.com/Azure/app-service-linux-docs/blob/master/BringYourOwnStorage/mounting_azure_blob.md 装载 blob 存储是只读的,我可以使用 azure 文件进行装载,但 azure sql 没有提供任何直接从 azure 文件批量插入的选项。所以我被困在 azure 文件和 blob 之间,请帮帮我...
解决方法
Azure SQL 数据库仅支持从 Azure Blob 存储读取。
不支持文件存储。
参考:BULK INSERT (Transact-SQL)
我建议您选择 Blob 存储。
HTH。
Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报
开源吞噬世界的趋势下,借助开源软件,基于开源协议,任何人都可以得到项目的源代码,加以学习、修改,甚至是重新分发。关注「开源日报」,一文速览国内外开源大事件吧!
一分钟速览新闻点!
- SUSE 为怀念旧 CentOS 的开发者们发布新发行版——Liberty Linux
- Bootstrap 创始人 Mark otto 谈及自己生病
- 欧盟委员会开源计划办公室启动漏洞赏金
- Google 在 Windows 上发布 beta 版本的 Google Play Games app
- Linux 5.17 使用新的调试功能,便于开发者更能轻松构建内核
- 基于 Chromium 项目的微软 Edge 浏览器大变更
- JetBrains 提供面向开发人员的免费开源字体 Mono
开源大新闻
SUSE 为怀念旧 CentOS 的开发者们发布新发行版——Liberty Linux
自从 2020 年红帽宣布终止 CentOS Linux 的支持,并用 CentOS Stream 取而代之后,RHEL 的替代品便相继涌现。知名 Linux 发行套件供应商 SUSE 带来了全新的 SUSE Liberty Linux 产品。据官方介绍,借助 SUSE Liberty Linux,用户可以通过经过验证的可选管理工具获得值得信赖的支持,这些工具针对混合 Linux 环境进行了优化,包括 Red Hat Enterprise Linux 、CentOS 以及用户所期望的 openSUSE 和 SUSE Linux Enterprise Server。而在一定程度上来看,Liberty Linux 等同于当前的 Red Hat 版本——RHEL 8.5 ,并且与来自 Red Hat 自己的 EPEL 存储库的软件包兼容。
Bootstrap 创始人 Mark otto 谈及自己生病
1 月 20 日,Bootstrap 创始人 Mark otto 发文表示,“2021 年 12 月 5 日,我的心脏病发作,在医院住了两个星期。第一周,我在重症监护室里处于医学上的昏迷状态,以冷冻的方式保存我身心。没有人知道当我醒来时,我是否还是我。”
幸运的是,一周之后,Mark otto 苏醒过来,分享道“好消息是我的心脏有一个新支架,而且我恢复得很好。我一直在慢慢地重新使用 Bootstrap 以确保我仍然可以设计和编码(我可以!),现在我会在网上逗留一段时间后下班休息。”同时,他也希望通过此事能够让更多的人关注自己的健康,“多和你的医生交谈、做更多的检查、了解遗传病史、锻炼身体,尽可能地保持安全和健康。虽然这有些陈词滥调,但它可以很好地挽救你的生命。”
Bootstrap是一个基于 HTML、CSS、JavaScript 的简洁灵活的网站前端框架及组件包,它也是 GitHub 上面 star 次数排名第十二的项目。Star 次数超过 155,000。
欧盟委员会开源计划办公室启动漏洞赏金
欧盟委员会开源计划办公室(EC OSPO)的一组新的漏洞赏金于 1 月 13 日启动,使用 Intigriti 漏洞赏金平台。其中,欧盟委员会开源计划办公室(EC OSPO)总共资助了200,000 欧元,用于再次关注公共服务广泛使用的开源软件的安全性。如在 LibreOffice、LEOS、Mastodon、odoo 和 CryptPad(欧盟公共服务部门使用的开源解决方案)中发现安全漏洞的奖励最高可达 5000 欧元。为他们发现的错误提供代码修复有 20% 的奖金。
Google 在 Windows 上发布 beta 版本的 Google Play Games app
Google 上个月透露要将 Android 游戏带到所有 Windows 平台。现在它正式释出了 beta 版本的 Google Play Games app,目前只对部分地区开放测试。Google 称,Google Play Games app 允许用户在 Windows 台式机或笔记本电脑上浏览、下载和玩部分手游,支持使用键盘和鼠标、在设备之间无缝同步以及与 Google Play Points 集成。该应用暂不支持 Mac。系统要求 Windows 10(v2004),8GB 内存,固态硬盘,20 GB 储存空间,8 核处理器,游戏类显卡(目前市场上的中低端显卡都支持),启用硬件虚拟化。
开源软件专区
Linux 5.17 使用新的调试功能,便于开发者更能轻松构建内核
多年来,Linux 内核支持多种 sanitizers、内存泄漏检测器等功能,这些功能主要用于帮助诊断和解决内核中的缺陷。然而,所有这些调试优化的功能并没有集中在一起,这使系统管理员和开发者在手动配置内核构建时,难以发现这些众多的功能。现在,随着 Linux 5.17 的推出,这种情况正在改变。
Linux 5.17 所做的是引入 debug.config 作为默认的内核构建配置,为调试进行优化。debug.config 将默认启用各种功能,如内核地址消毒器、未定义行为消毒器、KMemLeak,以及许多其他随着时间推移而增加的内核功能,旨在帮助调试或追踪内核问题。因此,只要一个命令,就可以得到官方推荐的内核配置,并启用许多不同的调试功能。
基于 Chromium 项目的微软 Edge 浏览器大变更
近日,微软宣布,从 Edge 96 版本开始,Web 应用将能够在浏览器中使用协议处理程序。最新功能将允许已安装的 Web 应用程序(或 PWA)导航预设或自定义协议。已安装的 Web 应用程序也将能够向操作系统注册为协议处理程序,并在调用特定协议后启动。换句话说,用户可以将网页设置为默认处理程序,比如用户想创建电子邮件,系统将默认打开浏览器中的某个网站。
此外,开发者可以通过注册以 web+ 为前缀的协议来生成 Web 应用程序自定义方案。协议处理程序可用于 Web 应用通信,其中一个应用直接调用另一个应用并通过自定义协议链接传递数据。(小编)
开源工具推荐
JetBrains 提供面向开发人员的免费开源字体 Mono
JetBrains 于近日开源 Mono 字体,其可以作为独立下载提供,并且还被捆绑在所有JetBrains IDE 中。JetBrains Mono 的默认版本带有 OpenType 功能和连字(始终可以在设置中打开和关闭)。如果有开发者的 IDE 不支持 OpenType,也可以使用该字体的特殊版本 — JetBrains Mono NL,其中不包含任何连字。
《新程序员003》正式上市,50 余位技术专家共同创作,云原生和数字化的开发者们的一本技术精选图书。内容既有发展趋势及方法论结构,华为、阿里、字节跳动、网易、快手、微软、亚马逊、英特尔、西门子、施耐德等 30 多家知名公司云原生和数字化一手实战经验!
订阅地址:https://mall.csdn.net/item/92470?utm_source=csdn_news_group
总结
以上是小编为你收集整理的Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
原文地址:https://blog.csdn.net/csdnopensource/article/details/122615511
JPA SQL Server 批量插入
如何解决JPA SQL Server 批量插入
问题说明
我正在尝试提高 JPA 中插入过程的性能。目前将 ~350,000 条记录插入我的数据库需要 4 分钟。为了提高性能,我想使用批量插入。我已经制作了一个大纲,显示了我开始使用的代码。我为尝试提高性能以及修复内存问题所做的修改。这些修改的结果。我的一些其他尝试未在修改中显示。请让我知道如何改进我的代码以允许使用 sql server 和 hibernate 进行大量插入。如果需要,我可以提供有关整个插入过程的更多信息。
启动代码
要启用此功能,我在 application.yml 中输入:
jpa:
properties:
hibernate:
jdbc:
batch_size: 1000
batch_versioned_data: true
order_inserts: true
我从 Loader 类中的代码开始:
try(Stream<String> lines = Files.lines("/path/to/file")) {
Iterators.partition(lines.iterator(),1000).forEachRemaining(batchList -> {
List<CustomEntity> mappedEntities = list.stream().map(mapLinetoEntity).collect(Collectors.toList());
//Insert batch
repository.saveAll(mappendEntities);
repository.flush();
})
}
代码修改
但这导致了内存问题,提示自定义sql实现使用EntityManager来刷新和清除持久化的实体。为此,我创建了一个 CustomEntityServiceCustom.java 接口及其实现。下面是我对修改后的 Loader 类的两次尝试:
public interface CustomEntityServiceCustom {
void batchInsertProcess(List<CustomEntity> customEntities,int start); //try 1
void batchInsertProcess(List<CustomEntity> customEntities,AtomicInteger start); //try 2
}
public class Custom CustomEntityServiceCustomImpl implements CustomEntityServiceCustom {
@PersistenceContext
private EntityManager em;
//Try 1
@Override
@Transactional
void batchInsertProcess(List<CustomEntity> customEntities,int start) {
for(CustomEntity ent : customEntities) {
em.persist(ent)
}
em.flush();
em.clear();
}
//Try 2
@Override
@Transactional
void batchInsertProcess(List<CustomEntity> customEntities,AtomicInteger start) {
final int numRecsPerInsert = 25;
Iterators.partition(customEntities.iterator(),numRecsPerInsert).forEachRemaining(batchList -> {
/*
code not included but createInsert will create an insert statement like the following:
INSERT INTO table (col1,col2) VALUES (rec1val1,rec1val2),(rec2val,rec2val2)
for 25 records at a time and then update the AtomicInteger
*/
String multiLineInsert = createInsert(batchList,start.get());
start.addAndGet(numRecsPerInsert);
em.createNativeQuery(multiLineInsert).executeUpdate();
})
em.flush();
em.clear();
}
}
//updated loader
try(Stream<String> lines = Files.lines("/path/to/file")) {
AtomicInteger start = new AtomicInteger(1);
Iterators.partition(lines.iterator(),1000).forEachRemaining(batchList -> {
List<CustomEntity> mappedEntities = list.stream().map(mapLinetoEntity).collect(Collectors.toList());
repository.batchInsertProcess(mappedEntities,start);
})
}
尝试 1 和 2 都通过不使用来利用不使用自动生成的 ID:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
当前指标
通过所有这些更改,初始代码的性能没有显着提高。
尝试 1 在 35 秒内实现了大约 50,000 条记录的插入,而尝试 2 在 1 分钟内执行了相同的插入。我不明白这一点,因为 Try 1 一次插入 1 条记录,例如:
插入表 (COL1,COL2) 值 (VAL1,VAL2);而 Try 2 在 1 条语句中插入 25 条记录。我还按照推荐的 here 尝试了每次插入 4 条记录,但这仍然是 52 秒,比不使用批量插入的 35 秒大得多。
其他注意事项
我试图让 hibernate 处理 This 之后的每个语句的多条记录,但我没有看到 sql Server 重写 BatchedStatements 的选项。我尝试添加 useBulkcopyForBatchInsert=true;连接字符串的详细信息 here,但不确定是否必须修改我的代码才能看到此更改的好处?
我也不确定在 executeUpdate() 之后是否需要刷新 EntityManager,因为在日志中我收到一条消息,即执行 0 次刷新花费了 0 纳秒,执行 2074 次部分刷新花费了 6596474 纳秒。这可能是另一个瓶颈,但我不确定幕后到底发生了什么。
解决方法
如果您使用像这样的多值子句运行插入语句,您可能会一直进行硬解析。您应该改用参数,以便将语句缓存在服务器端。此外,您应该重用 Query
对象并重新绑定值。这就是使用批量插入时 Hibernate 在幕后为您所做的。此外,它将使用 JDBC Batch API,它可以在协议级别上做一些技巧以及进一步提高性能。
总而言之,我不认为多值子句比通过 JDBC Batch API 批量插入更好。如果这真的表现更好,我会说这是 JDBC 驱动程序中的一个错误,应该修复。即使修复只是在幕后使用多值子句语句。
无论如何,如果您想尝试一下,您可能应该按照以下方式构建它:
@Override
@Transactional
void batchInsertProcess(List<CustomEntity> customEntities,AtomicInteger start) {
final int numRecsPerInsert = 25;
// creates "insert into ... values (?,?,?),(?,..."
String multiLineInsert = createInsert(numRecsPerInsert);
Query query = em.createNativeQuery(multiLineInsert);
Iterators.partition(customEntities.iterator(),numRecsPerInsert).forEachRemaining(batchList -> {
bindValues(query,batchList,start.get(),numRecsPerInsert);
start.addAndGet(numRecsPerInsert);
query.executeUpdate();
});
}
Linux rhel-server-7.0-x86_64安装Oracle Database 12c Release 1
1、官方下载安装包:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
linuxamd64_12102_database_1of2.zip
linuxamd64_12102_database_1of2.zip
2、创建oracle用户和组
[root@localhost]# groupadd oinstall
[root@localhost]# groupadd dba
[root@localhost]# useradd -g oinstall -G dba oracle
[root@localhost]# passwd oracle
3、创建目录
[root@localhost]# mkdir -p /oracle/
[root@localhost]# chown -R oracle:oinstall /oracle/
[root@localhost]# chmod -R 775 /oracle/
4、修改内核参数
在/etc/sysctl.conf文件下添加如下参数:
[root@localhost]# vi /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
执行/sbin/sysctl -p 使配置参数生效
[root@localhost]# /sbin/sysctl -p
5、修改用户限制
在/etc/security/limits.conf添加如下参数:
[root@localhost]# vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 10240
6、配置环境变量
在/home/oracle/ .bash_profile添加如下参数:
[oracle@ ~]$ vi .bash_profile
export ORACLE_BASE=/oracle/12c
export ORACLE_HOME=$ORACLE_BASE/db1
export ORACLE_SID=orcl12c
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
export EDITOR=/bin/vi
执行source .bash_profile使配置文件生效
[oracle@~]$ source .bash_profile
7、扩大swap空间
[root@localhost]#dd if=/dev/zero of=/home/swap bs=1024 count=16400000
[root@localhost]#mkswap /home/swap
[root@localhost]#swapon /home/swap
在/etc/fstab最后添加如下参数:
[root@localhost]#vi /etc/fstab
/home/swap swap swap default 0 0
在/etc/inittab最后添加如下参数:
[root@localhost]# vi /etc/inittab
swapon /home/swap
8、安装依赖包:
[root@localhost]# compat-libstdc++-33-3.2.3-61.x86_64.rpm
[root@localhost]# compat-libstdc++-33-3.2.3-61.i386.rpm
[root@localhost]# rpm -ivh libaio-devel-0.3.109-12.el7.i686.rpm
[root@localhost]# rpm -ivh libaio-devel-0.3.109-12.el7.x86_64.rpm
9、上传安装文件到/home/oracle/
10、用root用户打开另外一个终端,配置图形化安装(配置完成不能关闭窗口)
[root@localhost]# export disPLAY=:0.0
[root@localhost]# xhost +
oracle用户设置环境变量
[oracle@~]$ export disPLAY=:0.0
11、解压 安装包安装文件
[root@localhost oracle]# unzip linuxamd64_12102_database_1of2.zip
[root@localhost oralce]# unzip linuxamd64_12102_database_1of2.zip
12、检查
[oracle@~]$ cd /home/oracle/database/
[oracle@database]$ ./runInstaller -executeSysPrereqs
13、安装
[oracle@database]$ ./runinstaller
我们今天的关于SQL Server 批量插入 - Linux/RHEL 错误和sql server 批量导入的分享就到这里,谢谢您的阅读,如果想了解更多关于Azure SQL - 从 Azure 文件而不是 blob 批量插入、Bootstrap 创始人 Mark Otto 谈自己生病;替换 RHEL,SUSE 推出 Liberty Linux ; Linux 5.17 使用新调试功能 | 开源日报、JPA SQL Server 批量插入、Linux rhel-server-7.0-x86_64安装Oracle Database 12c Release 1的相关信息,可以在本站进行搜索。
本文标签: