Published on

November 19, 2011

Запрос к базе данных Oracle из SQL Server

Добро пожаловать на наш блог о запросах к базе данных 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 и управлении базами данных!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.