SSRS 2016 Scale-Out on Azure VMs not working - reporting-services

Setup
I'm running an AlwaysOn SQL Server Availability Set (from the Azure Always On SQL Server Availability Set Template), and trying to utilize the two SQL Servers in a scale-out NLB setup (I haven't figured out exactly what virtual appliance to use yet) for SSRS. I've never actually utilized a scale-out set-up for SSRS but it seems relatively straight-forward:
1. Set up one instance of SSRS
2. Create reportserver db
3. Connect to same report server db from a second SSRS instance
4. Accept the join request from SSRS Configuration tool of the first instance
Everything* seems to work fine up until step 4 when the join request doesn't appear (see the screenshot). The part of this that I imagine might be causing some issues is that due to the AlwaysOn Setup I am using an internal load balancer with sql listener for my SSRS connection string, and this can be pointed to either SQL Server instance at any given time based on failover, but I'm not sure how this could be troublesome.
Things I've Tried
The below resulted in: 2nd instance not available to join, despite successful connection to database.
Scaling Out before adding Report Server to AlwaysOn
Scaling Out after adding Report Server to AlwaysOn
Using rskeymgmt Utility from the 1st instance (indicates success but no change on restarting SSRS service)
The below resulted in: Primary scale-out instance changed from one instance to the other.
Restore encryption key from 1st instance to the 2nd instance after connecting to RS database.
None of this seems to work and I'm not sure if this is a bug in SQL Server 2016 or something wrong with my methodology. Any help would be appreciated.
Thanks!
*Note: I ran into some initial problems with loopbacks, but disabled strictnamechecking and allowed the specific dns names through the check (the host name for the load balancer (base and FQDN) and that of the server itself (base and FQDN).

It turns out that Azure SQL Server Templates ship with identical InstallationID's in the report server config file. Altering the GUID in the file resolves the issue.

Related

SQL Server not listed while creating a job using SSIS package

Please look into the below error which I am facing. I am trying to create a new job. While configuring the step 1 for this job I am trying to set an SSIS dtsx package under SSIS db. But it doesn't allow me to select my SQL Server Database Engine under the Server drop down. It shows an empty drop down. Please let me know what could be wrong.
When you click the Server drop down, it kicks off a network scan asking any server running the SQL Browser service if they have any SQL Server instances it can talk to. The browser service can be off and SQL Server works just fine, it just means it isn't broadcasting that it is available. Some folks have a misguided belief that, much like hiding under the covers so monsters cannot find you, not advertising that you have a SQL Server instance running you're more "secure."
But the Browser service is running. Ok, then what about firewall, networking rules and potentially user account controls - it's likely that one of those is blocking packets somewhere.
In the job step configuration, you can enter a name for the step. Choose the SQL Server Integration Services Package type, enter the name of the server and select the package.
This article will help you to tackle with SSIS/SQL:
mssqltips
I had to manually enter the SQL Server name inside the Server dropdown shown in the above screenshot to fix the problem.

Hiding SQL Server instance across the network

How can I hide SQL Server 2008R2 instance? I don't want it to be visible to users across the network.
Is this possible?
Yes, it is possible and pretty easy to set.
In SQL Server Configuration Manager, expand “SQL Server Network Configuration” and then right click “Protocols for < SQL Server Instance >”. Select “Properties”. On the “Flags” tab, in the “Hide Instance” drop down select “Yes” and then click OK to save the changes.
Changes will not take effect until the service is stopped and restarted. Once the database engine service of the instance is restarted, SQL Server Browser Service will not expose this instance of the database engine to client computers.

SQL Server 2008 Local Connection String

I'm attempting to run unit tests locally via connecting to SQL Server 2008 in my Windows Server 2008 R2 machine.
I have the following two connection strings -- the first one does not work, but the second one does work.
DOES NOT WORK
Data Source=XX.YY.ZZ.AAA;Initial Catalog=db_name;Trusted_Connection=Yes;Persist Security Info=True;MultipleActiveResultSets=True
WORKS
Data Source=myserver1\SQLEXPRESS;Initial Catalog=db_name;Trusted_Connection=Yes;Persist Security Info=True;MultipleActiveResultSets=True
The only difference is the Data Source property! The second one works, but the first one does not. I assume the connection tries to go over TCP to actually connect to the SQL server, but should this prevent me from actually logging in?

unable to kill SQL server job, status stays killed/rollback

I am unable to kill some SQL Server agent jobs. The task state continues to be running and the command stays in KILLED/ROLLBACK. The job executes queries against OSI's PI system via OLEDB linked server and Oracle. The only way I have found so far to kill these jobs is by restarting SQL server (not a preferred method).
I found following article
https://connect.microsoft.com/SQLServer/feedback/details/187192/openquery-to-linked-server-hangs-leaving-spid-with-open-tran-that-cannot-be-killed-then-templog-ldf-grows-without-limit-requires-sql-server-restart-on-production-servers
Apparently several people have this issue using openquery through a linked server that is not SQL Server. I'm reposting the work-around that BReuter posted on above article:
posted by BReuter on 1/30/2007 at 2:21 PM
*I have experianced the exact behavior and have found a combination of software which stablized our environment.
There were three key ingredients I found:
1) Make sure you do not have ANY linked servers using Microsoft OLEDB Provider for Oracle, instead use Oracle Provider for Oracle(version 9.2.0.4 is what I have in production).
2) Do not allow the linked server to run "in process". This took some research, but it is possible to run the linked server out of the SQL memory space by following the directions below.
3) I'm running SQL 2005 SP1 on W2K3, but I believe the OLEDB Provider is the key and not the OS or DB version.
The default security settings are too tight to run the Oracle OLEDB provider (OraOLEDB) out-of-process. Further, the default settings for MS DTC do not allow network communication.
Control Panel-> Administrative Tools-> Component Services
Drill to Component Services-> Computers
a. Right-click My Computer-> Properties
MSDTC tab -> Security Configuration button (screenshot below)
a. Network DTC Access – checked.
b. Allow Inbound / Outbound – checked.
c. No Authentication Required – This simulates the windows 2000 security settings.
d. Enable XA transactions – the type of transaction implemented by OraOLEDB provider.
Drill to Component Services-> Computers-> My Computer-> DCOM Config
a. Right-click MSDAINITALIZE-> Properties
Security tab (screenshot below)
a. Access Permissions -> Customize.
b. Press “Access Permissions” Edit button.
c. Give the SQL Server Service account “Local Access” permission.
d. Repeat for “Launch and Activation”.*
If they are large transactions, it might be that the server is actually still performing the rollback which might take some time.
This page
http://www.jaygeiger.com/index.php/2015/03/03/how-to-kill-a-frozen-linked-sql-server-connection/
provides a workaround.
It consist in manual TCP connection termination. It's not an ideal solution but it's the best one I know. It's better than having to restart the entire SQL Server.
Btw. I found that link at https://connect.microsoft.com/SQLServer/feedback/details/187192/openquery-to-linked-server-hangs-leaving-spid-with-open-tran-that-cannot-be-killed-then-templog-ldf-grows-without-limit-requires-sql-server-restart-on-production-servers page mentioned in Ahd's post
for me killing the OLEDB external resources did not worked and i unfortunately had to restart the SQL server instance to fix this issue always
i my cases it have select with OPENQUERY from oracle linked servers or SharePoint lists which simply has a simple error like bad password and it cannot resolve the error and goes and never come back until you restart the service
Transactions that get stuck in KILLED/ROLLBACK can be canceled by killing transactions on local server. If the query is cross-server and you don't want to wait for the rollback, you have to go to the remote server and kill the transaction as well as kill it on the local server.
This applies to any database system.

Trouble setting up witness in SQL Server mirroring scheme w/ error

I've got a trio of Windows servers (data1, data2 and datawitness) that aren't part of any domain and don't use AD. I'm trying to set up mirroring based on the instructions at http://alan328.com/SQL2005_Database_Mirroring_Tutorial.aspx. I've had success right up until the final set of instructions where I tell data1 to use datawitness as the witness server. That step fails with the following message:
alter database MyDatabase set witness = 'TCP://datawitness.somedomain.com:7024'
The ALTER DATABASE command could not be sent to the remote server instance 'TCP://datawitness.somedomain.com:7024'. The database mirroring configuration was not changed. Verify that the server is connected, and try again.
I've tested both port 7024 as well as 1433 using telnet and both servers can indeed connect with each other. I'm also able to add a connection to the witness server from SQL Server Manager on the primary server. I've used the Configuration Manager on both servers to enabled Named Pipes and verify that IP traffic is enabled and using port 1433 by default.
What else could it be? Do I need any additional ports open for this to work? (The firewall rules are very restrictive, but I know traffic on the previously mentioned ports is explicitly allowed)
Caveats that are worth mentioning here:
Each server is in a different network segment
The servers don't use AD and aren't part of a domain
There is no DNS server configured for these servers, so I'm using the HOSTS file to map domain names to IP addresses (verified using telnet, ping, etc).
The firewall rules are very restrictive and I don't have direct access to tweak them, though I can call in a change if needed
Data1 and Data2 are using SQL Server 2008, Datawitness is using SQL Express 2005. All of them use the default instance (i.e. none of them are named instances)
After combing through blogs and KB articles and forum posts and reinstalling and reconfiguring and rebooting and profiling, etc, etc, etc, I finally found the key to the puzzle - an entry in the event log on the witness server reported this error:
Database mirroring connection error 2 'DNS lookup failed with error: '11001(No such host is known.)'.' for 'TCP://ABC-WEB01:7024'.
I had used a hosts file to map mock domain names for all three servers in the form of datax.mydomain.com. However, it is now apparent that the witness was trying to comunicate back using the name of the primary server, which I did not have a hosts entry for. Simply adding another entry for ABC-WEB01 pointing to the primary web server did the trick. No errors and the mirroring is finally complete.
Hope this saves someone else a billion hours.
I'd like to add one more sub answer to this specific question, as my comment on Chris' answer shows, my mirror was showing up as disconnected (to the witness) Apperently you need to reboot (or in my case i just restarded the service) the witness server.
As soon as i did this the mirror showed the Witness connection as Connected!
See: http://www.bigresource.com/Tracker/Track-ms_sql-cBsxsUSH/