Добро пожаловать на наш блог о запросах к базе данных Oracle из SQL Server! В этой статье мы рассмотрим, как подключиться к базе данных Oracle и выполнять запросы с использованием SQL Server. Это может быть полезным навыком для администраторов баз данных и разработчиков, работающих среди Oracle и SQL Server.
Настройка клиентского ПО Oracle
Прежде чем мы сможем выполнять запросы к базе данных Oracle из SQL Server, нам необходимо установить и настроить клиентское ПО Oracle. Этот процесс был подробно описан в нашей предыдущей статье, поэтому обязательно ознакомьтесь с ней, если вы еще этого не сделали.
Использование функции Get-OLEDBData
Для выполнения запроса к базе данных Oracle из SQL Server мы будем использовать функцию под названием Get-OLEDBData. Эта функция позволяет нам выполнять SQL-запросы к различным источникам данных, включая Oracle. Вот пример использования функции Get-OLEDBData:
function Get-OLEDBData ($connectstring, $sql) {
$OLEDBConn = New-Object System.Data.OleDb.OleDbConnection ($connectstring)
$OLEDBConn.open()
$readcmd = New-Object system.Data.OleDb.OleDbCommand ($sql, $OLEDBConn)
$readcmd.CommandTimeout = '300'
$da = New-Object system.Data.OleDb.OleDbDataAdapter ($readcmd)
$dt = New-Object system.Data.datatable
[void]$da.fill($dt)
$OLEDBConn.close()
return $dt
}
$connString = "password=assword;User ID=SYSTEM;Data Source=XE;Provider=OraOLEDB.Oracle"
$qry = "SELECT * FROM HR.DEPARTMENTS"
./Get-OLEDBData $connString $qry
Как видите, мы просто передаем строку подключения и SQL-запрос в функцию Get-OLEDBData. Это вернет все строки из таблицы DEPARTMENTS в схеме HR базы данных Oracle.
Обработка конфиденциальной информации о пароле
Одной из проблем, возникающих при выполнении запроса к базе данных Oracle из SQL Server, является обработка конфиденциальной информации о пароле. Это особенно важно при использовании этой техники для автоматизированных пакетных заданий. Чтобы решить эту проблему, мы можем зашифровать строку подключения и безопасно хранить пароль.
Одним из решений является использование функций шифрования PowerShell, таких как Library-StringCrypto, созданных Стивеном Хистадом. Эти функции позволяют нам шифровать и расшифровывать строки с использованием кодовой фразы. Вот пример использования функций шифрования:
#Исходные функции шифрования
. ./Library-StringCrypto.ps1
#Шифрование строки с использованием кодовой фразы
$encrypt = Write-EncryptedString $connString "4#&7yaoff"
#Показать зашифрованную строку
$encrypt
#Расшифровать строку
Read-EncryptedString $encrypt "4#&7yaoff"
После того, как мы зашифровали строку подключения, мы можем сохранить ее в таблице SQL Server, которая защищена. Мы можем создать таблицу в SQL Server для хранения зашифрованных строк подключения, например, так:
CREATE TABLE [dbo].[server_lku](
[server_name] [varchar](255) NOT NULL,
[server_type] [varchar](25) NOT NULL,
[connection_string] [varchar](2000) NOT NULL,
[is_encrypted] [bit] NOT NULL,
CONSTRAINT [PK_server_lku] PRIMARY KEY CLUSTERED (
[server_name] ASC
) WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[server_lku] ADD CONSTRAINT [DF_server_lku_is_encrypted] DEFAULT ((0)) FOR [is_encrypted]
GO
Теперь мы можем выбирать и вставлять данные в таблицу server_lku с использованием функций Get-SqlData и Set-SqlData из скрипта LibrarySqlData. Вот пример:
. ./LibrarySqlData.ps1
set-sqldata "win2k8r2\sql2k8" dbautility "INSERT server_lku VALUES('XE','oracle','$encrypt',1)"
#Получить незашифрованную строку
$decryptedString = Get-sqldata "win2k8r2\sql2k8" dbautility "SELECT * FROM server_lku where server_name = 'XE'" | `
foreach {
if ($_.is_encrypted) {
Read-EncryptedString $_.connection_string "4#&7yaoff"
} else {
$_.connection_string
}
}
#Показать расшифрованную строку
$decryptedString
#Выполнить запрос снова
./Get-OLEDBData $decryptedString $qry
Следуя этим шагам, мы можем безопасно хранить и извлекать зашифрованную строку подключения, позволяя нам выполнять запросы к базе данных Oracle из SQL Server, не раскрывая конфиденциальную информацию о пароле.
Вывод
Запрос к базе данных Oracle из SQL Server может потребовать некоторой дополнительной настройки, но после того, как все будет настроено, вы сможете начать автоматизацию задач Oracle с использованием PowerShell. Это может быть ценным навыком для администраторов баз данных и разработчиков, работающих среди Oracle и SQL Server.
Спасибо за прочтение нашей статьи в блоге. Мы надеемся, что вы нашли ее информативной и полезной. Следите за нашими статьями о SQL Server и управлении базами данных!