三、SQLServer 数据库安装集

news2024/11/18 3:39:36

一、Docker 安装

  • Docker下安装SqlServer2019
  • Docker 安装 SQLServer

1. 创建容器

  • 前置准备
# 1. 创建`主机映射目录`
mkdir -p /root/sqlserver
# 2. 修改`主机映射目录权限`
chown -R 10001:0 /root/sqlserver

  • 创建容器
# 1、拉取`镜像`。
#sudo docker pull mcr.microsoft.com/mssql/server:2019-latest

# 阿里云拉取。
docker pull registry.cn-hangzhou.aliyuncs.com/newbe36524/server:2019-latest
# 重命名`镜像标签`。
docker tag registry.cn-hangzhou.aliyuncs.com/newbe36524/server:2019-latest mcr.microsoft.com/mssql/server:2019-latest

------------------------------------------------------------
# 2、启动`容器`。
docker run --name 'sqlserver_1' -p 1433:1433 \
	-e 'SA_PASSWORD=[密码:AAAbbb123]' \
    -e 'ACCEPT_EULA=Y' \
    -u 0:0 \
    -v '/root/sqlserver':'/var/opt/mssql' \
    -d ['镜像ID']

sudo docker run --name 'sqlserver_2' -p 1434:1433 \
	-e 'MSSQL_SA_PASSWORD=AAAbbb123' \
	-e 'ACCEPT_EULA=Y' \
	-v /root/sqlserver:/var/opt/mssql \
	-d 56beb1db7406
参数说明
-e ‘SA_PASSWORD=[密码:AAAbbb123]’设置 SQLServer 数据库 SA账号 的密码
-e ‘ACCEPT_EULA=Y’设置同意 SQLServer 数据库使用条款 , 否则无法使用
-e ‘MSSQL_PID=[产品序列号]’
–net=host

2. 脚本创建

# 容器ID。
cid='sqlserver_rs'

# 删除容器。
docker_rm() {
	sudo docker rm -f $cid
}

# 运行容器。
docker_run() {
	sudo docker run -d --name $cid -p 1433:1433 \
		-e 'MSSQL_SA_PASSWORD=AAAbbb123' \
		-e 'ACCEPT_EULA=Y' \
		'sqlserver'
	sleep 2
}

# 重启容器。
docker_restart() {
	sudo docker restart $cid
	sleep 2
}

# 拷贝备份文件。
docker_copy() {
	sudo docker cp /root/dam/uploadPath/upload/rs.bak $cid:/var/opt/mssql/
	sleep 2
}

# 备份文件还原(加`-it`报错`the input device is not a TTY`)。
docker_exec() {
	sudo docker exec $cid /opt/mssql-tools/bin/sqlcmd \
		-S 'localhost' -U 'SA' -P 'AAAbbb123' \
		-Q 'RESTORE DATABASE rs_new FROM DISK = "/var/opt/mssql/rs.bak" WITH MOVE "rs_new" TO "/var/opt/mssql/data/rs_new.mdf", MOVE "rs_new_log" TO "/var/opt/mssql/data/rs_new.ldf"'
	sleep 2
}

docker_rm
echo 'rm' = $?
docker_run
echo 'run' = $?
docker_copy
echo 'copy' = $?
docker_exec
echo 'exec' = $?
echo $?
  • the input device is not a TTY
  • 在重启过程中用 Shell脚本 去启动 Docker容器 并执行某一操作时,可能会出现如题所示错误,原因是后台linux执行的时候没有终端设备,TTY一词源于Teletypes,或teletypewriters。其实出现该错误和我们的一个习惯有关,一般来说我们启动容器后要与容器进行交互操作,这是,就要加上"-it"这个参数,而在重启过重中或定时任务中,如果让脚本在后台运行,就没有可交互的终端,这就会引发如题所示错误,解决办法就是去掉“-it”这个参数。
  • Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
  • Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.

二、操作


1. 连接数据库

在这里插入图片描述


2. 创建数据库

在这里插入图片描述


3. 常用 SQL

# 登录容器。
docker exec -it ['容器ID'] /opt/mssql-tools/bin/sqlcmd \
	-S localhost -U sa -P ['密码']
docker exec -it 'sqlserver_1' /opt/mssql-tools/bin/sqlcmd \
	-S localhost -U sa -P 'AAAbbb123'

# 还原数据库。
sudo docker exec -it 'sqlserver_1' /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P 'AAAbbb123' \
   -Q 'RESTORE DATABASE test FROM DISK = "/var/opt/mssql/test.bak" WITH MOVE "test" TO "/var/opt/mssql/data/test.mdf", MOVE "test_log" TO "/var/opt/mssql/data/test.ldf"'

sudo docker exec -it 'sqlserver_2019' /opt/mssql-tools/bin/sqlcmd 
	-S localhost \
   -U SA \
   -P 'AAAbbb123' \
   -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/rs.bak"' \
   | tr -s ' ' | cut -d ' ' -f 1-2

sudo docker cp '/root/sqlserver/test.bak' 'sqlserver_1:/var/opt/mssql/data\test.bak'

-- 备份。
BACKUP DATABASE [test]
TO
  DISK = N'/var/opt/mssql/data\test.bak'
WITH
  NAME = N'test - Backup',
  NOFORMAT, NOINIT, SKIP,
  STATS = 5

-- 还原。
RESTORE DATABASE [test] 
FROM
  DISK = N'/var/opt/mssql/data\test.bak'
WITH
  FILE = 1,
  RECOVERY,
  STATS = 5;

-- 查看数据库连接数。
SELECT COUNT(1) FROM
  [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT
  [DBID]
  FROM
  [Master].[dbo].[SYSDATABASES]
  WHERE  NAME='库名'
)
go

------------------------------------------------------------
select * 
from sysprocesses 
where dbid in (select dbid from sysdatabases where name='库名')
go

------------------------------------------------------------
SELECT u.id, u.name
FROM [test].[dbo].[user] u
go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/905972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超越函数界限:探索JavaScript函数的无限可能

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📚 前言 📘 1. 函数的基本概念 📟 1.1 函数的定义和调用 📟 1.2 …

用加持了大模型的 Byzer-Notebook 做数据分析是什么体验

Byzer-Notebook 是专门为 SQL 而研发的一款 Web Notebook。他的第一公民是 SQL,而 Jupyter 则是是以 Python 为第一公民的。 随着 Byzer 引擎对大模型能力的支持日渐完善, Byzer-Notebook 也在不自觉中变得更加强大。我和小伙伴在聊天的过程中才发现他已…

TCP定制协议,序列化和反序列化

目录 前言 1.理解协议 2.网络版本计算器 2.1设计思路 2.2接口设计 2.3代码实现: 2.4编译测试 总结 前言 在之前的文章中,我们说TCP是面向字节流的,但是可能对于面向字节流这个概念,其实并不理解的,今天我们要介…

QT:绘图事件QPainter

绘图事件QPainter 绘图事件&#xff08;需要重写的函数&#xff09;&#xff1a;paintEvent 声明一个画家对象 QPainter painter(this) 指定绘图设备 画线&#xff0c;画圆&#xff0c;画矩形&#xff0c;画文字 可设置画笔&#xff0c;画刷#include <QPainter> ...... …

剑指 Offer 48. 最长不含重复字符的子字符串(C++实现)

剑指 Offer 48. 最长不含重复字符的子字符串https://leetcode.cn/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/ dp 注意&#xff1a;缩小 不含重复字符子串 时的写法 dp_1 min(i - charToIndex[s[i]], dp_0 1); int lengthOfLongestSubstring(string s…

Autosar MCAL-S32K324 CAN-FD配置及使用

文章目录 前言配置MCAL CANCAN Controller配置CAN FD波特率配置Ram block关于MailBox 代码中使用CAN FD报文发送和接收CAN FD报文接收CAN FD报文发送 总结 前言 在之前的文章中&#xff0c;介绍了标准CAN的MCAL配置&#xff0c;在此基础上&#xff0c;扩展为CAN-FD就会容易很多…

6.RocketMQ之消费索引文件ConsumeQueue

功能&#xff1a;作为CommitLog文件的索引文件。 本文着重分析为consumequeue/topic/queueId目录下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface…

NetSuite OIDC、SAML SSO 演示

NetSuite的SSO的策略近些年处于演进过程&#xff0c;所以原来的Inbound SSO和Outbound SSO已经退出历史舞台。前者已经废止&#xff0c;后者在24年底废止。目前的SSO策略是&#xff1a; 第三方的身份认证服务商NetSuite as OIDC Provider 前者的含义是&#xff0c;把认证服务…

数据结构 - 基本概念和术语

基础概念之间的关系大致如下&#xff1a; 一、数据、数据元素、数据项和数据对象 数据 > 数据对象 > 数据元素 > 数据项 类比数据库&#xff0c;这四个概念代表的含义如下所示&#xff1a; 数据&#xff1a;整个数据库的所有数据数据对象&#xff1a;这个数据库的…

Shell脚本五:函数和数组

文章目录 1.函数1.1Shell函数的概念1.2函数的好处1.2函数的组成1.3函数的结构1.4查看函数列表1.5删除函数1.6函数的返回值1.6.1使用原则1.6.2示例 1.7函数的作用范围1.8函数递归1.8.1示例 2.数组2.1什么是数组2.2数组的作用2.3数组名和索引2.4定义数组的方式2.5普通数组和关联数…

深入理解分布式架构,构建高效可靠系统的关键

深入探讨分布式架构的核心概念、优势、挑战以及构建过程中的关键考虑因素。 引言什么是分布式架构&#xff1f;分布式架构的重要性 分布式系统的核心概念节点和通信数据分区与复制一致性与一致性模型负载均衡与容错性 常见的分布式架构模式客户端-服务器架构微服务架构事件驱动…

对Lua的理解

在redis和nginx中都潜入了Lua环境用于快速上手开发。但如何理解Lua以及Lua与宿主环境的交互是需要掌握的。 首先是Lua本身&#xff0c;打开5.1的lua版本开始编译后最后生成一个lua的可执行文件&#xff0c;这其实就是一个包含了Lua虚拟机的终端.。所以其实在不管redis也好nginx…

2023/8/20周报

目录 摘要 论文阅读 1、标题和现存问题 2、准备知识 3、模型结构 4、实验准备 5、实验结果 深度学习 1、构建图数据 2、GCN模型 3、当前实验结果 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇时空图卷积网络:交通预测的深度学习框架的论文。文章的时空图卷积…

NOIP2014普及组,提高组 比例简化 飞扬的小鸟 答案

比例简化 说明 在社交媒体上&#xff0c;经常会看到针对某一个观点同意与否的民意调查以及结果。例如&#xff0c;对某一观点表示支持的有1498 人&#xff0c;反对的有 902人&#xff0c;那么赞同与反对的比例可以简单的记为1498:902。 不过&#xff0c;如果把调查结果就以这种…

Leetcode-每日一题【剑指 Offer 33. 二叉搜索树的后序遍历序列】

题目 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&#xff0c;否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树&#xff1a; 5 / \ 2 6 / \ 1 3 示例 1&#xff1a; 输入: […

第4天----找出第一个只出现一次的字符(桶计数法/4种思路讲解)

题目描述 给定一个只包含小写字母的字符串&#xff0c;请你找到第一个仅出现一次的字符。如果没有&#xff0c;输出 no。 输入格式 一个字符串&#xff0c;长度小于 1100。 输出格式 输出第一个仅出现一次的字符&#xff0c;若没有则输出 no。 输入输出样例 输入 #1复制 abc 输…

鸿蒙/Android上最大的毒瘤:快应用服务

鸿蒙/Android上最大的毒瘤&#xff1a;快应用服务 2023.3.22版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、什么是快应用&#xff1f; “快应用” 是安卓厂&#xff08;华&#xff0c;米&#xff0c;O、V、魅族、努、联、加&#xf…

消息中间件的选择:RabbitMQ是一个明智的选择

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; MQ&#xff08;Message Queue&#xff09; MQ&#xff08;消息队列&#xff09;是一种用于在应用程序之间进行异步通信的技术&#xff1b;允许应用程序通过发送和接收…

[虚幻引擎] DTGlobalVariable 插件说明,蓝图全局变量访问,设置, Get, Set。

本插件可以在蓝图或者UMG中直接访问指定的全局变量值&#xff0c;方便编写。 支持Bool&#xff0c;Byte&#xff0c;Int&#xff0c;Int64&#xff0c;Float&#xff0c;Name&#xff0c;String&#xff0c;Text&#xff0c;Vector&#xff0c;Rotator&#xff0c;Transform&am…

【Linux网络】网络编程套接字 -- 基于socket实现一个简单UDP网络程序

认识端口号网络字节序处理字节序函数 htonl、htons、ntohl、ntohs socketsocket编程接口sockaddr结构结尾实现UDP程序的socket接口使用解析socket处理 IP 地址的函数初始化sockaddr_inbindrecvfromsendto 实现一个简单的UDP网络程序封装服务器相关代码封装客户端相关代码实验结…