我已经研究这个问题好几天了,但一直陷入困境。
我需要编写一个脚本,从 Oracle db 获取数据并对数据进行处理。在我的脚本中,我必须多次获取数据。我的机器有SQLDeveloper-21.4.3
我从安装中获得的InstantClient-Basic-Windows-21.3.0
。我使用 SQL Developer 连接到另一台机器上的数据库;这就是我可以查看数据库的表、视图等的方式。
其次,此脚本将托管在另一台运行 Windows-Server-2012-R2 的服务器上。我只是使用我的机器来编写脚本,因为我无法使用服务器来执行此操作。因此,我正在寻找一种需要最少安装的解决方案。
第三,我们没有 Oracle 商业许可证。我尝试访问的这个 Oracle 数据库位于第三方安装的机器上,该机器上安装了一些仪器。该公司使用 Oracle 来收集所安装仪器上的数据。
我希望解决方案类似于调用 MS SQL 的连接,我下载了提供 cmdlet 来连接到 MS SQL 的模块。
Oracle 确实有Oracle Modules for PowerShell
,但我既没有找到如何使用它们的信息,也没有理解 Oracle 提供的关于此的少量信息。要使其工作,要求之一是:
用于签署 API 请求的配置文件和密钥对,其中公钥使用 Oracle Cloud Infrastructure Console 上传到 Oracle Cloud。只有调用 API 的用户才应该拥有私钥。
我不知道 Oracle 到底在说什么。例如,这个配置文件是什么,它在哪里?我从哪里获取用于签署 API 请求的密钥对。什么是 Oracle Infrastructure Console,我从哪里获取它?你明白了。链接:https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/powershell.htm
因此,我选择了.DLL 路线。
这是我目前所做的:
我是Oracle.ManagedDataAccess.Core -Version 3.21.61
从 NuGet 安装的。解压包并将它移动Oracle.ManagedDataAccess.dll
到我的脚本的位置。代码是:
$OracleDLLPath = "C:\Users\Desktop\CNC_File_Transfer_VSCode\Fastems_NicNet\Oracle.ManagedDataAccess.dll"
$datasource = " (DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = 10.50.61.9)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED)
(SERVICE_NAME = Fa1)
(FAILOVER_MODE = (TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5))))"
$username = "username"
$password = "password"
$queryStatment = "SELECT [PROG_TYPE] FROM NC_PROGRAMS FETCH FIRST 10 ROWS ONLY"
#Load Required Types and modules
Add-Type -Path $OracleDLLPath
Import-Module SqlServer
Write-Host $queryStatment
#Create the connection string
$connectionstring = 'User Id=' + $username + ';Password=' + $password + ';Data Source=' + $datasource
#Creates a data adapter for the command
$da = New-Object Oracle.ManagedDataAccess.Client.OracleDataAdapter($cmd);
#The Data adapter will fill this DataTable
$resultSet = New-Object System.Data.DataTable
#Only here the query is sent and executed in Oracle
[void]$da.fill($resultSet)
#Close the connection
$con.Close()
WRITE-HOST $resultSet
但这会出现错误:
Add-Type : Unable to load one or more of the requested types. Retrieve
the LoaderExceptions property for more information.
我对编程还很陌生。如果有人能提供解决此问题的详细步骤,我将不胜感激。提前致谢。