xml地图|网站地图|网站标签 [设为首页] [加入收藏]
批量拆分SQL语句为事务并批处理,5120的解决办法
分类:数据库

问题:SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 MYPC/Administrator' 的信息,错误代码 0x534。 [SQLSTATE 42000] (ConnIsLoginSysAdmin)

附加数据库时出现附加数据库失败的错误,错误号是5120,已经两次遇到这种问题了。今天写一下解决办法。

作为DBA,时不时会遇到将数据导入到数据库的情况,假设业务或研发提供一个包含上百万行INSERT语句的脚本文件,而且这些INSERT 语句没有使用GO来进行批处理拆分,那么直接使用SQLCMD来执行会发现该进程消耗大量物理内存并迟迟没有数据写入,即使脚本中每一行都添加了GO,你依然会发现这插入效率太差,让你无法忍受,怎么搞呢,下面小代码帮你折腾下:

确认登陆名

有两个方法,很简单:

$old_file_path= 'C:SQL001.TXT'
$new_file_path='C:SQL001_New'
$tran_rows=10
$file_rows=30
$current_file_id=0

$line_num=0
$sr1=[IO.StreamReader]$old_file_path
$line_content=""
$row_content=""
while(-not $sr1.EndOfStream)
{
    if(($line_num%$file_rows) -eq 0)
    {
        $current_file_id=[int]$current_file_id+1
        $current_file_path = $new_file_path+"_"+$current_file_id
        $line_content=""
        $line_content |Out-File $current_file_path
    }

    if(($line_num%$tran_rows) -eq 0)
    {
        $line_content="
SET NOCOUNT ON
GO
BEGIN TRAN
BEGIN TRY
"
        $line_content |Out-File -Append $current_file_path
        $line_content=""
    }
    $tmp_content=$sr1.ReadLine()
    $row_content=$row_content+"`r"+$tmp_content

    $line_num=$line_num+1

    if((($line_num%$tran_rows) -eq 0) -or ($sr1.EndOfStream))
    {
        $row_content | Out-File -Append $current_file_path
        $row_content=""
        $batch_first_line=([int](($line_num+1)/$tran_rows-1))*$tran_rows+1
        $line_content="
COMMIT
--PRINT '执行第"+($batch_first_line)+"行到第"+($line_num)+"行成功'
END TRY
BEGIN CATCH
ROLLBACK
PRINT '执行第"+($batch_first_line)+"行到第"+($line_num)+"行失败'
END CATCH
GO
"
        $line_content | Out-File -Append $current_file_path
        Write-Host "处理到行" $line_num
    }



}

$sr1.Close()

  安全性-登陆名:确认 administrator用户名前缀 xxx/Administrator,确认xxx是否为 本机用户名,有的时候更改用户名之后会出现这个问题。更改为 本机用户名/Administrator 后解决

1.设置mdf文件所在文件夹的权限,在文件夹上右击——属性——安全,如图所示:

 

 

图片 1

2016年11月2日进行了下优化,当单个文件包含过多行时,会很难编辑处理,增加了按照行数拆分成文件的功能,同时优化下代码的可读性。

确认连接

图片 2

还是看点疗效吧,原始SQL为:

  执行T-SQL任务的时候,确认连接使用的用户名,建议使用sql系统用户创建连接

根据图示进行设置即可,注意是Authenticated user的权限。

图片 3

 

2.不要用sa登陆你的数据库,使用windows身份验证登录你的数据库再进行附加。

经过此脚本修改过的变为:

本文由澳门新葡亰手机版发布于数据库,转载请注明出处:批量拆分SQL语句为事务并批处理,5120的解决办法

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文