时间:2020-03-27来源:电脑系统城作者:电脑系统城
很苦恼,PROD上的SSIS项目,日积月累的往里部署,加包,也没觉得是个什么问题。
但是今天从需要从PROD上把这个项目中所有的包都down下来,VS居然报错Out Of Memory,无论是直接连接SSIS Catelog或者用SSMS导出ispac均报错。
解决方法很简单,使用PowerShell脚本,直接把ispac download下来然后解压缩,这样里面就直接可以看到.dtsx文件了。
核心就在于参数UnzipIspac,一定要是True,这样执行完成后就能直接看见.dtsx包了。
PS脚本:
1 #PowerShell: DownloadIspac.ps1 2 ################################ 3 ########## PARAMETERS ########## 4 ################################ 5 # Change Server, folder, project and download folder 6 $SsisServer = "XXXXXXXX" # Mandatory 7 $FolderName = "XXXXXXXX" # Can be empty to download multiple projects 8 $ProjectName = "OOOOOOOOO" # Can be empty to download multiple projects 9 $DownloadFolder = "LLLLLLLLLLLLL" # Mandatory 10 $CreateSubfolders = $true # Mandatory 11 $UnzipIspac = $true # Mandatory 12 13 14 ################################################# 15 ########## DO NOT EDIT BELOW THIS LINE ########## 16 ################################################# 17 clear 18 Write-Host 19 20 "================================================================================================================================ 21 22 ========================" 23 Write-Host "== Used parameters ==" 24 Write-Host 25 26 "================================================================================================================================ 27 28 ========================" 29 Write-Host "SSIS Server :" $SsisServer 30 Write-Host "Folder Name :" $FolderName 31 Write-Host "Project Name :" $ProjectName 32 Write-Host "Local Download Folder :" $DownloadFolder 33 Write-Host "Create Subfolders :" $CreateSubfolders 34 Write-Host "Unzip ISPAC (> .NET4.5) :" $UnzipIspac 35 Write-Host 36 37 "================================================================================================================================ 38 39 ========================" 40 41 42 ########################################## 43 ########## Mandatory parameters ########## 44 ########################################## 45 if ($SsisServer -eq "") 46 { 47 Throw [System.Exception] "SsisServer parameter is mandatory" 48 } 49 if ($DownloadFolder -eq "") 50 { 51 Throw [System.Exception] "DownloadFolder parameter is mandatory" 52 } 53 elseif (-not $DownloadFolder.EndsWith("\")) 54 { 55 # Make sure the download path ends with an slash 56 # so we can concatenate an subfolder and filename 57 $DownloadFolder = $DownloadFolder = "\" 58 } 59 60 61 ############################ 62 ########## SERVER ########## 63 ############################ 64 # Load the Integration Services Assembly 65 Write-Host "Connecting to server $SsisServer " 66 $SsisNamespace = "Microsoft.SqlServer.Management.IntegrationServices" 67 [System.Reflection.Assembly]::LoadWithPartialName($SsisNamespace) | Out-Null; 68 69 # Create a connection to the server 70 $SqlConnectionstring = "Data Source=" + $SsisServer + ";Initial Catalog=master;Integrated Security=SSPI;" 71 $SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnectionstring 72 73 # Create the Integration Services object 74 $IntegrationServices = New-Object $SsisNamespace".IntegrationServices" $SqlConnection 75 76 # Check if connection succeeded 77 if (-not $IntegrationServices) 78 { 79 Throw [System.Exception] "Failed to connect to server $SsisServer " 80 } 81 else 82 { 83 Write-Host "Connected to server" $SsisServer 84 } 85 86 87 ############################# 88 ########## CATALOG ########## 89 ############################# 90 # Create object for SSISDB Catalog 91 $Catalog = $IntegrationServices.Catalogs["SSISDB"] 92 93 # Check if the SSISDB Catalog exists 94 if (-not $Catalog) 95 { 96 # Catalog doesn't exists. Different name used? 97 Throw [System.Exception] "SSISDB catalog doesn't exist." 98 } 99 else 100 { 101 Write-Host "Catalog SSISDB found" 102 } 103 104 105 ############################ 106 ########## FOLDER ########## 107 ############################ 108 if ($FolderName -ne "") 109 { 110 # Create object to the folder 111 $Folder = $Catalog.Folders[$FolderName] 112 # Check if folder exists 113 if (-not $Folder) 114 { 115 # Folder doesn't exists, so throw error. 116 Write-Host "Folder" $FolderName "not found" 117 Throw [System.Exception] "Aborting, folder not found" 118 } 119 else 120 { 121 Write-Host "Folder" $FolderName "found" 122 } 123 } 124 125 126 ############################# 127 ########## Project ########## 128 ############################# 129 if ($ProjectName -ne "" -and $FolderName -ne "") 130 { 131 $Project = $Folder.Projects[$ProjectName] 132 # Check if project already exists 133 if (-not $Project) 134 { 135 # Project doesn't exists, so throw error. 136 Write-Host "Project" $ProjectName "not found" 137 Throw [System.Exception] "Aborting, project not found" 138 } 139 else 140 { 141 Write-Host "Project" $ProjectName "found" 142 } 143 } 144 145 146 ############################## 147 ########## DOWNLOAD ########## 148 ############################## 149 Function DownloadIspac 150 { 151 Param($DownloadFolder, $Project, $CreateSubfolders, $UnzipIspac) 152 if ($CreateSubfolders) 153 { 154 $DownloadFolder = ($DownloadFolder + $Project.Parent.Name) 155 } 156 157 # Create download folder if it doesn't exist 158 New-Item -ItemType Directory -Path $DownloadFolder -Force > $null 159 160 # Check if new ispac already exists 161 if (Test-Path ($DownloadFolder + $Project.Name + ".ispac")) 162 { 163 Write-Host ("Downloading [" + $Project.Name + ".ispac" + "] to " + $DownloadFolder + " (Warning: replacing existing 164 165 file)") 166 } 167 else 168 { 169 Write-Host ("Downloading [" + $Project.Name + ".ispac" + "] to " + $DownloadFolder) 170 } 171 172 # Download ispac 173 $ISPAC = $Project.GetProjectBytes() 174 [System.IO.File]::WriteAllBytes(($DownloadFolder + "\" + $Project.Name + ".ispac"),$ISPAC) 175 if ($UnzipIspac) 176 { 177 # Add reference to compression namespace 178 Add-Type -assembly "system.io.compression.filesystem" 179 180 # Extract ispac file to temporary location (.NET Framework 4.5) 181 Write-Host ("Unzipping [" + $Project.Name + ".ispac" + "]") 182 183 # Delete unzip folder if it already exists 184 if (Test-Path ($DownloadFolder + "\" + $Project.Name)) 185 { 186 [System.IO.Directory]::Delete(($DownloadFolder + "\" + $Project.Name), $true) 187 } 188 189 # Unzip ispac 190 [io.compression.zipfile]::ExtractToDirectory(($DownloadFolder + "\" + $Project.Name + ".ispac"), ($DownloadFolder + "\" + 191 192 $Project.Name)) 193 194 # Delete ispac 195 Write-Host ("Deleting [" + $Project.Name + ".ispac" + "]") 196 [System.IO.File]::Delete(($DownloadFolder + "\" + $Project.Name + ".ispac")) 197 } 198 Write-Host "" 199 } 200 201 202 ############################# 203 ########## LOOPING ########## 204 ############################# 205 # Counter for logging purposes 206 $ProjectCount = 0 207 208 # Finding projects to download 209 if ($FolderName -ne "" -and $ProjectName -ne "") 210 { 211 # We have folder and project 212 $ProjectCount++ 213 DownloadIspac $DownloadFolder $Project $CreateSubfolders $UnzipIspac 214 } 215 elseif ($FolderName -ne "" -and $ProjectName -eq "") 216 { 217 # We have folder, but no project => loop projects 218 foreach ($Project in $Folder.Projects) 219 { 220 $ProjectCount++ 221 DownloadIspac $DownloadFolder $Project $CreateSubfolders $UnzipIspac 222 } 223 } 224 elseif ($FolderName -eq "" -and $ProjectName -ne "") 225 { 226 # We only have a projectname, so search 227 # in all folders 228 foreach ($Folder in $Catalog.Folders) 229 { 230 foreach ($Project in $Folder.Projects) 231 { 232 if ($Project.Name -eq $ProjectName) 233 { 234 Write-Host "Project" $ProjectName "found in" $Folder.Name 235 $ProjectCount++ 236 DownloadIspac $DownloadFolder $Project $CreateSubfolders $UnzipIspac 237 } 238 } 239 } 240 } 241 else 242 { 243 # Download all projects in all folders 244 foreach ($Folder in $Catalog.Folders) 245 { 246 foreach ($Project in $Folder.Projects) 247 { 248 $ProjectCount++ 249 DownloadIspac $DownloadFolder $Project $CreateSubfolders $UnzipIspac 250 } 251 } 252 } 253 254 ########################### 255 ########## READY ########## 256 ########################### 257 # Kill connection to SSIS 258 $IntegrationServices = $null 259 Write-Host "Finished, total downloads" $ProjectCount
2023-10-27
windows11安装SQL server数据库报错等待数据库引擎恢复句柄失败解决办法2023-10-27
SQL Server截取字符串函数操作常见方法2023-10-27
浅谈SELECT *会导致查询效率低的原因收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间,在文件末尾创建足够的空间后,可取消对文件末尾的数据页的分配并将它们返回给文件系统,本文给大家介绍SQL Server 数据库中的收缩数据...
2023-10-27