This commit is contained in:
2023-11-17 09:10:39 +01:00
parent 0a59d2b4b5
commit 8dadcd4bf9
22 changed files with 3238 additions and 13 deletions

View File

@@ -0,0 +1,21 @@
DECLARE @log TABLE (id INT IDENTITY NOT NULL,
src VARCHAR(100) NULL DEFAULT @@SERVERNAME,
logDate DATETIME2(0),
processInfo VARCHAR(50),
logMessage VARCHAR(MAX));
INSERT INTO @log (
[logDate],
[processInfo],
[logMessage])
EXEC sys.xp_readerrorlog 0;
SELECT *
FROM @log l
WHERE [l].[logMessage] LIKE '%''sa''%'
AND [l].[logDate]>'20231113'
SELECT *
FROM msdb.dbo.sysjobs j
WHERE name LIKE 'D90700%'

View File

@@ -68,6 +68,6 @@ SELECT TOP 200 [MissingIndexes].[DatabaseName],
[MissingIndexes].[query_plan],
[MissingIndexes].[sql_text]
FROM MissingIndexes
--WHERE [MissingIndexes].[DatabaseName] = '[arizona]'
WHERE [MissingIndexes].[DatabaseName] IN('[arizona]', '[arizonaCust]', '[arizonaRep]','[hcitools]')
--AND [MissingIndexes].[TableName] = '[PH_prescription_line]'
ORDER BY [AggregateCost] DESC;

View File

@@ -0,0 +1,31 @@
/*
generate xml fragment for RDCMANAGER groups
run this scrript on hcimon
*/
USE [ControlCenter]
DECLARE @tpl VARCHAR(max)=' <server>
<properties>
<displayName>@ou@ - @name@</displayName>
<name>@dns@</name>
</properties>
</server>
';
SELECT
e.[EN_designation]
, s.[SE_designation]
, s.[SE_DNS]
--,s.*
, REPLACE(REPLACE(REPLACE(@tpl, '@name@',[s].[SE_designation] ), '@dns@',[s].[SE_DNS]),'@ou@', [s].[SE_OU_code] ) AS fragment
FROM [dbo].[Server] s
JOIN [dbo].[Entity] e ON e.[EN_id] = s.[SE_entity]
WHERE [e].[EN_designation] IN (
--'Amavita'
--'Coop-Vitality'
'Sun Store'
)
ORDER BY [e].[EN_designation], [s].[SE_designation]

View File

@@ -0,0 +1,140 @@
Set-Location C:
$ErrorActionPreference = "Stop"
# VARIABLES
$query = "select SettingValue from cfg.Settings
where SettingId like 'Values.Modules.Replication.DbInitializationBackupPath%'
and len(SettingValue) > 1"
$erroronscript = 0
$errortext = ''
$snapshotLocation = ''
$snapshotHash =''
#Get configs from SQL
$connectionString = "Server='.\apssql';Database='ActiveSystemServer';Integrated Security=True;"
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText = $query
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet) | Out-Null
$data = $dataset.Tables[0]
$workFolder=""
#get snapshot location
$results = Invoke-Sqlcmd -ServerInstance .\apssql -Database master -query "EXEC sp_helpdistributor"
$snapshotLocation = $results.directory
$workFolder = "$snapshotLocation\wrk_zip"
# Get database version
$query2 = "SELECT ActivePos_write.upd.DatabaseVersion()"
$command2 = New-Object System.Data.SqlClient.SqlCommand($query2,$connection)
$aposVersion = $command2.ExecuteScalar()
#create needed structure in c:\temp\work_repl
$snapshotLocalDirName = Get-ChildItem -Path $snapshotLocation\unc\*_ACTIVEPOSTRAN | Select-Object -ExpandProperty Name
New-Item -ItemType Directory -Force $workFolder\unc\$snapshotLocalDirName\$snapshotName
#let some time for the FS to settle, to avoid directory not found exceptions
start-sleep -Seconds 3
#find latest snapshot available
$snapshotName = Get-ChildItem -Path $snapshotLocation\unc\*_ACTIVEPOSTRAN\* | Sort-Object -Descending |Select-Object -First 1 -ExpandProperty Name
#copy latest snapshot to work folder
#copy-Item -Path "$snapshotLocation\unc\*_ACTIVEPOSTRAN\$snapshotName\*.*" -Destination "$workFolder\unc\$snapshotLocalDirName\$snapshotName\"
(Robocopy.exe $snapshotLocation\unc\*_ACTIVEPOSTRAN\$snapshotName\ $workFolder\unc\$snapshotLocalDirName\$snapshotName\ /MIR /R:3 /W:5)
#zip snapshot and folder structure
$compress = @{
Path = "$workFolder\unc"
CompressionLevel = "Fastest"
DestinationPath = "$workFolder\snapshot_$aposVersion.zip"
}
Compress-Archive @compress -Force
#compute CRC
$snapshotHash = Get-FileHash -Path $workFolder\snapshot_$aposVersion.zip -Algorithm SHA512 | Select-Object -ExpandProperty Hash | out-file -FilePath $workFolder\snapshot_$aposVersion.crc -Force
#delete work folder
Remove-Item $workFolder\unc -Force -Recurse
# Get backup directory
$query3 = "SELECT HCIP_value FROM HCITools.dbo.HCI_PARAMS WHERE HCIP_Key = 'BKP_DIR'"
$command3 = New-Object System.Data.SqlClient.SqlCommand($query3,$connection)
$source = $command3.ExecuteScalar()
$connection.close()
#copy every files to relevant shares
$jobs = foreach($dir in $data){
$logFile = $dir.SettingValue -replace "[\\]" , ""
$target = $dir.SettingValue
$logfile = "/log:`"c:\temp\$logFile.txt`""
$files = Get-ChildItem -Path $workFolder -Filter "snapshot*.*"
if(!(test-path "$Target")){
try{
New-Item -ItemType Directory -Force -Path $Target -ErrorAction Stop
}
catch{
$erroronscript = 1
if($errortext -eq ''){
$errortext = "Share is not reachable: $Target"
}
else{
$errortext = $errortext + "`r`nShare is not reaechable: $Target"
}
}
}
if(test-path "$Target"){
$files | ForEach-Object {
$testfile = $_.Directory
if(!(test-path $testfile)){
$erroronscript = 1
if($errortext -eq ''){
$errortext = "ActivePos_read file source is not accessible!"
}
else{
$errortext = $errortext + "`r`nActivePos_read file source is not accessible!"
}
}
else{
start-job -ArgumentList $_.Directory, $target, $_.Name, $logFile -ScriptBlock{
param($source, $target, $testfile, $logFile )
$copy = robocopy $source $target $testfile /r:5 /w:120 $logFile
$LASTEXITCODE
}
}
}
}
}
$resultsjobs = Get-Job | Wait-Job | Receive-Job
foreach($resultjob in $resultsjobs){
if($resultjob -gt 7){
$errortext = "Robocopy exit code greater than 7!"
}
}
Remove-Job *
if (Test-Path 'C:\Temp\PScopy.ps1') { Remove-Item 'C:\Temp\PScopy.ps1' -Force }
#delete generated local files
$files | Remove-Item
#purge old version snapshots on the share
Get-ChildItem -Path $target -Filter "snapshot*.*" -Exclude "*$aposVersion*" | Remove-Item
IF($errortext -ne ''){ throw($errortext)}

View File

@@ -1,5 +1,6 @@
USE master
BEGIN TRANSACTION
SET XACT_ABORT ON;
SET NOCOUNT ON;
@@ -16,18 +17,42 @@ VALUES('HCI_Consultants_Facturation','anne-claude.terrettaz@galenica.com')
,('HCI_PHInsurance_Monitoring','Gal_SE_DBA@galenica.com')
,('HCI_Responsable_Centrale_Amavita','david.saugy@galenica.com; gilles.balanche@galenica.com')
,('HCI_Consultants_Pharmacies_Facturation','anne-claude.terrettaz@galenica.com')
UPDATE m SET [m].[DML_Recipients] = s.[recipients]
FROM [Arizona].[dbo].[DBA_Mailing_list] m
JOIN @lists s ON s.[listname] = m.dml_code
;
PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - update arizona list. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.';
UPDATE m SET [m].[DML_Recipients] = s.[recipients]
FROM [HCITools].[dbo].[DBA_Mailing_list] m
JOIN @lists s ON s.[listname] = m.dml_code
;
PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - updated hciTools lis. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.';
ROLLBACK TRANSACTION
--SELECT *
--FROM [Arizona].[dbo].[DBA_Mailing_list]
--WHERE [DML_Code] IN (SELECT [listname] FROM @lists)
--SELECT *
--FROM [HCITools].[dbo].[DBA_Mailing_list]
--WHERE [DML_Code] IN (SELECT [listname] FROM @lists)
IF EXISTS(SELECT 1 FROM sys.databases WHERE name ='hcitools')
BEGIN
----part of V sync, do not alter manually
--UPDATE m SET [m].[DML_Recipients] = s.[recipients]
--FROM [Arizona].[dbo].[DBA_Mailing_list] m
-- JOIN @lists s ON s.[listname] = m.dml_code
--;
--PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - update arizona list. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.';
UPDATE m SET [m].[DML_Recipients] = s.[recipients]
FROM [HCITools].[dbo].[DBA_Mailing_list] m
JOIN @lists s ON s.[listname] = m.dml_code
;
PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - updated hciTools lis. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.';
END
--SELECT *
--FROM [Arizona].[dbo].[DBA_Mailing_list]
--WHERE [DML_Code] IN (SELECT [listname] FROM @lists)
--SELECT *
--FROM [HCITools].[dbo].[DBA_Mailing_list]
--WHERE [DML_Code] IN (SELECT [listname] FROM @lists)
--ROLLBACK TRANSACTION
COMMIT TRANSACTION

View File

@@ -0,0 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# SQL Server Management Studio Solution File, Format Version 19.00
VisualStudioVersion = 15.0.28307.421
MinimumVisualStudioVersion = 10.0.40219.1
Project("{4F2E2C19-372F-40D8-9FA7-9D2138C6997A}") = "PULL replication perf validation", "PULL replication perf validation\PULL replication perf validation.ssmssqlproj", "{E5698C40-2FA1-4763-AA8F-B68F187E8CA2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Default|Default = Default|Default
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E5698C40-2FA1-4763-AA8F-B68F187E8CA2}.Default|Default.ActiveCfg = Default
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {985B29D4-A5B5-4FA7-90CC-99FD4ACBCB7C}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,256 @@
<?xml version="1.0"?>
<SqlWorkbenchSqlProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="PULL replication perf validation">
<Items>
<LogicalFolder Name="Connections" Type="2" Sorted="true">
<Items>
<ConnectionNode Name="CCVI50145250T53:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:50:37.8213395+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145250T53</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145251T55:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:50:29.2840238+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145251T55</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145252T60:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:50:00.6473895+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145252T60</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145253T61:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:53.4457553+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145253T61</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145254T62:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:48.7120403+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145254T62</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145255T63:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:42.4488992+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145255T63</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145353T02:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:37.6276426+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145353T02</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145357T50:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:32.171788+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145357T50</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145358T51:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:27.0634995+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145358T51</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145359T52:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:22.2220357+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145359T52</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145360T54:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:18.333537+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145360T54</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145361T56:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:14.5006214+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145361T56</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145362T57:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:10.596207+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145362T57</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145363T58:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:49:01.941259+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145363T58</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145364T59:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:48:57.7881635+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145364T59</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="CCVI50145365T64:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:48:52.2353285+02:00</Created>
<Type>SQL</Type>
<Server>CCVI50145365T64</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName />
</ConnectionNode>
<ConnectionNode Name="SWCVI501VM01\APSSQL:CENTRALINFRA\ua208700">
<Created>2023-10-18T14:44:46.507716+02:00</Created>
<Type>SQL</Type>
<Server>SWCVI501VM01\APSSQL</Server>
<UserName />
<Authentication>Windows Authentication</Authentication>
<InitialDB />
<LoginTimeout>30</LoginTimeout>
<ExecutionTimeout>0</ExecutionTimeout>
<ConnectionProtocol>NotSpecified</ConnectionProtocol>
<ApplicationName>Microsoft SQL Server Management Studio - Query</ApplicationName>
</ConnectionNode>
</Items>
</LogicalFolder>
<LogicalFolder Name="Queries" Type="0" Sorted="true">
<Items>
<FileNode Name="activepos_read.dbo.CreateActivePosPublication.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:SWCVI501VM01\APSSQL:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>SWCVI501VM01\APSSQL</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>activepos_read.dbo.CreateActivePosPublication.sql</FullPath>
</FileNode>
<FileNode Name="activepos_server.dbo.addsubscription.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:SWCVI501VM01\APSSQL:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>SWCVI501VM01\APSSQL</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>activepos_server.dbo.addsubscription.sql</FullPath>
</FileNode>
<FileNode Name="replication snippet.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:SWCVI501VM01\APSSQL:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>SWCVI501VM01\APSSQL</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>replication snippet.sql</FullPath>
</FileNode>
<FileNode Name="restore activepos_read on POS.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:CCVI50145362T57:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>CCVI50145362T57</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>restore activepos_read on POS.sql</FullPath>
</FileNode>
<FileNode Name="test IIICUSTOMER perfs.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:SWCVI501VM01\APSSQL:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>SWCVI501VM01\APSSQL</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>test IIICUSTOMER perfs.sql</FullPath>
</FileNode>
<FileNode Name="test IIIPartner_Item_Details perfs.sql">
<AssociatedConnectionMoniker>8c91a03d-f9b4-46c0-a305-b5dcc79ff907:SWCVI501VM01\APSSQL:True</AssociatedConnectionMoniker>
<AssociatedConnSrvName>SWCVI501VM01\APSSQL</AssociatedConnSrvName>
<AssociatedConnUserName />
<FullPath>test IIIPartner_Item_Details perfs.sql</FullPath>
</FileNode>
</Items>
</LogicalFolder>
<LogicalFolder Name="Miscellaneous" Type="3" Sorted="true">
<Items />
</LogicalFolder>
</Items>
</SqlWorkbenchSqlProject>

View File

@@ -0,0 +1,87 @@
IF OBJECT_ID('dbo.ReplicationServerAgentStartStop') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.ReplicationServerAgentStartStop
END
GO
/*=============================================================================
TPDT-133
This proc will allow the activePosClientService to manage is a replication agent is running on the pharmacy server
Parameters
----------------------
@posName varchar(255), no default The name of the POS we want to manage the replication agent of
@statusRun bit, no default If set to 0, we will stop or let the job as stopped. if set to 1, we will try to start the job
Context
----------------------
This proc is to be called from activePosClientService, in a push / pull replication.
We need to ensure that the distribution of the snapshot is not done from the pharmacy server, but from the pos.
For this, we need to ensure that the agent is stopped after the subscriber is created or when we requests a re-init of the POS.
Creation : 26.10.2023 / TSC
Modifications:
=============================================================================*/
CREATE PROCEDURE [dbo].[ReplicationServerAgentStartStop]
@posName VARCHAR(255),
@statusRun BIT
AS
BEGIN
SET XACT_ABORT ON;
SET NOCOUNT ON;
DECLARE @jobIsRunning BIT = 0;
DECLARE @jobName sysname;
SELECT @jobName = [j].[name]
FROM msdb.dbo.[sysjobs] j
WHERE [j].[name] = 'ActivePosTran distribution agent - ' + @posName;
IF NOT EXISTS ( SELECT 1
FROM [Arizona].[dbo].[Point_of_sale] s
WHERE [s].[POS_hostname] = @posName)
BEGIN
RAISERROR('The POS %s is not registered on Point_of_sale', 14, 1, @posName);
END;
IF @jobName IS NULL
BEGIN
RAISERROR(
'Agent "ActivePosTran distribution agent - %s" does not exists, publication must bre re-created', 14, 1, @posName);
END;
IF EXISTS(
SELECT [job].[name],
job.job_id,
[job].[originating_server],
[activity].[run_requested_date],
DATEDIFF(SECOND, [activity].[run_requested_date], GETDATE()) AS Elapsed
FROM msdb.dbo.sysjobs_view job
JOIN msdb.dbo.sysjobactivity activity
ON job.job_id = activity.job_id
JOIN msdb.dbo.syssessions sess
ON sess.session_id = activity.session_id
JOIN ( SELECT MAX(agent_start_date) AS max_agent_start_date
FROM msdb.dbo.syssessions) sess_max
ON [sess].[agent_start_date] = [sess_max].[max_agent_start_date]
WHERE [activity].[run_requested_date] IS NOT NULL
AND [activity].[stop_execution_date] IS NULL
AND [job].[name] ='ActivePosTran distribution agent - ' + @posName
)
BEGIN
SET @jobIsRunning = 1
END
IF @statusRun = 0 AND @jobIsRunning = 1
BEGIN
EXEC [msdb].[dbo].[sp_stop_job] @job_name = @jobName;
END
IF @statusRun = 1 AND @jobIsRunning = 0
BEGIN
EXEC [msdb].[dbo].[sp_start_job] @job_name = @jobName;
END
END;

View File

@@ -0,0 +1,358 @@
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
/*=================================================================================================
TPDT-133
This procedure is derived from AddSubscriptionWithBackup, but to have snapshot used for initialization
26.10.2023 TSC Creation
* Modifications :
10.11.2023 TSC Ensure that server agent is stopped before creating the subscription (to avoid this agent starting the init)
*=================================================================================================*/
ALTER PROCEDURE [dbo].[AddSubscriptionWithSnapshot]
@posName VARCHAR(255),
@dbVersion VARCHAR(20)
AS
BEGIN
DECLARE @query1 VARCHAR(MAX),
@query2 VARCHAR(MAX),
@finalQuery NVARCHAR(MAX),
@message NVARCHAR(MAX),
@posSubscription VARCHAR(255),
@serverDbVersion VARCHAR(20),
@ParmDefinition NVARCHAR(1000),
@returnCode INT;
DECLARE @jobId BINARY(16),
@jobname VARCHAR(128),
@CommandTSQL NVARCHAR(MAX),
@CommandTSQL2 NVARCHAR(MAX);
SET @finalQuery = N'';
SET @posSubscription = REPLACE(@posName, '-', '');
/* Check if ActivePos_write versions are the same */
SELECT @serverDbVersion = [ActivePos_write].[upd].[DatabaseVersion]();
IF @serverDbVersion <> @dbVersion
BEGIN
SET @message
= N'ActivePos_write version (' + @dbVersion + N') of host ''' + @posSubscription
+ N''' is not the same as the server version (' + @serverDbVersion + N').';
RAISERROR(@message, 16, -1);
END;
/* Check if the subscription already exists for this pos */
IF OBJECT_ID('tempdb..#tt_repli')IS NOT NULL BEGIN;
DROP TABLE #tt_repli;
END;
SELECT *
INTO #tt_repli
FROM OPENROWSET (
'SQLNCLI'
, 'DRIVER={SQL Server};server=.\apssql;Trusted_Connection=yes;'
, 'EXEC [ActivePos_read].[sys].[sp_helpsubscription] @publication = ''ActivePosTran'', @article = ''IIISales_order_header'' WITH RESULT SETS (([subscriber] nvarchar(128), [publication] nvarchar(128), [article] nvarchar(128), [destination database] nvarchar(128), [subscription status] int, [synchronization type] tinyint, [subscription type] int, [full subscription] bit, [subscription name] nvarchar(386), [update mode] int, [distribution job id] varbinary(16), [loopback_detection] bit, [offload_enabled] bit, [offload_server] nvarchar(128), [dts_package_name] nvarchar(128), [dts_package_location] int, [subscriber_security_mode] smallint, [subscriber_login] nvarchar(128), [subscriber_password] varchar(10), [job_login] nvarchar(128), [job_password] varchar(10), [distrib_agent_name] nvarchar(100), [subscriber_type] tinyint, [subscriber_provider] nvarchar(128), [subscriber_datasource] nvarchar(4000), [subscriber_providerstring] nvarchar(4000), [subscriber_location] nvarchar(4000), [subscriber_catalog] nvarchar(128)));')
IF NOT EXISTS ( SELECT 1 FROM [#tt_repli] t WHERE t.[subscriber] = @posName)
BEGIN
BEGIN TRY
PRINT @posSubscription + ' : there is no subscription for the pos in the replication !';
/* Check the linked server exists */
IF NOT EXISTS ( SELECT TOP 1 *
FROM [sys].[servers]
WHERE [name] = @posSubscription)
BEGIN
PRINT 'There is no linked server for this pos :' + @posName;
RAISERROR(N'There is no linked server for this pos :', 13, 1);
END;
/* Check that the Pos responds */
SELECT @finalQuery = N'EXEC (''SELECT TOP 1 * FROM ActivePos_write..keyTable'')' + N' AT ' + @posSubscription;
EXEC (@finalQuery);
/* Create the push subscription */
SET @finalQuery = N'';
SELECT @finalQuery
= REPLACE(
'USE [ActivePos_Read]; EXEC @returnCodeOut = sp_addsubscription @publication = N''ActivePosTran'', @subscriber =''@sub@'',@destination_db = N''ActivePos_read'',@subscription_type = N''push'' ',
'@sub@',
@posSubscription);
RAISERROR(@finalQuery, 0, 1) WITH NOWAIT;
SELECT @ParmDefinition = N'@returnCodeOut int output';
EXEC dbo.[ReplicationServerAgentStartStop] @posName = @posName,
@statusRun = 0
EXECUTE [sys].[sp_executesql] @finalQuery,
@ParmDefinition,
@returnCodeOut = @returnCode OUTPUT;
IF @returnCode = 0
BEGIN
SELECT @message = N'The subscription for Pos' + @posName + N' was successfully added';
RAISERROR(@message, 0, 1) WITH NOWAIT;
END;
ELSE
BEGIN
SELECT @message = N'The subscription for Pos' + @posName + N' was not correctly added and must be dropped';
SET @finalQuery = N'';
SELECT @finalQuery
= N'USE [ActivePos_Read]; EXEC @returnCodeOut = sp_dropsubscription @publication = N''ActivePosTran'','
+ N'@article = N''all'', @subscriber =' + @posSubscription;
EXECUTE [sys].[sp_executesql] @finalQuery,
@ParmDefinition,
@returnCodeOut = @returnCode OUTPUT;
SELECT @message = N'could not successfully complete registration for pos :' + @posName;
RAISERROR(@message, 14, 1);
RETURN;
END;
END TRY
BEGIN CATCH
SELECT @message = ERROR_MESSAGE();
SELECT @message = N'Error occurred during push subscription creation on POS ' + @posName + N' ' + @message;
RAISERROR(@message, 14, 1);
RETURN;
END CATCH;
END;
/* Add or update the subscription agent : to be run at Publisher */
BEGIN TRY
/* Create distribution agent if not exists */
IF NOT EXISTS ( SELECT 1
FROM [msdb].[dbo].[sysjobs]
WHERE [name] = N'ActivePosTran distribution agent - ' + @posName + '')
BEGIN
/* Creation Job and Steps*/
DECLARE @cmd VARCHAR(MAX),
@publisher NVARCHAR(200),
@subscriber VARCHAR(200),
@environment VARCHAR(10);
SET @returnCode = 0;
SET @publisher = CAST(SERVERPROPERTY('ServerName') AS NVARCHAR(100));
SET @subscriber = @posName;
IF NOT EXISTS ( SELECT [name]
FROM [msdb].[dbo].[syscategories]
WHERE [name] = N'REPL-Distribution'
AND [category_class] = 1)
BEGIN
EXEC @returnCode = [msdb].[dbo].[sp_add_category] @class = N'JOB',
@type = N'LOCAL',
@name = N'REPL-Distribution';
END;
/* Add Job */
SET @jobname = 'ActivePosTran distribution agent - ' + @posName + '';
SET @CommandTSQL
= N'DECLARE @agentIDAPH int
SELECT @agentIDAPH = [id] FROM [distribution].[dbo].[MSdistribution_agents] WHERE name = ''ActivePosTran distribution agent - '
+ @posName
+ N'''
EXEC sp_MSadd_distribution_history @perfmon_increment = 0, @agent_id = @agentIDAPH, @runstatus = 1,
@comments = N''Starting agent.''';
SET @CommandTSQL2
= N'DECLARE @agentIDAPH int
SELECT @agentIDAPH = [id] FROM [distribution].[dbo].[MSdistribution_agents] WHERE name = ''ActivePosTran distribution agent - '
+ @posName
+ N'''
EXEC sp_MSdetect_nonlogged_shutdown @subsystem = ''Distribution'', @agent_id = @agentIDAPH';
EXEC @returnCode = [msdb].[dbo].[sp_add_job] @job_name = @jobname,
@enabled = 1,
@notify_level_eventlog = 0,
@notify_level_email = 0,
@notify_level_netsend = 0,
@notify_level_page = 0,
@delete_level = 0,
@description = N'No description available.',
@category_name = N'REPL-Distribution',
@start_step_id = 1,
@owner_login_name = N'sa',
@job_id = @jobId OUTPUT;
/* Add Step */
EXEC @returnCode = [msdb].[dbo].[sp_add_jobstep] @job_id = @jobId,
@step_name = N'Distribution Agent startup message.',
@step_id = 1,
@cmdexec_success_code = 0,
@on_success_action = 3,
@on_success_step_id = 0,
@on_fail_action = 3,
@on_fail_step_id = 0,
@retry_attempts = 0,
@retry_interval = 0,
@os_run_priority = 0,
@subsystem = N'TSQL',
@command = @CommandTSQL,
@database_name = N'distribution',
@output_file_name = NULL,
@flags = 0,
@database_user_name = NULL,
@server = @publisher,
@additional_parameters = NULL,
@proxy_id = NULL,
@proxy_name = NULL;
/* Add Step */
/*Build commands */
SET @cmd
= '-Subscriber [' + @subscriber + '] -SubscriberDB [ActivePos_read] -Publisher [' + @publisher
+ '] -Distributor [' + @publisher
+ '] -DistributorSecurityMode 1 -Publication [ActivePosTran] -PublisherDB [ActivePos_read] -ErrorFile G:\sqlLogs\Distrib_'
+ @posName + '.err -Continuous';
EXEC @returnCode = [msdb].[dbo].[sp_add_jobstep] @job_id = @jobId,
@step_name = N'Run agent.',
@step_id = 2,
@cmdexec_success_code = 0,
@on_success_action = 1,
@on_success_step_id = 0,
@on_fail_action = 3,
@on_fail_step_id = 0,
@retry_attempts = 2147483647,
@retry_interval = 1,
@os_run_priority = 0,
@subsystem = N'Distribution',
@command = @cmd,
@database_name = N'distribution',
@output_file_name = NULL,
@flags = 0,
@database_user_name = NULL,
@server = @publisher,
@additional_parameters = NULL,
@proxy_name = N'[REPL][aphsqlrepl][ActivePos_read]';
/* Add Step */
EXEC @returnCode = [msdb].[dbo].[sp_add_jobstep] @job_id = @jobId,
@step_name = N'Detect nonlogged agent shutdown.',
@step_id = 3,
@cmdexec_success_code = 0,
@on_success_action = 2,
@on_success_step_id = 0,
@on_fail_action = 2,
@on_fail_step_id = 0,
@retry_attempts = 0,
@retry_interval = 0,
@os_run_priority = 0,
@subsystem = N'TSQL',
@command = @CommandTSQL2,
@database_name = N'distribution',
@output_file_name = NULL,
@flags = 0,
@database_user_name = NULL,
@server = @publisher,
@additional_parameters = NULL,
@proxy_id = NULL,
@proxy_name = NULL;
EXEC @returnCode = [msdb].[dbo].[sp_update_job] @job_id = @jobId,
@start_step_id = 1;
/* Add schedule : */
DECLARE @schedule_id2 INT;
EXEC [msdb].[dbo].[sp_add_jobschedule] @job_name = @jobname,
@name = N'ReplicationAgent Start auto',
@enabled = 1,
@freq_type = 64,
@freq_interval = 1,
@freq_subday_type = 0,
@freq_subday_interval = 0,
@freq_relative_interval = 0,
@freq_recurrence_factor = 1,
@active_start_date = 20220316,
@active_end_date = 99991231,
@active_start_time = 0,
@active_end_time = 235959,
@schedule_id = @schedule_id2 OUTPUT;
EXEC @returnCode = [msdb].[dbo].[sp_add_jobserver] @job_id = @jobId,
@server_name = N'(local)';
/*
do not start agent automatically, we must first init the subscriber from the POS to avoid lan traffic
*/
--EXEC [msdb].[dbo].[sp_start_job] @jobname;
EXEC [ActivePos_server].[dbo].[ReplicationServerAgentStartStop] @posName = @posName,
@statusRun = 0
END;
SELECT @finalQuery = N'';
SELECT @query1
= 'declare @JobName varchar(100)
declare c_job cursor local forward_only static for
SELECT name from msdb.dbo.sysjobs
where name like ''%ActivePos_read-ActivePosTran%''
AND name like ''%' + REPLACE(@posName, '-', '')
+ '%''
open c_job
FETCH NEXT FROM c_job
into @JobName
WHILE @@fetch_status = 0
BEGIN
EXEC msdb.dbo.sp_delete_job @job_name = @JobName
FETCH NEXT FROM c_job
into @JobName
END
close c_job
deallocate c_job
USE [ActivePos_Read]; EXEC sp_addpushsubscription_agent @publication = N''ActivePosTran'', @subscriber = ';
SELECT @query2
= ',
@subscriber_db = N''ActivePos_read'', @job_password = null,@subscriber_security_mode = 1,
@job_name = N''ActivePosTran distribution agent - ' + @posName
+ ''',
@frequency_interval = 0, @frequency_relative_interval = 0,
@frequency_subday = 0, @frequency_subday_interval = 0';
SELECT @query1 = REPLACE(@query1, '''', '''''');
SELECT @query2 = REPLACE(@query2, '''', '''''');
SELECT @finalQuery = @finalQuery + N'EXEC (''' + @query1 + REPLACE(@posName, '-', '') + @query2 + N''')';
IF EXISTS ( SELECT 1
FROM [distribution].[dbo].[MSdistribution_agents]
WHERE CHARINDEX(REPLACE(@posName, '-', ''), [name]) > 0
AND [subscriber_security_mode] = 1
AND [subscriber_db] = 'ActivePos_read')
BEGIN
EXEC (@finalQuery);
SELECT @message = N'The subscription agent for Pos ' + @posName + N' was explicitly created';
RAISERROR(@message, 0, 1) WITH NOWAIT;
END;
END TRY
BEGIN CATCH
SELECT @message = ERROR_MESSAGE();
SELECT @message = N'Error during subscription agent creation on POS ' + @posName + N' ' + @message;
RAISERROR(@message, 14, 1);
END CATCH;
EXEC [master].[dbo].[sp_serveroption] @server = @posName,
@optname = N'data access',
@optvalue = N'true';
EXEC [master].[dbo].[sp_serveroption] @server = @posName,
@optname = N'remote proc transaction promotion',
@optvalue = N'true';
END;
GO

View File

@@ -0,0 +1,58 @@
/*
Taken from https://stackoverflow.com/a/4036445
How do I check SQL replication status via T-SQL?
*/
SELECT
(CASE
WHEN mdh.runstatus = '1' THEN 'Start - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '2' THEN 'Succeed - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '3' THEN 'InProgress - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '4' THEN 'Idle - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '5' THEN 'Retry - '+cast(mdh.runstatus as varchar)
WHEN mdh.runstatus = '6' THEN 'Fail - '+cast(mdh.runstatus as varchar)
ELSE CAST(mdh.runstatus AS VARCHAR)
END) [Run Status],
mdh.runstatus,
mda.subscriber_db [Subscriber DB],
mda.publication [PUB Name],
right(left(mda.name,LEN(mda.name)-(len(mda.id)+1)), LEN(left(mda.name,LEN(mda.name)-(len(mda.id)+1)))-(10+len(mda.publisher_db)+(case when mda.publisher_db='ALL' then 1 else LEN(mda.publication)+2 end))) [SUBSCRIBER],
CONVERT(VARCHAR(25),mdh.[time]) [LastSynchronized],
und.UndelivCmdsInDistDB [UndistCom],
mdh.comments [Comments],
--'select * from distribution.dbo.msrepl_errors (nolock) where id = ' + CAST(mdh.error_id AS VARCHAR(8)) [Query More Info],
--mdh.xact_seqno [SEQ_NO],
(CASE
WHEN mda.subscription_type = '0' THEN 'Push'
WHEN mda.subscription_type = '1' THEN 'Pull'
WHEN mda.subscription_type = '2' THEN 'Anonymous'
ELSE CAST(mda.subscription_type AS VARCHAR)
END) [SUB Type],
mda.publisher_db+' - '+CAST(mda.publisher_database_id AS VARCHAR) [Publisher DB],
mda.name [Pub - DB - Publication - SUB - AgentID]
FROM distribution.dbo.MSdistribution_agents mda
LEFT JOIN distribution.dbo.MSdistribution_history mdh ON mdh.agent_id = mda.id
JOIN
(SELECT s.agent_id, MaxAgentValue.[time], SUM(CASE WHEN xact_seqno > MaxAgentValue.maxseq THEN 1 ELSE 0 END) AS UndelivCmdsInDistDB
FROM distribution.dbo.MSrepl_commands t (NOLOCK)
JOIN distribution.dbo.MSsubscriptions AS s (NOLOCK) ON (t.article_id = s.article_id AND t.publisher_database_id=s.publisher_database_id )
JOIN
(SELECT hist.agent_id, MAX(hist.[time]) AS [time], h.maxseq
FROM distribution.dbo.MSdistribution_history hist (NOLOCK)
JOIN (SELECT agent_id,ISNULL(MAX(xact_seqno),0x0) AS maxseq
FROM distribution.dbo.MSdistribution_history (NOLOCK)
GROUP BY agent_id) AS h
ON (hist.agent_id=h.agent_id AND h.maxseq=hist.xact_seqno)
GROUP BY hist.agent_id, h.maxseq
) AS MaxAgentValue
ON MaxAgentValue.agent_id = s.agent_id
GROUP BY s.agent_id, MaxAgentValue.[time]
) und
ON mda.id = und.agent_id AND und.[time] = mdh.[time]
where mda.subscriber_db<>'virtual' -- created when your publication has the immediate_sync property set to true. This property dictates whether snapshot is available all the time for new subscriptions to be initialized. This affects the cleanup behavior of transactional replication. If this property is set to true, the transactions will be retained for max retention period instead of it getting cleaned up as soon as all the subscriptions got the change.
--and mdh.runstatus='6' --Fail
--and mdh.runstatus<>'2' --Succeed
order by mdh.[time]

View File

@@ -0,0 +1,88 @@
SELECT [pos].[POS_hostname], [pos].[POS_MAC_address], [pos].[POS_number], [pos].[POS_type]
FROM [Arizona].[dbo].[Point_of_sale] [pos]
WHERE [pos].[POS_active]=1
AND [pos].[POS_type] IN (1,2)
AND [pos].[POS_number] < 99
ORDER BY [pos].[POS_name]
;
SELECT ActivePos_write.upd.DatabaseVersion() AS currentVersion;
SELECT SettingValue AS backupSrc
FROM ActiveSystemServer.cfg.Settings
WHERE SettingId LIKE 'Values.Modules.Replication.DbInitializationBackupPath%'
AND LEN(SettingValue) > 1;
--last backup
SELECT
JobName = J.name,
H.*
FROM
msdb.dbo.sysjobs AS J
CROSS APPLY (
SELECT TOP 20
JobName = J.name,
StepNumber = T.step_id,
StepName = T.step_name,
StepStatus = CASE T.run_status
WHEN 0 THEN 'Failed'
WHEN 1 THEN 'Succeeded'
WHEN 2 THEN 'Retry'
WHEN 3 THEN 'Canceled'
ELSE 'Running' END,
ExecutedAt = msdb.dbo.agent_datetime(T.run_date, T.run_time),
ExecutingHours = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) / 60,
ExecutingMinutes = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) % 60,
Message = T.message
,t.[instance_id]
FROM msdb.dbo.sysjobhistory AS T
WHERE T.job_id = J.job_id
ORDER BY t.[instance_id] DESC
) AS H
WHERE [J].[name]='D91030 - Backup ActivePos_Read'
AND [H].[StepNumber] = 0
ORDER BY J.name
SELECT @@SERVERNAME
RETURN
--start backup
EXEC msdb.dbo.sp_start_job @job_name = N'D91030 - Backup ActivePos_Read' , @step_name = 'Purge old ActivePos_Read backups'
WAITFOR DELAY '00:00:05.000'
WHILE EXISTS(
SELECT sj.name
, sja.*
FROM msdb.dbo.sysjobactivity AS sja
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id
WHERE sj.[name]='D91030 - Backup ActivePos_Read'
AND sja.start_execution_date IS NOT NULL
AND sja.stop_execution_date IS NULL
) BEGIN
--PRINT 'job is still running '+CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);
DECLARE @t VARCHAR(20) = CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);
RAISERROR('%s, job is still running', 0, 1, @t) WITH NOWAIT;
WAITFOR DELAY '00:00:05.000'
END
--check POS and PHCY versions
SELECT ActivePos_write.upd.DatabaseVersion() AS currentVersion
EXEC ('SELECT ActivePos_write.upd.DatabaseVersion()') AT xxx
--force restore after manual copy
EXEC ('exec ActivePos_write.dbo.InitializeActivePosReadFromBackup @BackUpFileWithPath = ''c:\temp\ActivePos_read.22.1.223.2401.bak''') AT xxx
--to start on the pos to force a restore of the backup. adapt version, mac and UNC before running
exec ActiveSystemClient.dbo.DBAReplPosSubscription
@mac = '9C-7B-EF-43-5A-98',
@serverDbVersion = '23.2.23.19501',
@preferedReplinibackup= '\\cvi247aps-replinibackup.coop-vitality.ch\replinibackup\ActivePos_read.23.2.23.19501.bak'
--restart service on pos
EXEC ('EXEC xp_cmdshell ''net stop ActiveposClientService'';EXEC xp_cmdshell ''net start ActiveposClientService''') AT xxx
--subscription
EXEC ActivePos_read..sp_dropsubscription @publication = N'ActivePosTran', @article = N'all', @subscriber ='xxx'
EXEC ActiveSystemServer.dbo.RepairReplication

View File

@@ -0,0 +1,10 @@
USE master
GO
--EXEC ('exec ActivePos_write.dbo.InitializeActivePosReadFromBackup @BackUpFileWithPath = ''c:\temp\ActivePos_read.23.4.23.28503.bak''')
RESTORE DATABASE ActivePos_read
FROM DISK = 'c:\temp\ActivePos_read.23.4.23.28503.bak'
WITH MOVE N'ActivePos_read_Data'
TO 'C:\SQLDataBase\Data\ActivePos_Read.mdf',
MOVE N'ActivePos_read_Log'
TO 'C:\SQLDataBase\Log\ActivePos_Read.ldf', STATS = 10, REPLACE

View File

@@ -0,0 +1,51 @@
USE [ActivePos_read]
/*
IF OBJECT_ID('dbo.zz_customer')IS NOT NULL BEGIN;
DROP TABLE dbo.zz_customer;
END;
SELECT [c].[CustomerId], [c].[CustomerCentralRemark]
INTO hcitools.tmp.zz_customer
FROM [dbo].[IIICustomer] c
*/
------- test 1, update en masse
--UPDATE [dbo].[IIICustomer]
--SET [CustomerCentralRemark] = 'test repli'
--WHERE 1=1
------- test 2, update de tous les clients, 1 ligne par transaction
DECLARE @cid INT
DECLARE crsr_cust CURSOR FAST_FORWARD READ_ONLY FOR
SELECT [s].[CustomerId]
FROM hcitools.tmp.zz_customer s
JOIN [dbo].[IIICustomer] t ON t.[CustomerId] = s.[CustomerId]
OPEN crsr_cust
FETCH NEXT FROM crsr_cust INTO @cid
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRANSACTION
UPDATE [dbo].[IIICustomer]
SET [CustomerCentralRemark] = 'test perf 2'
WHERE [CustomerId] = @cid;
COMMIT TRANSACTION
FETCH NEXT FROM crsr_cust INTO @cid
END
CLOSE crsr_cust
DEALLOCATE crsr_cust
------ test 3, restore les commentaires initiaux
UPDATE t SET [t].[CustomerCentralRemark] = s.[CustomerCentralRemark]
FROM hcitools.tmp.zz_customer s
JOIN [dbo].[IIICustomer] t ON t.[CustomerId] = s.[CustomerId]
WHERE ISNULL(s.[CustomerCentralRemark],'') <> ISNULL(t.[CustomerCentralRemark],'')
SELECT COUNT(1) FROM [zz_customer]

View File

@@ -0,0 +1,21 @@
/*
IF OBJECT_ID('dbo.zz_IIIPartner_Item_Details')IS NOT NULL BEGIN;
DROP TABLE dbo.zz_IIIPartner_Item_Details;
END;
SELECT *
INTO hcitools.tmp.zz_IIIPartner_Item_Details
FROM [dbo].[IIIPartner_Item_Details]
*/
-- test 1, update form_11
UPDATE t SET [t].[Form_11] = 'test repli'
FROM hcitools.tmp.zz_IIIPartner_Item_Details s
JOIN [dbo].[IIIPartner_Item_Details] t ON s.[Item_Id] = t.[Item_Id]
WHERE 1=1
-- revert test 1
UPDATE t SET [t].[Form_11] = s.[Form_11]
FROM hcitools.tmp.zz_IIIPartner_Item_Details s
JOIN [dbo].[IIIPartner_Item_Details] t ON s.[Item_Id] = t.[Item_Id]
WHERE ISNULL(t.[Form_11],'') <> ISNULL(s.[Form_11],'')

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,97 @@
USE [ActivePos_server]
GO
IF OBJECT_ID('dbo.SetTLSOptions')IS NOT NULL
BEGIN;
DROP PROCEDURE dbo.SetTLSOptions;
END;
GO
/*=============================================================================
Set the TLS options of the current sql server instance.
Any change in those options won't be applied until the service is restarted.
Parameters
----------------------
Context
----------------------
This proc is called during update of TriaPharm, once the certificate has been created or renewed to update the configuration of the database.
!!!! Any change to those parameters won't be applied until the next restart of the database
@thumbprint: varchar, default null The thumbprint of the certificate to use for TLS encryption.
A null value means no certificate
@forceEncrypt: bit, default 0 If 1 then forces all connections to be encrypted with TLS.
0 means the client can choose if it wants or not to use TLS.
Creation : 13.11.2023 / TSC
Modifications:
=============================================================================*/
CREATE PROCEDURE dbo.SetTLSOptions
@thumbprint VARCHAR(4000) = NULL
,@forceEncrypt BIT = 0
AS
BEGIN
SET XACT_ABORT ON;
SET NOCOUNT ON;
DECLARE @tt_read TABLE([value] VARCHAR(MAX), [data] VARCHAR(MAX), id INT NOT NULL IDENTITY )
DECLARE @currentThumb VARCHAR(4000);
DECLARE @currentForceEncrypt INT;
DECLARE @varVal VARCHAR(4000);
DECLARE @key VARCHAR(8000) = 'SOFTWARE\Microsoft\MSSQLSERVER\MSSQLServer\SuperSocketNetLib\';
IF @forceEncrypt IS NULL
BEGIN
PRINT 'null @forceEncrypt ==> 0 '
SET @forceEncrypt = 0;
END
INSERT INTO @tt_read ([value],
[data])
EXECUTE master.sys.xp_instance_regread
'HKEY_LOCAL_MACHINE',
@key,
'Certificate';
SELECT @currentThumb = [data] FROM @tt_read;
DELETE FROM @tt_read;
INSERT INTO @tt_read ([value],
[data])
EXECUTE master.sys.xp_instance_regread
'HKEY_LOCAL_MACHINE',
@key,
'ForceEncryption';
SELECT @currentForceEncrypt = [data] FROM @tt_read;
DELETE FROM @tt_read;
IF ISNULL(@currentThumb, '') <> ISNULL(@thumbprint, '')
BEGIN
PRINT 'updating certificate'
EXEC master.sys.xp_instance_regwrite
'HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\MSSQLSERVER\MSSQLServer\SuperSocketNetLib\',
'Certificate',
'REG_SZ',
@thumbprint
;
END
IF ISNULL(@currentForceEncrypt, '') <> ISNULL(@forceEncrypt, '')
BEGIN
PRINT 'updating forced encryption'
SET @varVal = CAST(@forceEncrypt AS VARCHAR(5))
EXEC master.sys.xp_instance_regwrite
'HKEY_LOCAL_MACHINE',
'SOFTWARE\Microsoft\MSSQLSERVER\MSSQLServer\SuperSocketNetLib\',
'ForceEncryption',
'REG_SZ',
@varVal
;
END
END
GO