ODI getting agent name and server - oracle-data-integrator

I wanted to know if there is a method to get the Agent name and the server where it's running. I tried reading all the OdiGetInfo() material, but couldn't find anything helpful.
I need these informations since I have to do an ODI package that constantly check if an Agent and the server are up & running.
I know it's possible to do that using a shell script, executed from the ODI package, but I wanted to know if there is another way to do that.
Thank you.

Method to get Agent Name: odiRef.getSession("AGENT_NAME")
Method to get Server details: odiRef.getInfo("DEST_JAVA_URL")
Note: DEST_JAVA_URL parameter returns the entire JDBC URL mentioned in Physical Data server.

Related

SSIS to Oracle "Could not create a managed connection manager."

I'm trying to use SSIS to load some data from Oracle database to MSSQL database.
I created the project and used the ADO.Net source and was able to create a connection to Oracle and run queries and view results.
However when I actually run the package I get the following error:
Error: 0xC0208449 at Data Flow Task, ADO NET Source 2: ADO NET Source has failed to acquire the connection {EECB236A-59EA-475E-AE82-52871D15952D} with the following error message: "Could not create a managed connection manager.".
It seems similar to the issue here
And I did find that I have two oracle clients version installed "11.1" and "12.2".
One is used by PL/SQL and the other by other entity framework project.
If this is the issue I just wanted a way to tell the SSIS to pick-up the correct one.
I tried adding Entry in machine.config for "oracle.manageddataaccess.client" section with the desired version.
I also tried using other types of data sources but couldn't even create a successful connection
I tried changing the Run64bitRuntime property in the project to False
Note: I don't have SSIS installed on my machine.
Eventually, I just had to remove the entries related to 11.1 in path variable then restarted my machine.
Also I switched to "dotConnectForOracle" for connection and now it seems to be working fine.
I'm expecting issues related to other applications that might still be using the 11.1 version, but that will be a problem for another day.
Always make sure to write the user (oracle schema) in uppercase and some special characters [in my case it was $] in the password needs escape character even if you're using the wizard not the cmd
I still don't understand the whole issue but I hope this helps someone some day.

Passing SQL Server Name of SSIS Job to package variable

I am trying to figure out a way that I can pass the SQL Sever Name an SSIS Job is running on, to a variable within a package.
Basically, which ever Server this Job is running on, will be passed to the ServerName property in an Ole DB Connection in the package so the data is loaded into that server.
I have been looking at documentation on package configuration, and I feel like it would be in the environment variable section. However, I do not think any of the listed "environment variables" are the server name. I have Googled this issue, and searched on StackOverflow for problems, but I cannot seem to find this problem.
There are probably a few different approaches, but I think you can accomplish this with a simple Execute SQL Task.
Create a new Execute SQL Task
Under General -> SQL Statement, enter your query Select ##SERVERNAME as ServerName in the "SQLStatement" field
Under General -> Result Set, choose "Single row"
Under Parameter Mapping, Enter your variable (create one if you don't have one) User::ServerName in Variable Name, "Input" as direction, 0 as Parameter Name, and -1 as Parameter Size
Under Result Set, enter "ServerName" for your Result Name and type the variable in Variable Name
Click OK
Give that a go and see if it accomplishes what you want.
I was able to accomplish this by using a script task, and C# code to grab the Machine Name, or IP address of the machine running it.
Dts.Variables["User::ServerName"].Value = System.Net.Dns.GetHostName();

Creating SQL Server database without the /MSSQLSERVER in the connection string?

I found this pretty weird thing when I first installed SQL Server 2008, for some reason there are two things that I want to get rid of and I can't:
If my computer name is, say, ABC, then I always have to connect to ABC/MSSQLSERVER for the server name when I log in from the SQL Server client, instead of using just using ABC, may I know how I can do that?
How can I default the DB so that if I have multiple DB on the server (System DB + my real DB), I can always default to use my real DB without saying "Use MyRealDB" every time?
Thanks a lot!
Regards,
Anyi
1) When installing, you picked a named instance.
2) In user admin, you can specify the default database per user.
What's happened here is that your SQL Server is installed as a named instance. To remedy this, you'll have to remove and reinstall SQL Server.

Getting the local instance of SQL Server rather than a named instance

A while ago, I wrote a web-based guestbook application that wrote it's own database.
My code was very amateurish, but, as it was my very first publication, I was very happy with it.
Only about a month after I'd published it did I realize I'd made a huge mistake in the code.
I've only ever connected to a specific named instance of SQL Server, and it occurred to me that, if the SQL Server instance has a different name than the one I specified, it wouldn't work.
So, since my users will probably not know what the name of the instance of SQL Server that's running is, I thought adding a field where the user can specify it would help if they do, but what if they don't?
My answer was to get the local instance, regardless of name.
I tried Data Source=.\local;, Data Source=.; and other variants, but nothing worked.
Any ideas?
A non-named instance is called "default instance" and can be accessed using "Data Source=(local);...".
The only way of knowing which instances are running is by querying the SQL Browser Service, if it's running.
I guess most of your users are running SQL Server Express? If so, the service is called local\SQLEXPRESS. If not, it's local or they've named it themselves. So, I would try local\SQLEXPRESS first, then local. If none works, just throw an exception and ask the user to add it themselves.

SQL Agent Job - Connection may not be configured correctly or you may not have the right permissions on this connection?

I'm getting this error when running an SSIS package through SQL Agent
Failed to acquire connection "ORACLE ADO.NET". Connection may not be configured correctly or you may not have the right permissions on this connection.
When I log on as the SQL Agent User and run the ssis package directly it is fine. When I then execute it through the SQL agent job, it fails.
I've read around extensively on this topic, and it seems a lot of the advise concerns how you are logged in, configuring of proxy accounts, etc, etc, etc, none of which has been helpful.
I am logging onto an Oracle database with an ADO.NET conncetion. The connection string is as follows (datasource, userid and password have been changed):
Data Source=DATASOURCE;User ID=userid;Password=password;Persist Security Info=True;Unicode=True;
I'm loading this from a registry setting using package configuration. To check that I am getting the correct string, I am writing it into a temporary log table. I am definately getting the string I need from the correct registry setting.
I've tested the oracle login credentials though PL/SQL developer, and it lets me login just fine.
As far as I can tell, as I'm using an explicit user name and password for the Oracle connection it just shouldn't matter who the SSIs pacakge is run as. The only point of failure that Ican see would be the reading of the information from the registry, but that seems fine.
I'm really quite baffled, I must confess, and would appreciate any help some of the splendid experts here can offer.
Many thanks,
James
Ok, tracked this one down after quite a lot of pain.
It was working fine on one environment, but not another, so I fired up Process Monitor (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) and ran a package through the SQL Agent job, comparing which system entities were hit on each enviroment.
On the failing environment, at the point of the bulk transfer operation, the package attempted to get the Oracle 11 client DLL, and then hung.
I knew that this was installed, and, moreoever, the DLL path was a system environment setting. After further investigation it was revealed that the server had not been rebooted since the Oracle Client install and the SQL Server Agent process had not bee recycled.
Yes, can you believe it, the old helpdesk fix "Can you reboot your computer?" worked.
Sigh!
We had issues at a client with running packages connecting to Oracle before stored on our sql server instance. The work around we found was to change the package property, protection level, to "Dont save Sensitive Data" and for security purposes, we encrypted the username and password in the package configuration that was decrypted by a udf in sql server. Of course, before you try the whole encryption part, I would recommend putting the username and password in the package configuration without encrypting the values to see if changing the protection level setting is the solution to your specific problem. I hope this helps.
I was getting this error when tnsnames.ora file did not have a valid entry for the environment

Resources