zoukankan      html  css  js  c++  java
  • linux 下 docker 版的 sqlserver 运行报错:This program requires a machine with at least 2000 megabytes of memory.

    可能为了保证数据库运行稳定,sqlserver 限制了运行机器的最小内存,网上有相关的文章提到可以修改此限制,但是也要根据实际情况来决定是否真的要在小内存服务器中跑哦~

    参考:https://blog.csdn.net/weixin_42183854/article/details/105173806

    https://www.cnblogs.com/johnwii/p/8525490.html

    https://www.cnblogs.com/zkweb/archive/2016/12/06/6136826.html

    大致流程:

    1、需要一台内存够的服务器来运行相同版本的 sqlserver 以提取容器内文件;

    2、找到:/opt/mssql/bin/sqlservr 文件(大概两兆多)并复制出来;

    3、找一个 python 环境,linux、windows 都可以(原谅我不会修改,只能照搬网上的方法);

    4、大概执行以下三句(python 3.x 不知道哪个版本开始,replace 方法的参数需要加一个 b 来转换字符串):

    >>> oldfile = open("sqlservr", "rb").read()
    >>> newfile = oldfile.replace(b"x00x94x35x77", b"x00x80x84x1e")
    >>> open("sqlservr_low_limit", "wb").write(newfile)

    这里是替换原有数值 2000000000 为数值 512000000(十六进制,低位在左,转换的时候需要倒过来),旧的版本可能是需要替换 3250000000。

    判断是哪个数值可以通过查找(其实错误提示都已经告诉了,直接转换过来找就好了),如果返回 –1 则没有结果,正整数是找到的地址(应该):

    >>> oldfile.find("x00x94x35x77")

    5、因为 sqlserver 的包太大了,重新打包回去很难受,因为 docker 可以映射文件,所以在运行的时候将修改后的文件映射到容器就可以了

    sudo docker run -d 
    -v /home/sqlservr_low_limit:/opt/mssql/bin/sqlservr 
    -e 'ACCEPT_EULA=Y' 
    -e 'SA_PASSWORD=123456' 
    -e 'MSSQL_PID=Express' 
    -e 'MSSQL_LCID=2052' 
    -e TZ='Asia/Shanghai' 
    -p 1433:1433 
    --name mssqlserver mcr.microsoft.com/mssql/server

    输了你,赢了世界又如何...
  • 相关阅读:
    C# 数据库连接字符串拼接
    C# 线程同步计数存在的问题
    字符串操作
    字符串位置
    6个基本函数
    占位符
    str转换成int
    python运算符6
    python运算符5
    python运算符4
  • 原文地址:https://www.cnblogs.com/xwgli/p/13573072.html
Copyright © 2011-2022 走看看