|
18 | 18 | END; |
19 | 19 | GO |
20 | 20 |
|
21 | | -CREATE OR ALTER PROCEDURE #restore_database (@backup_file nvarchar(255)) |
| 21 | +-- Enable option to allow INSERT against external table defined on HADOOP data source |
| 22 | +DECLARE @config_option nvarchar(100) = 'allow polybase export'; |
| 23 | +IF NOT EXISTS(SELECT * FROM sys.configurations WHERE name = @config_option and value_in_use = 1) |
| 24 | +BEGIN |
| 25 | + EXECUTE sp_configure @config_option, 1; |
| 26 | + RECONFIGURE WITH OVERRIDE; |
| 27 | +END; |
| 28 | +GO |
| 29 | + |
| 30 | +CREATE OR ALTER PROCEDURE #restore_database (@backup_file nvarchar(255), @db_name nvarchar(128)) |
22 | 31 | AS |
23 | 32 | BEGIN |
24 | 33 | DECLARE @restore_filelist_tmpl nvarchar(1000) = N'RESTORE FILELISTONLY FROM DISK = N''/var/opt/mssql/data/%F'''; |
|
53 | 62 | INSERT INTO @files |
54 | 63 | EXECUTE(@restore_cmd); |
55 | 64 |
|
56 | | - SET @restore_cmd = REPLACE(REPLACE(@restore_database_tmpl, '%F', @backup_file), '%D', LEFT(@backup_file, CHARINDEX('.', @backup_file)-1)); |
| 65 | + SET @restore_cmd = REPLACE(REPLACE(@restore_database_tmpl, '%F', @backup_file), '%D', @db_name); |
57 | 66 | SET @restore_cur = CURSOR FAST_FORWARD FOR SELECT LogicalName, REVERSE(LEFT(REVERSE(PhysicalName), CHARINDEX('\', REVERSE(PhysicalName))-1)) FROM @files; |
58 | 67 | OPEN @restore_cur; |
59 | 68 | WHILE(1=1) |
@@ -84,50 +93,58 @@ BEGIN |
84 | 93 | WITH (LOCATION = 'sqlhdfs://controller-svc/default'); |
85 | 94 |
|
86 | 95 | IF NOT EXISTS(SELECT * FROM sys.external_data_sources WHERE name = 'HadoopData') |
87 | | - IF SERVERPROPERTY('ProductLevel') = 'CTP3.1' |
88 | | - CREATE EXTERNAL DATA SOURCE HadoopData |
89 | | - WITH( |
90 | | - TYPE=HADOOP, |
91 | | - LOCATION='hdfs://nmnode-0-svc:9000/', |
92 | | - RESOURCE_MANAGER_LOCATION='master-svc:8032' |
93 | | - ); |
94 | | - ELSE IF SERVERPROPERTY('ProductLevel') = 'CTP3.2' |
95 | | - CREATE EXTERNAL DATA SOURCE HadoopData |
96 | | - WITH( |
97 | | - TYPE=HADOOP, |
98 | | - LOCATION='hdfs://nmnode-0-svc:9000/', |
99 | | - RESOURCE_MANAGER_LOCATION='sparkhead-svc:8032' |
100 | | - ); |
| 96 | + CREATE EXTERNAL DATA SOURCE HadoopData |
| 97 | + WITH( |
| 98 | + TYPE=HADOOP, |
| 99 | + LOCATION='hdfs://nmnode-0-svc:9000/', |
| 100 | + RESOURCE_MANAGER_LOCATION='sparkhead-svc:8032' |
| 101 | + ); |
101 | 102 | END; |
102 | 103 | GO |
103 | 104 |
|
104 | 105 | --- Sample dbs: |
105 | 106 | DECLARE @sample_dbs CURSOR, @proc nvarchar(255); |
106 | 107 | SET @sample_dbs = CURSOR FAST_FORWARD FOR |
107 | | - SELECT file_or_directory_name |
108 | | - FROM sys.dm_os_enumerate_filesystem('/var/opt/mssql/data', '*.bak') |
109 | | - WHERE DB_ID(REPLACE(REPLACE(file_or_directory_name, 'tpcxbb_1gb', 'sales'), '.bak', '')) IS NULL; |
110 | | -DECLARE @file nvarchar(260); |
| 108 | + SELECT file_or_directory_name, d.db_name |
| 109 | + FROM sys.dm_os_enumerate_filesystem('/var/opt/mssql/data', '*.bak') as f |
| 110 | + CROSS APPLY (VALUES(REPLACE(REPLACE(file_or_directory_name, 'tpcxbb_1gb', 'sales'), '.bak', ''))) as d(db_name) |
| 111 | + WHERE DB_ID(d.db_name) IS NULL; |
| 112 | +DECLARE @file nvarchar(260), @db_name nvarchar(128); |
111 | 113 | OPEN @sample_dbs; |
112 | 114 | WHILE(1=1) |
113 | 115 | BEGIN |
114 | | - FETCH @sample_dbs INTO @file; |
| 116 | + FETCH @sample_dbs INTO @file, @db_name; |
115 | 117 | IF @@FETCH_STATUS < 0 BREAK; |
116 | 118 |
|
117 | 119 | -- Restore the sample databases: |
118 | | - EXECUTE #restore_database @file; |
| 120 | + EXECUTE #restore_database @file, @db_name; |
119 | 121 |
|
120 | 122 | -- Get database name used in restore: |
121 | | - SET @proc = CONCAT(QUOTENAME(LEFT(@file, CHARINDEX('.', @file)-1)), N'.sys.sp_executesql'); |
| 123 | + SET @db_name = QUOTENAME(@db_name); |
| 124 | + SET @proc = CONCAT(@db_name, N'.sys.sp_executesql'); |
122 | 125 |
|
123 | 126 | EXECUTE @proc N'#create_data_sources'; |
124 | 127 |
|
125 | 128 | -- Set compatibility level to 150: |
126 | 129 | EXECUTE @proc N'ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 150'; |
127 | 130 |
|
128 | | - -- Rename TPCx-BB database: |
129 | | - IF DB_ID('tpcxbb_1gb') IS NOT NULL |
130 | | - ALTER DATABASE tpcxbb_1gb MODIFY NAME = sales; |
| 131 | + -- Check for HADR & add database to containedag: |
| 132 | + IF SERVERPROPERTY('IsHadrEnabled') = 1 |
| 133 | + BEGIN |
| 134 | + DECLARE @command nvarchar(1000); |
| 135 | + IF EXISTS(SELECT * FROM sys.databases WHERE name = PARSENAME(@db_name,1) and recovery_model_desc = 'SIMPLE') |
| 136 | + BEGIN |
| 137 | + -- Set recovery to full |
| 138 | + EXECUTE @proc N'ALTER DATABASE CURRENT SET RECOVERY FULL'; |
| 139 | + |
| 140 | + SET @command = CONCAT(N'BACKUP DATABASE ', @db_name, ' TO DISK = ''/dev/null'';' ); |
| 141 | + EXEC(@command); |
| 142 | + END; |
| 143 | + |
| 144 | + -- Add database to AG |
| 145 | + SET @command = CONCAT(N'ALTER AVAILABILITY GROUP containedag ADD DATABASE ', @db_name); |
| 146 | + EXEC(@command); |
| 147 | + END; |
131 | 148 | END; |
132 | 149 | GO |
133 | 150 |
|
|
0 commit comments