Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Oracle и Powershell 2.0

При попытки соединиться с базой oracle 11g из powershell 2.0 32bit
появляется такие ошибки:
Исключение при вызове "ExecuteReader" с "0" аргументами: "ORA-04044: процедура, 
функция, пакет или тип здесь не разрешены"
C:\FreeSizeDB\FreeSizeDB.ps1:22 знак:31
+ $reader=$command.ExecuteReader <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException
 
Нельзя вызвать метод для выражения со значением NULL.
C:\FreeSizeDB\FreeSizeDB.ps1:25 знак:20
+ while ($reader.read <<<< ()){
    + CategoryInfo          : InvalidOperation: (read:String) [], RuntimeExcept 
   ion
    + FullyQualifiedErrorId : InvokeMethodOnNull
 
Нельзя вызвать метод для выражения со значением NULL.
C:\FreeSizeDB\FreeSizeDB.ps1:33 знак:14
+ $reader.Close <<<< ()
    + CategoryInfo          : InvalidOperation: (Close:String) [], RuntimeExcep 
   tion
    + FullyQualifiedErrorId : InvokeMethodOnNull


Cкрипт:
#Подключение к ORACLE через Powershell запуск в х32 Powershell

#1.копировать файл Oracle.DataAccess.dll в папку с скриптом
#2.в скрипте:

#Подключение к базе
[Reflection.Assembly]::LoadFile("C:\FreeSizeDB\Oracle.DataAccess.dll")
$compConStr = @"
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
        (HOST=test)(PORT=1522)))(CONNECT_DATA=(SERVER=DEDICATED)
        (SERVICE_NAME=testdb)));User Id=system;Password=test;
"@
$oraConn = New-Object Oracle.DataAccess.Client.OracleConnection($compConStr)
$oraConn.Open()

#Запрос к  базе
$sql2 = "select count(name) as count from v$datafile"; 
  
$command = New-Object Oracle.DataAccess.Client.OracleCommand($sql2,$oraConn)
$reader=$command.ExecuteReader()

#Условия
while ($reader.read()){
    $res = [int]($reader["count"])
    if($res -lt 100) {
                      write-host "меньше 100"
                      }
  }
  
# Закрытие соеденения
$reader.Close()
$oraConn.Close()
Ответ: SAS2014

ORA-04044: procedure, function, package, or type is not allowed here
Cause: A procedure, function, or package was specified in an inappropriate place in a statement.
Action: Make sure the name is correct or remove it.
Вопрос: странная ошибка в Powershell

Добрый день.
имеется задача складывать данные файлов трассировки(ssas) SQL Profiler в таблицу через powershell.
нашел скрипт открытия такого файла из powershell:
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfoExtended") | out-null
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | out-null
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
$trfFileName="c:\trace\trace1.trc"
$tfr = New-Object Microsoft.SqlServer.Management.Trace.TraceFile
$tfr.InitializeAsReader($trfFileName)
вроде бы все просто, вариантов примеров такого скрипта минимум 7 штук нашел, но тут и подкрался пушной зверек.
выдает ошибку:
Exception calling "InitializeAsReader" with "1" argument(s): "Failed to initialize object as reader."
At line:7 char:1
+ $trcreader.InitializeAsReader($trfFileName)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlTraceException

может кто сталкивался с такой проблемой? гугл не знает что это.
заранее спасибо.
Ответ: STsarionov,

похоже не помог тикет. висит не закрытым подобный уже 6 лет:

Вопрос: Проблема при записи результата запроса с PowerShell в таблицу SQL Server

Добрый день
Не уверен, что проблема на стороне SQL Server, но может кто подскажет
Есть SQL Server 2016
Выполняется запрос PowerShell, который подключаясь к веб-серверу, возвращает результат в json-строке:
$Процедуры =
'Продажи'

foreach ($п in $Процедуры)
{
    Clear-Host
    $conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=s; User ID=u; Password=p; Initial Catalog=b; Integrated Security=SSPI")
    $conn.Open()

    $Запрос = $П1 + $п + $П2 + $П3 + $П4
	$Результат = Invoke-RestMethod $Запрос -Credential $cred -TimeoutSec 6000

    $cmd = $conn.CreateCommand()
    $cmd.CommandText ="INSERT INTO [dbo].[temp_request] ([JSON_string],[mark]) VALUES ('"+ $Результат +"','"+$п+"')"
    $cmd.ExecuteNonQuery()
    $conn.Close()
}


Запрос точно отрабатывает, потому что в файл json записывает.

А в SQL Server записывает вот такой странный результат:
?value{Object}
И все, значений нет. Более точный набор символов напишу немного позже

При чем на втором сервере с точно таким программным пакетом все выполняется правильно:


Базу преобразовал в 130

Что это за проблема может быть?
Ответ: aleks2,

Спасибо

Я нигде не писал что программист. Грубить не было необходимости
Вопрос: ошибка при подключению к sql через powershell

Доброго всем времени. Уважаемые гуру подскажите как побороть ошибку.Ситуация следующая.
Есть sql express, в него залили базу все работает без проблем, настроили доступ по сети. Подключится через консоль могу без проблем, а при подключении к сервере через powershell выдает ошибку
"ПРЕДУПРЕЖДЕНИЕ: Не удалось получить сведения о службе SQL Server. Попытка подключения к инструментарию WMI на сервере "ххх" завершилась следующей ошибкой: Поставщик
инструментария WMI для SQL Server недоступен в ххх. --> Invalid namespace"
Подскажите что еще не настроено.
Ответ: ок
теперь:

Set-Location SQLSERVER:\SQL\bs2\SQLEXPRESS

dir
Вопрос: Можно ли редактировать таблицу в виндовс окне с помощью PowerShell?

Вроде бы даже что то подобное видел, уже не помню...
Не подскажите, есть что то такое, что бы в павершеле ввел команду указав коннект к SQL и в WinGUI отобразился Grid с данными?
Ответ:
Сон Веры Павловны
Почему? В PS доступны все классы .Net FCL - импортируем System.Windows.Forms (например), и вперед (). Или пишем свою classs library на C#/VB.Net, внутри которой будет UI на основе WinForms/WPF, и с уже прописанной интерфейсной логикой, и в PS-скрипте импортируем эту самописную class library.
ну да,когда собаке нехрен делать она известно что делает....
Вопрос: Не запускается DBControl Oracle 11g Windows 7

Всем доброго времени суток. В установке оракла я новичок.

Поставил на 7-ку стандартную весию оракла (не Enterprise). Саму базу (XE) пока не ставил.

В процессе установки получил вот такую ошибку: Enterprise Manager configuration failed due to the following error: failed to unlock all em-related accounts.

После этого пытался вот такой командой пересоздать репозиторий:

PowerShell
1
emca -config dbcontrol db -repos recreate
Сначала запрашивает SID, затем пароль для учетки SYS (написал дефолтовый, т.к. не понял как поменять), затем путь к ORACLE_HOME, затем пароль к учетки DBSNMP. Здесь я тоже ввел дефолтовый пароль, но система его не приняла - пишет не верный юзер/пароль.

Прошло несколько часов и при запуске этой же команды в cmd выдает уже вот такую ошибку (см. файл).

Подключиться к субд через sqlplus получается. Подскажите, пожалуйста, как быть.
Ко всему прочему не могу поменять в sqlplus кодировку (через команду set NLS_LANG). При этом если запускать sqlplus из oracle_home, то отображаются кракозябры, а если просто в командной строке (cmd) задать команду для кодировки, а потом запустить sqlplus, то все ок (с кодировкой).
Ответ: orion2014,

вот оно что...на сервере я как раз через netca создавал, а на клиенте забыл про это. Спасибо вам, буду дальше пробовать.

Добавлено через 14 минут
Вопрос такой - как на одной машине создать две переменные среды ORACLE_HOME ? Чтобы одна была для клиента, а другая для сервера.
При запуске netca клиент смотрит в ORACLE_HOME сервера и netca не запускается из-за этого.

Добавлено через 1 час 34 минуты
Создал файл listener.ora из директории клиента через netca, но порт 1521 установить не дал, видимо, потому что он занят серверным прослушивателем. При попытке посмотреть статус прослушивателя выдает ошибки:

PowerShell
1
2
3
4
5
TNS-12541: TNS:нет прослушивателя
 TNS-12560: TNS:ошибка адаптера протокола
  TNS-00511: Прослушиватель отсутствует
   32-bit Windows Error: 61: Unknown error
Соединение с (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1522)))
Чет я совсем запутался...Может, на сервере и не надо было настраивать прослушивателя?

Добавлено через 9 минут
В итоге у меня есть listener.ora и tnsnames.ora на сервере и там удается подключиться к инстансу через sqlplus, все норм. На клиенте есть только listener.ora, вот такой

PowerShell
1
2
3
4
5
6
7
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.105)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
    )
  )
Сформировал его через netca. Но не могу даже посмотреть его статус, выдает ошибку, что нет прослушивателя. Если поменять порт 1522 на 1521, то он почему-то начинает смотреть на серверного прослушивателя, хотя я запускаю команды из директории клиента.

Добавлено через 3 минуты
При всем при этом я пока не ставил саму тестовую базу XE. Может быть, она является клиентом...? А тот клиент, который я установил вообще не нужно менять..?

Добавлено через 22 часа 37 минут
Кстати, залез в реестр посмотреть значения переменной ORACLE_HOME - у клиента стоит свое значение, а у сервера свое и они корректны.

Добавлено через 4 минуты
Может быть, поскольку у меня все на одной машине, клиент мне вообще не нужен? Достаточно поставить просто XE и все ?

Добавлено через 5 минут
И еще такой вопрос - откуда должна проходить команду tnsping для базы - из директории сервера или из клиента ? В первом случае пишет ошибку, что нет прослушивателя, а во втором пишет сбой при разрешении имени.

Добавлено через 23 часа 2 минуты
Вообщем, на сколько я понял, оракловый клиент мне не нужен, нужен только сервер и сама база XE. Но проблема в том, что по прежнему не получается пересоздать репозиторий для EM.

Вот сообщение в cmd:

PowerShell
1
2
3
4
5
6
7
8
15.02.2017 10:58:33 oracle.sysman.emcp.EMConfig perform
SEVERE: Listener is not up or database service is not registered with it. Start
the Listener and register database service and run EM Configuration Assistant ag
ain .
Refer to the log file at C:\app\...\cfgtoollogs\emca\orcl\emca_2017_02_15_10_55_
58.log for more details.
Could not complete the configuration. Refer to the log file at C:\app\...\cfgtoo
llogs\emca\orcl\emca_2017_02_15_10_55_58.log for more details.

А вот сообщение из лога emca:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CONFIG: ORA-12514: TNS:прослушиватель в данный момент не имеет данных о службе, запрашиваемой в дескрипторе соединения
 
oracle.sysman.assistants.util.sqlEngine.SQLFatalErrorException: ORA-12514: TNS:прослушиватель в данный момент не имеет данных о службе, запрашиваемой в дескрипторе соединения
 
    at oracle.sysman.assistants.util.sqlEngine.SQLEngine.executeImpl(SQLEngine.java:1655)
    at oracle.sysman.assistants.util.sqlEngine.SQLEngine.executeSql(SQLEngine.java:1903)
    at oracle.sysman.emcp.ParamsManager.checkListenerStatusForDBControl(ParamsManager.java:3230)
    at oracle.sysman.emcp.EMReposConfig.invoke(EMReposConfig.java:204)
    at oracle.sysman.emcp.EMReposConfig.invoke(EMReposConfig.java:158)
    at oracle.sysman.emcp.EMConfig.perform(EMConfig.java:253)
    at oracle.sysman.emcp.EMConfigAssistant.invokeEMCA(EMConfigAssistant.java:590)
    at oracle.sysman.emcp.EMConfigAssistant.performConfiguration(EMConfigAssistant.java:1453)
    at oracle.sysman.emcp.EMConfigAssistant.statusMain(EMConfigAssistant.java:574)
    at oracle.sysman.emcp.EMConfigAssistant.main(EMConfigAssistant.java:522)
15.02.2017 10:58:33 oracle.sysman.emcp.EMConfig perform
SEVERE: Listener is not up or database service is not registered with it. Start the Listener and register database service and run EM Configuration Assistant again .
Refer to the log file at C:\app\...\cfgtoollogs\emca\orcl\emca_2017_02_15_10_55_58.log for more details.
15.02.2017 10:58:33 oracle.sysman.emcp.EMConfig perform
CONFIG: Stack Trace: 
oracle.sysman.emcp.exception.EMConfigException: Listener is not up or database service is not registered with it. Start the Listener and register database service and run EM Configuration Assistant again .
    at oracle.sysman.emcp.ParamsManager.checkListenerStatusForDBControl(ParamsManager.java:3245)
    at oracle.sysman.emcp.EMReposConfig.invoke(EMReposConfig.java:204)
    at oracle.sysman.emcp.EMReposConfig.invoke(EMReposConfig.java:158)
    at oracle.sysman.emcp.EMConfig.perform(EMConfig.java:253)
    at oracle.sysman.emcp.EMConfigAssistant.invokeEMCA(EMConfigAssistant.java:590)
    at oracle.sysman.emcp.EMConfigAssistant.performConfiguration(EMConfigAssistant.java:1453)
    at oracle.sysman.emcp.EMConfigAssistant.statusMain(EMConfigAssistant.java:574)
    at oracle.sysman.emcp.EMConfigAssistant.main(EMConfigAssistant.java:522)
15.02.2017 10:58:33 oracle.sysman.emcp.EMConfig restoreOuiLoc
CONFIG: Restoring oracle.installer.oui_loc to C:\app\...\product\11.2.0\dbhome_1\oui
Подскажите, в чем может быть дело?

Добавлено через 2 часа 5 минут
Сейчас проблема даже не в пересоздании репозитория, а в том, что не проходит tnsping к инстансу БД.

listener.ora (причем первый прослушиватель отключен,я работаю со вторым):
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    )
  )
 
LISTENER_ORA =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.105)(PORT = 1521))
    )
  )

tnsnames.ora:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  
LISTENER_ORA =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.105)(PORT = 1521))
 
 
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl.168.1.105)
    )
  )

sqlnet.ora:

PowerShell
1
2
3
SQLNET.AUTHENTICATION_SERVICES= (NTS)
 
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

tnsping orcl выдает ошибку:

PowerShell
1
TNS-12541: TNS:нет прослушивателя

При этом ссылается на файл параметров sqlnet.ora.
Вопрос: как конвертировать последовательность (строки) данных (1) в XML и (2) потом в таблицу?

как конвертировать последовательность (строки) данных одной колонны (1) в XML и (2) потом этот XML (value из нодов) в таблицу? например
@declare @tbl table(PowerShell nvarchar(255))
insert into @tbl exec xp_cmdshell 'some PowerShell code'
возвращает поледовательный output:
+ <catalog>
<book id="s15">

PowerShell
<catalog>
<book id="s15">
<title>
XML Programming Guide
</title>
<genre>
IT
</genre>
</book>
<book id="d24">
<title>
SQL Coding
</title>
<genre>
DataBases
</genre>
</book>
<book id="f07">
<title>
Visual Studio 2015
</title>
<genre>
Microsoft
</genre>
</book>
</catalog>
или
+ select PowerShell from (values
('<catalog>'),

select PowerShell from (values
('<catalog>'),
('<book id="s15">'),
('<title>'),
('XML Programming Guide'),
('</title>'),
('<genre>'),
('IT'),
('</genre>'),
('</book>'),
('<book id="d24">'),
('<title>'),
('SQL Coding'),
('</title>'),
('<genre>'),
('DataBases'),
('</genre>'),
('</book>'),
('<book id="f07">'),
('<title>'),
('Visual Studio 2015'),
('</title>'),
('<genre>'),
('Microsoft'),
('</genre>'),
('</book>'),
('</catalog>'))cmd(PowerShell)
соответственно хотелось-бы получить на выходе таблицу
idbookgenre
s15XML Programming GuideIT
d24SQL CodingDataBases
f07Visual Studio 2015Microsoft
Ответ: invm,

Спасибо огромущее - работает как нужно, а то я начал сначала в одну ячейку сливать а потом уже на ноды бить через
+ SELECT Stuff((SELECT' '+PowerShell from(values..
)cmd(PowerShell)FOR XML PATH(''),TYPE).value('text()...
SELECT Stuff((SELECT'  '+PowerShell from(values
('<catalog>'),
('<book id="s15">'),
('<title>'),
('XML Programming Guide'),
('</title>'),
('<genre>'),
('IT'),
('</genre>'),
('</book>'),
('<book id="d24">'),
('<title>'),
('SQL Coding'),
('</title>'),
('<genre>'),
('DataBases'),
('</genre>'),
('</book>'),
('<book id="f07">'),
('<title>'),
('Visual Studio 2015'),
('</title>'),
('<genre>'),
('Microsoft'),
('</genre>'),
('</book>'),
('</catalog>'))cmd(PowerShell)FOR XML PATH(''),TYPE).value('text()[1]','nvarchar(max)'),1,2,null)


aleks2,

ну может быть, именно по этому и спрашиваю
Вопрос: http запрос через T-SQL

Добрый день
На стороне 1С поднят web-сервис, на PowerShell регулярно выполняются http запросы, и результаты выгружаются в JSON-файлы.

Пример PowerShell запроса:
+
$username = "login"
$password = "password" | ConvertTo-SecureString -asPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username,$password)

$ИБ1 = 'http://10.1.40.61/1C_Bases/hs/getting/login/password/'
$Запросы =
[string]::Concat('ВЫБРАТЬ  ...')

foreach ( in $Запросы)
{
    $Запрос = $ИБ1 + 
	$file =  'C:\1C.json'
	$a = Invoke-RestMethod $Запрос -Credential $cred -OutFile $file -TimeoutSec 600
}


Возникла идея, может возможно отправлять запросы с SQL Server, а результаты выгружать в его таблицы
Нашел в интернете процедуру:
+
CREATE procedure [dbo].[HTTP_Request] ( @sUrl varchar(200))
As
Declare
@obj int
,@hr int
,@msg varchar(255)

 exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
if @hr <> 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp.3.0
failed', 16,1) return end

exec @hr = sp_OAMethod @obj, 'open', NULL, 'GET', @sUrl, false
if @hr <>0 begin set @msg = 'sp_OAMethod Open failed' goto eh end

exec @hr = sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Type',
'application/x-www-form-urlencoded'
if @hr <>0 begin set @msg = 'sp_OAMethod setRequestHeader failed' goto
eh end

exec @hr = sp_OAMethod @obj, send, NULL, ''
if @hr <>0 begin set @msg = 'sp_OAMethod Send failed' goto eh end

 exec @hr = sp_OADestroy @obj
return
eh:
exec @hr = sp_OADestroy @obj
Raiserror(@msg, 16, 1)
return
GO


Для выполнения необходима авторизация сервера 1С
Как правильно выполнить эту процедуру с моим запросом, чтобы получить результат выгрузки?
Для примера вписал в @sUrl запрос в методе PowerShell Invoke-RestMethod, чтобы показать всю структуру запроса:

+
USE [AnalysisCRM]
GO

DECLARE    @return_value int

EXEC    @return_value = [dbo].[HTTP_Request]
    @sUrl = N'Invoke-RestMethod http://10.1.40.61/1C_Bases/hs/getting/login/password/ВЫБРАТЬ ... ГДЕ Период >=
 ДАТАВРЕМЯ(2016,08,01) И Период <= ДАТАВРЕМЯ(2016,08,03) -Credential New-Object
 System.Management.Automation.PSCredential(login,password)  -TimeoutSec 600'

SELECT  'Return Value' = @return_value
GO


Буду благодарен за подсказку
Ответ: В задаче пошел немного другим путем
Запрос к веб-серверу оставил на PowerShell, но запускать выполнение настроил с SQL Server, и результат запросов вместо JSON отправляю во временную таблицу, с которой через OPENJSON (появился в SQL SERVER 2016) парсится в постоянную таблицу

Не удалось все решить только на уровне T-SQL, но в принципе не проблема поместить PS1 скрипт в папку на сервере

Если кому-то понадобится

Скрипт на PowerShell
$username = "user"
$password = "password" | ConvertTo-SecureString -asPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username,$password)

$link = 'http://10.1.40.61/1C_Bases/hs/getting/user/password/'

$ЗапросСтатьи = 'Выбрать Ссылка КАК Статья  Из Справочник.Статьи'
$ЗапросСтатьи = $link + $ЗапросСтатьи
  $a = Invoke-RestMethod $ЗапросСтатьи -Credential $cred -TimeoutSec 600 

 Clear-Host
$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=SQL; User ID=analuseryst; Password=password; Initial Catalog=Data; Integrated Security=SSPI")
$conn.Open()

$cmd = $conn.CreateCommand()
$cmd.CommandText ="INSERT INTO [dbo].[temp_1C_request] ([JSON_string],[mark]) VALUES ('"+ $a +"','Статьи')"
$cmd.ExecuteNonQuery()
$conn.Close()



Вот запрос на T-SQL

 -- Запускаю выполнение командлета
EXEC xp_cmdshell 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File "C:\PowerShellScript.ps1" -ExecutionPolicy Unrestricted'
GO
 -- Заполнение таблицы Статьи

 DECLARE @JStringsStat nvarchar(MAX)
 SET @JStringsStat =(SELECT [JSON_string] FROM [Data].[dbo].[temp_1C_request] WHERE [mark] = 'Статьи')
 SET @JStringsStat = STUFF(@JStringsStat ,1,1,'') -- в моей строке  вначале не нужный "?"

 TRUNCATE TABLE [Data].[dbo].[Статьи]
 INSERT INTO [Data].[dbo].[Статьи] ([Код],[Статья])
 SELECT код,статья
 FROM OPENJSON (@JStringsStatDDS, '$.value')
 WITH (
        код nvarchar(20), 
        статья nvarchar(100)
 )
Вопрос: Поломалась репликация.

Всем привет.
Поломалась по каким то причинам репликация.

psql -U postgres
psql: FATAL:  the database system is starting up


2015-06-11 11:50:36.146 MSK,,,22572,,55793c40.582c,84,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""
2015-06-11 11:50:41.151 MSK,,,22572,,55793c40.582c,85,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""
2015-06-11 11:50:46.156 MSK,,,22572,,55793c40.582c,86,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""
2015-06-11 11:50:51.165 MSK,,,22572,,55793c40.582c,87,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""
2015-06-11 11:50:51.166 MSK,,,23240,,55793ddb.5ac8,1,,2015-06-11 11:50:51 MSK,,0,FATAL,57P01,"terminating walreceiver process due to administrator command",,,,,,,,,""
2015-06-11 11:50:56.270 MSK,,,22572,,55793c40.582c,88,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""


Помогите восстановить.
Ответ:
carter123
Всем привет.
Поломалась по каким то причинам репликация.

psql -U postgres
psql: FATAL:  the database system is starting up


2015-06-11 11:50:36.146 MSK,,,22572,,55793c40.582c,84,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""
2015-06-11 11:50:41.151 MSK,,,22572,,55793c40.582c,85,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""
2015-06-11 11:50:46.156 MSK,,,22572,,55793c40.582c,86,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""
2015-06-11 11:50:51.165 MSK,,,22572,,55793c40.582c,87,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""
2015-06-11 11:50:51.166 MSK,,,23240,,55793ddb.5ac8,1,,2015-06-11 11:50:51 MSK,,0,FATAL,57P01,"terminating walreceiver process due to administrator command",,,,,,,,,""
2015-06-11 11:50:56.270 MSK,,,22572,,55793c40.582c,88,,2015-06-11 11:44:00 MSK,,0,LOG,00000,"invalid record length at 17/8707C0C0",,,,,,,,,""


Помогите восстановить.


по виду сообщения она у вас работает.
Вероятнее всего вы hot_standby = on забыли в конфиге реплики написать.
В логе то что вы привели - не выглядит фатальным хотя "terminating walreceiver process due to administrator command" - достаточно странно.
Для полного диагноза явно не хватает информации.

--
Maxim Boguk
Вопрос: Объединение select c разных серверов

Добрый день.

Есть задача: с достаточно большого количества(порядка 120) серверов, необходимо сделать некий select sum и баз данных mysql и затем просуммировать полученные результаты. Пока, что я честно говоря немного приуныл, потому что ни на шаг не придвинулся к решению. Самый первый вариант был powershell мне в помощь. Подскажите, возможно ли это вообще, и если да то натолкните на решение?
Ответ: Решил самостоятельно c powershell, вдруг кому будет понадобится:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Function Run-MySQLQuery {
    Param(
        [Parameter(
            Mandatory = $true,
            ParameterSetName = '',
            ValueFromPipeline = $true)]
            [string]$query,
        [Parameter(
            Mandatory = $true,
            ParameterSetName = '',
            ValueFromPipeline = $true)]
            [string]$connectionString
        )
    Begin {
        Write-Verbose "Starting Begin Section"
    }
    Process {
        Write-Verbose "Starting Process Section"
        try {
            # Создаем коннект к базе
            Write-Verbose "Create Database Connection"
            # Можно так же использовать прямое обращение к dll 
#$mySQLDataDLL="C:\scripts\mysql\MySQL.Data.dll" 
    
#[void][system.reflection.Assembly]::LoadFrom($mySQLDataDLL)
            [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
            $connection = New-Object MySql.Data.MySqlClient.MySqlConnection
            $connection.ConnectionString = $ConnectionString
            Write-Verbose "Open Database Connection"
            $connection.Open()
 
            #  Выполнение SQL запросов
            Write-Verbose "Run MySQL Querys"
            $command = New-Object MySql.Data.MySqlClient.MySqlCommand($query, $connection)
            $dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)
            $dataSet = New-Object System.Data.DataSet
            $recordCount = $dataAdapter.Fill($dataSet, "data")
            $dataSet.Tables["data"] | Format-Table -HideTableHeaders
        }
        catch {
            Write-Host "Could not run MySQL Query" $Error[0]
        }
        Finally {
            Write-Verbose "Close Connection"
            $connection.Close()
        }
    }
    End {
        Write-Verbose "Starting End Section"
    }
}
 
 
 
 
$poss = "localhost1",  "localhost2",
 
 
ForEach ($pos in $poss)
{
$SrcServer = "Server=$pos;Uid=root;Pwd=pass;database=test;CharSet=utf8"
$SQLQuery = "SELECT *;
"
$res = run-MySQLQuery -ConnectionString $SrcServer -Query $SQLQuery | Out-String
 
$DestServer = "Server=localhost;Uid=root;Pwd=pass;database=report;CharSet=utf8"
$SQLInsert = "INSERT INTO report.test (name, amount) values ('$pos', '$res')" 
 
run-MySQLQuery -ConnectionString $DestServer -Query $SQLInsert
}