Access Oracle data on Sql server - sql-server

I need to make a linked server on a SQL Server instance to get data from Oracle, but I'm finding it difficult.
I set up ODBC Oracle and the connection test succeeds, but when I try to create the linked server in SQL Server, the below message occurs.
The user of the Agent service and MSSQLSERVER is LocalSystem
Can not initialize the data source object of OLE DB provider "MSDASQL"
for linked server "10.40.22.7". OLE DB provider "MSDASQL" for linked
server "10.40.22.7" returned message "The specified driver could not
be loaded due to system error 1114: A dynamic link library (DLL)
initialization routine failed. (Oracle in OraClient12Home1, G: \ app \
client \ adm_bds \ product \ 12.1.0 \ client_1 \ SQORA32.DLL). "
(Microsoft SQL Server, Error: 7303)
The file in the briefed folder exists.

Oracle version independent problem.
Restart the MS SQL server service after installing the ODAC.
MS SQL service must refresh the environment variables added after the installation of ODAC.

Given that it was >1 year ago, this probably won't help Fabiano but may help others out there...
Encountered the same issue and it turned out to be the permission setting of SQORA32.DLL as well as DLLs that SQORA32 depends on.
The account running MSSQLServer process needs to have read/execute permission on all relevant DLLs in that folder. (Use Task Manager to identify the account)
Add the account to security setting of the folder where SQORA32.DLL resides and let all files in the folder inherit the permission.
If you've changed the folder permission and you're still encountering the error message, ensure that the other files did not have permission inheritance disabled. My files weren't inheriting the folder permission (coz some genius disabled it) and despite giving SQORA32.DLL the correct permission setting, the same error message kept popping up and complaining about SQORA32.DLL. As it turns out, the error message was a red herring; it was the dependent DLLs that didn't have the correct permission setting.
~des

The issue for me was that the folder that contains SQORA32.DLL was not in the PATH. After adding it to the system PATH and restarting sql server, the connection was established with no error.

Related

Cannot create an instance of OLE DB Provider 'OraOLEDB.Oracle' error when creating linked servers from SQL Server to Oracle

Aware that this topic has been raised many times here (I have gone through the posts), but none of the suggestion on the posts has resolved my issue.
When I attempt to create a linked server to the oracle database from SQL Server Management Studio, I get the error:
Cannot create an instance of OLE DB Provider 'OraOLEDB.Oracle' for
linker server ''. (Microsoft SQL Server, Error: 7302)
My understanding of this error is that the Oracle provider is not installed correctly or not at all.
To check this I ran 'ODBC Data Source Administrator (64-bit) and attempted to add the provider (which was not available).
To resolve this I fully installed Oracle 10g Client as an admin and restarted the server. I added the new oracle bin folder to the environment %PATH% as well as %TNS_ADMIN% to point to the tnsnames.ora file.
I have run 'tnsping' using the value specified in the tnsname.ora file and it is able to connect.
I have exhausted my ideas to get the oracle provider recognised by the ODBC 64 bit connector.
Does anyone have any idea that could resolve this issue?
Thank you for any help.
The solution was to follow the steps suggested by Dmitry. However, make sure you carry out the following step:
C:\Users\dbrowne\Downloads\ODAC121010Xcopy_x64>.\install.bat oledb
c:\oracle\odac64 odac64 true
as an admin!

Starting sql server despite database files no longer existing

I have the following situation:
A sql server 2014 is installed
While the server was shutdown the hard drive the databases were on had troubles which resulted in the loss of these files
So now I have the situation that the server has databases configured to be existing where the files don't exist any longer.
When I now try to start the sql server via the configuration tools it does not start and in the log files I see that he throws an error that he doesn't find the database files. When I tried to copy the same files there from another server I still had the same problem but the error message was now "access denied" (as naturally they had different users).
So my question is: What (aside from a reinstall) can I do to get the sql server up and running again?
Change the database file permissions to allow access for SQL Server. Look at an existing file to see what permissions must be configured.

Operation Manager (SCOM) install SQL error

The story:
Virtual environment SQL, SCOM, SCCM each on his VM, everything is working.
SCOM server gets deleted (the entire VM is gone).
In order to reinstall I delete old SQL databases and files (scom & scomDW).
Recreate a VM, install OS (2012R2), prerequisites, recreate accounts (action account, data access account, write account, read account).
Action account and data access account are local admins on the installation server.
Firewall rules ware verified.
Collation is correct.
The problematic update isn't installed.
The client is not installed on SQL server.
the setup is runed under a domain admin & SQL sysadmin.
The problem
When installing "management server" Management server returns a warning then passes to Data warehouse configuration just to fail.
First error from the log says : Error: :DB operations failed with SQL error 2812: Could not find stored procedure 'p_MOMManagementGroupInfoSelect'.
Last error says that it's unable to connect to management server.
Any idea is useful so THX!
The problem was fixed by checking the "security admin" tag in SQL for the account that was making the install.
I must mention that the account was already sa and dbcreator.

Windows could not start the SQL Server (MSSQLSERVER) on Local Computer... (error code 3417)

For some reasons I moved this folder : (Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL) to another drive, then returned it to the same location, but sql server has stopped working, showing this error when trying to start it again:
Windows could not start the SQL Server (MSSQLSERVER) on Local
Computer. For more information, review the System Event Log. If this
is a non-Microsoft service, contact the service vendor, and refer to
service-specific error code 3417.
I tried many solutions discussed in different forums, but none of them work for me.
The folder is not compressed or encrypted.
My sql server version is 2012:
Microsoft SQL Server Management Studio 11.0.3128.0
Microsoft Analysis Services Client Tools 11.0.3128.0
Microsoft Data Access Components (MDAC) 6.1.7601.17514
Microsoft MSXML 3.0 4.0 6.0
Microsoft Internet Explorer 9.0.8112.16421
Microsoft .NET Framework 4.0.30319.18047
Operating System 6.1.7601
Thanks for your kind help in advance.
Very simple to solve this problem.
Just open RUN window(Window+R) and type services.msc:
Services.msc window
Find the SQL within name column and right click on that.
right click on SQL as in screenshot
You will get properties option, click on properties.
One new window will be open and there you have to click on Log On tab. And select the Local System Account. then apply and okay.
Select Local system Account
After that come again in services.msc window. and right click on sql and click start.
And finally, SQL Server services started successfully. enjoy and keep learning.
Check if you did compress the driver or folder in where you put the .mdf file.
If so, plesae goto the driver or folder, change the compress option by
Properties -> Advanced and unticked the “Compress contents to save disk space” checkbox.
After above things, you should be able to start the service again.
Run this command after opening cmd as administrator
net start mssqlserver /T902
This command is called trace flag 902. It is used to bypass script upgrade mode. Every time when you try to start your sql service it also looks for script upgrades. and when the script upgrade fail your service unable to start. So, Whenever we have such upgrade script failure issue and SQL is not getting started, we need to use trace flag 902 to start SQL.
I hope this will help you..
In my particular case, I fixed this error by looking in the Event Viewer to get a clue as to the source of the issue:
I then followed the steps outlined at Rebuilding Master Database in SQL Server.
Note: Take some good backups first. After erasing the master database, you will have to attach to all of your existing databases again by browsing to the .mdf files.
In my particular case, the command to rebuild the master database was:
C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\SQLServer2012>setup /ACTION=rebuilddatabase /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=mike /sapwd=[insert password]
Note that this will reset SQL server to its defaults, so you will have to hope that you can restore the master database from E:\backup\master.bak. I couldn't find this file, so attached the existing databases (by browsing to the existing .mdf files), and everything was back to normal.
After fixing everything, I created a maintenance plan to back up everything, including the master database, on a weekly basis.
In my particular case, this whole issue was caused by a Seagate hard drive getting bad sectors a couple of months after its 2-year warranty period expired. Most of the Seagate drives I have ever owned have ended up expiring either before or shortly after warranty - so I'm avoiding Seagate like the plague now!!
This usually occurs when the master.mdf or the mastlog.ldf gets corrupt . In order to solve the issue goto the following path C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL , there you will find a folder ” Template Data ” , copy the master.mdf and mastlog.ldf and replace it in C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Data folder . Thats it . Now start the MS SQL service and you are done
I have had the same error recently. I have checked the folder Log of my Server instance.
x:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\
and I have found this errors in logs
Starting up database 'master'.
Error: 17204, Severity: 16, State: 1.
FCB::Open failed: Could not open file
x:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf for file number 1. OS error: 5(Access is denied.).
Error: 5120, Severity: 16, State: 101.
Unable to open the physical file "E:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\master.mdf". Operating system error 5: "5(Access is denied.)".
Error: 17204, Severity: 16, State: 1. FCB::Open failed: Could not open file E:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf for file number 2. OS error: 5(Access is denied.).
Error: 5120, Severity: 16, State: 101. Unable to open the physical file "E:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\mastlog.ldf". Operating system error 5: "5(Access is denied.)".
SQL Server shutdown has been initiated
So for me it was an easy fix. I just added proper access rights to this files to the sql server service account.
I hope it will help
In My case I had to Upgrade the SQL Server since evaluation licence had been expired.
What is System Event Log saying?
Have you tried to repair:
Sql Server Installation Center -> Maintenance -> Repair
I was getting this error today. And above answers didn't help me. I was getting this error when I try to start the SQL Server(SQLEXPRESS) service in Services(services.msc).
When I checked the error log at the location C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Log, there was an entry related TCP/IP port.
2018-06-19 20:41:52.20 spid12s TDSSNIClient initialization failed
with error 0x271d, status code 0xa. Reason: Unable to initialize the
TCP/IP listener. An attempt was made to access a socket in a way
forbidden by its access permissions.
Recently I was running a MSSQLEXPRESS image in my docker container, which was using the same TCP/IP port, that caused this issue.
So, what I did is, I just reset my TCP/IP by doing the below command.
netsh int ip reset resetlog.txt
Once the resetting is done, I had to restart the machine and when I try to start the SQLEXPRESS service again, it started successfully. Hope it helps.
Go to the services and check if the SQL Server (MSSQLSERVER) service is running stop it and start your SQL Server (SQLEXPRESS) service it should work.
see the image:
Make sure both drive have the same partition - ( like FAT or NTFS, preferably NTFS ) also make sure he NETWORK SERVICE account, has the access.
Database rebuild fixed it for me as well. Also had to restore the old database from backup as it got corrupted during power outage...
The copy master.mdf procedure did not work for me.
i had the same problem before
the error code 3417 : the SQL SERVER cannot start the master database,
without master db SQL SERVER can't start
MSSQLSERVER_3417
The master database records all the system-level information for a SQL Server system. This includes instance-wide metadata such as logon accounts, endpoints, linked servers, and system configuration settings. In SQL Server, system objects are no longer stored in the master database; instead, they are stored in the Resource database. Also, master is the database that records the existence of all other databases and the location of those database files and records the initialization information for SQL Server. Therefore, SQL Server cannot start if the master database is unavailable
MSDN Master DB
so you need to reconfigure all settings after restoring master db
solutions
replace master mdf and ldf files with the same files from another instance of sql Server as long as its the same version reference
Rebuild System Databases refrence
reinstall sql server
I copied a master.mdf und mastlog.ldf from another Computer (luckily, we have a lot of Clients with the same configuration, otherwise template data would be perhaps necessary). I backed up the damaged master.mdf and mastlog.mdf. After that I replaced the bad ones with the ones from another Computer. And it worked. I needed to start the MSSQLSERVER Service of course. But, after that I had Problem that the user was already existing but orphaned (error code 15023), I executed the query
USE Database_name
EXEC sp_change_users_login 'Auto_Fix', 'username'
after that, everything was working smoothly. Hope this helps you and many thanks for this thread, saved me :)
Just rename the current ErrorLog to any other name like Errorlog _Old and change any old Log file to Error log file
try to start the SQL server services.. That's it. it will work..
Sql server error log file got corrupted. that is why it gives the problem even when you have all permissions.. when you delete it. new file will be generated.
I encountered this issue after changing database location. And I solved it by moving system databases back to their default locations. Although I will recommend not to move system databases like master and model to some other location. But if you want then you can refer to this article: https://learn.microsoft.com/en-us/sql/relational-databases/databases/move-system-databases?view=sql-server-2017
Re-entering credentials will help to start the services:
Start > Services
Right click on SQL Sever > Properties
Log On
Re-enter credentials and apply
Start the services now
The reason behind getting this Error Code : 3417 may be as follows:
One cause may be due to the Network account for the Data folder in
Program files.
The other reason may be because of some Windows
settings changed somehow.
Example: If for some reasons you have moved this folder (Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL) to another location then returned it to the same location. So, though it was returned to the same location the server may stop working and show error code 3417 when trying to start it again.
How To Fix SQL Error 3417
Go to "C:Program Files Microsoft SQLServerMSSQL.1MSSqLData"
Security/Permission settings
Network Service Account
Add a Network Service account
Then again check all
As stated here, you can try this third party tool as well.
A few times now, I've experienced various instances MS SQL Server to fail with this error after a Windows update. Most of the quick fixes above did not work for me.
What did:
copy all production databases over to some safe place
remove everything SQL Server via add/remove programs
get the latest SQL Server Express or Dev & install it
move the databases over to their home and reattach them.
For me, this was the fastest solution. Trying to find the cause of the error and fixing it is an afternoon of googling misty error messages. But YMMV.
In my case problem was about evaluation period expiration. I also went through this thread of StackOverFlow.You can investigate your problem by going to Event Viewer --> Windows Log (Application) and then search for your error id. For Step by Step guide to view error id in event viewer visit this...

"Cannot create an instance of OLE DB provider" error as Windows Authentication user

I am trying to run openrowset from MS SQL Server on an Oracle server.
When i execute the following command:
select * from
OPENROWSET('OraOLEDB.Oracle','srv';'user';'pass',
'select * from table')
the following error occurs
Msg 7302, Level 16, State 1, Line 1
Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "(null)".
Can anyone tell me how I can use openrowset with OraOLEDB.Oracle?
I am using 64 bit version of MS SQL Server and Oracle OLEDB driver.
Edit
I have tried this on two machines running Windows 7 x64 & Windows Server 2008 x64 with MS SQL Server 2008 x64. Both showed the same error message.
In SQL Server Enterprise Manager, open \Server Objects\Linked Servers\Providers, right click on the OraOLEDB.Oracle provider, select properties and check the "Allow inprocess" option. Recreate your linked server and test again.
You can also execute the following query if you don't have access to SQL Server Management Studio :
EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1
Ran into this issue where the linked server would work for users who were local admins on the server, but not for anyone else. After many hours of messing around, I managed to fix the problem using the following steps:
Run (CTRL + R) “dcomcnfg”. Navigate to “Component Services -> Computers -> My Computer -> DCOM Config”.
Open the properties page of “MSDAINITIALIZE”.
Copy the “Application ID” on the properties page.
Close out of “dcomcnfg”.
Run “regedit”. Navigate to “HKEY_CLASSES_ROOT\AppID{???}” with the ??? representing the application ID you copied in step #3.
Right click the “{???}” folder and select “Permissions”
Add the local administrators group to the permissions, grant them full control.
Close out of “regedit”.
Reboot the server.
Run “dcomconfig”. Navigate to “Component Services -> Computers -> My Computer -> DCOM Config”.
Open the properties page of “MSDAINITIALIZE”.
On the “Security” tab, select “Customize” under “Launch and Activation Permissions”, then click the “Edit” button.
Add “Authenticated Users” and grant them all 4 launch and activation permissions.
Close out of “dcomcnfg”.
Find the Oracle install root directory. “E:\Oracle” in my case.
Edit the security properties of the Oracle root directory. Add “Authenticated Users” and grant them “Read & Execute”, “List folder contents” and “Read” permissions. Apply the new permissions.
Click the “Advanced Permissions” button, then click “Change Permissions”. Select “Replace all child object permissions with inheritable permissions from this object”. Apply the new permissions.
Find the “OraOLEDB.Oracle” provider in SQL Server. Make sure the “Allow Inprocess” parameter is checked.
Reboot the server.
When connecting to SQL Server with Windows Authentication (as opposed to a local SQL Server account), attempting to use a linked server may result in the error message:
Cannot create an instance of OLE DB provider "(OLEDB provider name)"...
The most direct answer to this problem is provided by Microsoft KB 2647989, because "Security settings for the MSDAINITIALIZE DCOM class are incorrect."
The solution is to fix the security settings for MSDAINITIALIZE. In Windows Vista and later, the class is owned by TrustedInstaller, so the ownership of MSDAINITIALIZE must be changed before the security can be adjusted. The KB above has detailed instructions for doing so.
This MSDN blog post describes the reason:
MSDAINITIALIZE is a COM class that is provided by OLE DB. This class can parse OLE DB connection strings and load/initialize the provider based on property values in the connection string. MSDAINITILIAZE is initiated by users connected to SQL Server. If Windows Authentication is used to connect to SQL Server, then the provider is initialized under the logged in user account. If the logged in user is a SQL login, then provider is initialized under SQL Server service account. Based on the type of login used, permissions on MSDAINITIALIZE have to be provided accordingly.
The issue dates back at least to SQL Server 2000; KB 280106 from Microsoft describes the error (see "Message 3") and has the suggested fix of setting the In Process flag for the OLEDB provider.
While setting In Process can solve the immediate problem, it may not be what you want. According to Microsoft,
Instantiating the provider outside the SQL Server process protects the SQL Server process
from errors in the provider. When the provider is instantiated outside the SQL Server process,
updates or inserts referencing long columns (text, ntext, or image) are not allowed.
-- Linked Server Properties doc for SQL Server 2008 R2.
The better answer is to go with the Microsoft guidance and adjust the MSDAINITIALIZE security.
For error 7302 in particular, I discovered, in my registry, when looking for OraOLEDB.Oracle that the InprocServer32 location was wrong.
If that's the case, or you can't find that string in the registry, then you'll have to install or re-register the component.
I had to delete the key from the GUID level, and then find the ProgID (OraOLEDB.Oracle) key, and delete that too. (The ProgID links to the CLSID as a pair).
Then I re-registered OraOLEDB.Oracle by calling regsvr32.exe on ORAOLEDB*.dll.
Just re-registering alone didn't solve the problem, I had to delete the registry keys to make it point to the correct location. Alternatively, hack the InprocServer32 location.
Now I have error 7308, about single threaded apartments; rolling on!
Received this same error on SQL Server 2017 trying to link to Oracle 12c. We were able to use Oracle's SQL Developer to connect to the source database, but the linked server kept throwing the 7302 error.
In the end, we stopped all SQL Services, then re-installed the ODAC components. Started the SQL Services back up and voila!
Aside from other great responses, I just had to give NTFS permissions to the Oracle installation folder.
(I gave read access)
Similar situation for following configuration:
Windows Server 2012 R2 Standard
MS SQL server 2008 (tested also SQL 2012)
Oracle 10g client (OracleDB v8.1.7)
MSDAORA provider
Error ID: 7302
My solution:
Install 32bit MS SQL Server (64bit MSDAORA doesn't exist)
Install 32bit Oracle 10g 10.2.0.5 patch (set W7 compatibility on setup.exe)
Restart SQL services
Check Allow in process in MSDAORA provider
Test linked oracle server connection
Just enable option "Allow in process" on the properties of the OraOLEDB.oracle provider as below
[open server objects > Linked Severs > providers] 1 [right click on
OraOLEDB.oracle > properties ] 2 then choose optaion "Allow in
process" and click ok

Resources