15GB Confluence PostgreSQL备份导入SSMS遇300MB上限如何解决
我正在尝试导入超大.sql查询文件,该文件是大小为15GB的Confluence服务端数据库备份,需要导入至SSMS中,但SSMS仅支持最高300MB的文件导入,请问有什么可行的解决方案?
以下是备份文件样例:
-- -- PostgreSQL database dump -- -- Dumped from database version 9.5.24 -- Dumped by pg_dump version 9.5.24 SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: AO_187CCC_SIDEBAR_LINK; Type: TABLE; Schema: public; Owner: confluenceuser -- CREATE TABLE public."AO_187CCC_SIDEBAR_LINK" ( "CATEGORY" character varying(255), "CUSTOM_ICON_CLASS" character varying(255), "CUSTOM_TITLE" character varying(255), "DEST_PAGE_ID" bigint DEFAULT 0, "HARDCODED_URL" character varying(255), "HIDDEN" boolean, "ID" integer NOT NULL, "POSITION" integer DEFAULT 0, "SPACE_KEY" character varying(255), "TYPE" character varying(255), "WEB_ITEM_KEY" character varying(255) ); ALTER TABLE public."AO_187CCC_SIDEBAR_LINK" OWNER TO confluenceuser; -- -- Name: AO_187CCC_SIDEBAR_LINK_ID_seq; Type: SEQUENCE; Schema: public; Owner: confluenceuser -- CREATE SEQUENCE public."AO_187CCC_SIDEBAR_LINK_ID_seq" START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; ALTER TABLE public."AO_187CCC_SIDEBAR_LINK_ID_seq" OWNER TO confluenceuser; -- -- Name: AO_187CCC_SIDEBAR_LINK_ID_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: confluenceuser -- ALTER SEQUENCE public."AO_187CCC_SIDEBAR_LINK_ID_seq" OWNED BY public."AO_187CCC_SIDEBAR_LINK"."ID"; -- -- Name: AO_21D670_WHITELIST_RULES; Type: TABLE; Schema: public; Owner: confluenceuser
该备份文件总共有3800万行数据。
15GB PostgreSQL格式Confluence备份导入SSMS可行方案
注:你提供的备份是PostgreSQL导出的SQL脚本,语法与SQL Server不兼容,导入前需先完成语法适配,否则会直接执行报错
方案1:使用sqlcmd命令行导入(优先推荐,无需拆分文件)
SSMS图形界面的导入功能有300MB大小限制,但微软官方自带的sqlcmd命令行工具支持流式读取超大文件,不会一次性加载全量数据到内存,适配千万行级数据导入,操作步骤:
- 先完成PostgreSQL到SQL Server的语法适配:批量替换PostgreSQL独有关键字和语法,例如将
character varying替换为varchar、boolean替换为bit、去掉public.schema前缀、删除PostgreSQL独有的SET配置语句、EXTENSION相关语句、序列语法适配为SQL Server的对应规则 - 打开CMD或PowerShell,执行如下命令:
sqlcmd -S 你的SQL Server实例名 -d 目标数据库名 -U 登录账号 -P 登录密码 -i 15GB备份文件的完整绝对路径 -o 执行日志存储路径.log
- 等待执行完成即可,可通过输出的日志文件排查执行过程中出现的报错
方案2:拆分大文件分批适配SSMS导入
如果你必须使用SSMS图形界面操作,可以先将大SQL文件拆分为多个小于300MB的小文件再依次导入:
- 可使用Git Bash自带的
split命令或专用大文本拆分工具完成拆分,拆分命令示例:
split -l 100000 你的备份文件名.sql 拆分后文件前缀_
以上命令会每10万行拆分出一个独立的SQL文件,拆分后单文件大小基本都在300MB以内
- 按照拆分的先后顺序,依次将小文件导入SSMS即可,注意不要打乱顺序,避免表创建、数据插入的依赖错误
方案3:结构化迁移(适配性最高,适合语法适配工作量大的场景)
如果手动改SQL语法成本过高,可以走跨库迁移路线,无需直接执行SQL脚本:
- 先将该15GB备份恢复到一个临时搭建的PostgreSQL实例中
- 使用SSMA(SQL Server迁移助手)或SSMS自带的导入导出向导,同时连接PostgreSQL源库和SQL Server目标库,工具会自动完成数据类型适配、结构转换,3800万行数据支持断点续传,导入稳定性更高
导入前注意事项:提前调整SQL Server目标库的事务日志增长规则,将自动增长步长调整为GB级,避免导入过程中日志频繁扩容失败;测试环境可暂时将数据库恢复模式改为简单模式,大幅降低日志占用,提升导入速度。
内容的提问来源于stack exchange,提问作者Edgars R. Dunis
相关产品推荐
相关产品推荐

