Lo hace mediante el linked server 'servidor2'.
EXEC servidor2.msdb.dbo.sp_start_job @job_name = N'PRUEBA_ISA';
1.- Creamos un job de prueba en el servidor1.
2.- Creamos un login con rol de administrador en servidor1
3.- Creamos un linked server en servidor2. con el usuario que creamos anteriormente
4.- Ejecutamos:
EXEC servidor2.msdb.dbo.sp_start_job @job_name = N'PRUEBA_ISA';
Buscar este blog
miércoles, 30 de septiembre de 2015
miércoles, 16 de septiembre de 2015
TEMPDB - Servicios SQL Server
En una ocasión se tuvo que rearmar un servidor. Este tenia un SQL Server 2008 R2 SP2, sus particiones, discos; D:/ datos, L:/ Logs, T:/ tempdb y C:/ el sistema operativo y bases master, msdb y model.
El plan consistía en actualizar las LUNs y HHDs, para esto había que eliminar las Luns volverlas a crear eliminar las particiones de discos D,L,T y volverlar a armar, y renombrar los discos con las letras M, N y H. Dejando solo la unidad C sin tocar.
Cuando el área de infraestructura termino el trabajo, me tocaba renonbrar el SQL y configurar nuevamente la tempdb y restorear algunas bases de datos en esta instancia.
Problema:
Cuando quise levantar el servicio de SQL. me salia este error.
Esto sucedía porque no encontraba los archivos de la tempdb del disco T. Esto me di cuenta al momento de mirar el logs de windows, indicaba que no encontraba la ruta.
La solución fue:
Renombrar H por T. y crear los archivos tempdev.mdf y templog a mano.
después de esto levanto el Servicio de SQL, levantado el servicio los otros pasos
fueron fáciles de realizar.
El plan consistía en actualizar las LUNs y HHDs, para esto había que eliminar las Luns volverlas a crear eliminar las particiones de discos D,L,T y volverlar a armar, y renombrar los discos con las letras M, N y H. Dejando solo la unidad C sin tocar.
Cuando el área de infraestructura termino el trabajo, me tocaba renonbrar el SQL y configurar nuevamente la tempdb y restorear algunas bases de datos en esta instancia.
Problema:
Cuando quise levantar el servicio de SQL. me salia este error.
Esto sucedía porque no encontraba los archivos de la tempdb del disco T. Esto me di cuenta al momento de mirar el logs de windows, indicaba que no encontraba la ruta.
La solución fue:
Renombrar H por T. y crear los archivos tempdev.mdf y templog a mano.
después de esto levanto el Servicio de SQL, levantado el servicio los otros pasos
fueron fáciles de realizar.
viernes, 11 de septiembre de 2015
SINONIMOS - SQL Server 2008
Se pueden crear sinónimos
para los siguientes tipos de objetos:
Procedimiento almacenado
del ensamblado (CLR)
|
Función con valores de
tabla del ensamblado (CLR)
|
Función escalar del
ensamblado (CLR)
|
Funciones de agregado
del ensamblado (CLR)
|
Procedimiento de filtro
de replicación
|
Procedimiento almacenado
extendido
|
Función escalar de SQL
|
Función SQL con valores
de tabla
|
Función SQL con valores
de tabla insertados
|
Procedimiento almacenado
de SQL
|
Vista
|
Tabla1 (definida
por el usuario)
|
1 Incluye tablas
temporales locales y globales
Biografia: https://msdn.microsoft.com/es-es/library/ms177544(v=sql.100).aspx
QUERY PLAN - Plan de ejecución
Los planes de ejecución se guardan en memoria, a medida que se van ejecutando los SPs, consultas, etc. estos se acumulan en memoria para ser reutilizados. Por ejemplo un SP que tiene un parámetro variable de X = 57, X = 98 y X=107
Select * from tabla
where X =?
El valor X va cambiar 3 veces, estas ejecuciones se guardaran en cache para su reutilización.
Cuando se libera un plan de ejecución?. Esto depende de la saturación de la memoria, cuando esto sucede se satura la memoria; el SQL elige los planes de ejecución con la cuota igual a cero para eliminarlos.
Supongamos que tenemos planes de ejecución con Cuota cero pero no tenemos saturación de memoria: Estos no serán eliminados.
Select * from tabla
where X =?
El valor X va cambiar 3 veces, estas ejecuciones se guardaran en cache para su reutilización.
Cuando se libera un plan de ejecución?. Esto depende de la saturación de la memoria, cuando esto sucede se satura la memoria; el SQL elige los planes de ejecución con la cuota igual a cero para eliminarlos.
Supongamos que tenemos planes de ejecución con Cuota cero pero no tenemos saturación de memoria: Estos no serán eliminados.
viernes, 21 de agosto de 2015
JOB - Busca Job En ejecución
SQL Server 2000. Lo uso para identificar el job. teniendo el número hexadecimal.0x....
1.- Ejecuto: sp_who2 'active'--encuentra el proceso--
Salida: SQLAgent - TSQL JobStep (Job 0xEE3F000650732D4DB127DF7C7F95ED44 : Step 2)
2.- copio el numero hexadecimal
SELECT *
FROM msdb.dbo.sysjobs
WHERE job_id = CAST(0xEE3F000650732D4DB127DF7C7F95ED44 AS UNIQUEIDENTIFIER)
1.- Ejecuto: sp_who2 'active'--encuentra el proceso--
Salida: SQLAgent - TSQL JobStep (Job 0xEE3F000650732D4DB127DF7C7F95ED44 : Step 2)
2.- copio el numero hexadecimal
SELECT *
FROM msdb.dbo.sysjobs
WHERE job_id = CAST(0xEE3F000650732D4DB127DF7C7F95ED44 AS UNIQUEIDENTIFIER)
jueves, 6 de agosto de 2015
Migración Jobs SQL Server 2000 a 2005,2008,2012
Se puede hacer creando los script directamente a mano esto funciona para la version SQL 2000 a SQL 2005 para los otras versiones usar Integration Services para migrar.
miércoles, 5 de agosto de 2015
MAIL - SQL Server 2000 "xp_sendmail"
1.- Tira el siguiente error:
Message
Executed as user: OMINT\SQLServer. xp_sendmail: failed with mail error 0x80004005 [SQLSTATE 42000] (Error 18025). The step failed.
2.- Para solucionarlo ejecutar: exec master.dbo.xp_stopmail
pobar el envio de mail nuevamente
3.- Si fuera necesario levantar el envió de mail ejecutar: exec master.dbo.xp_startmail
martes, 21 de julio de 2015
DBCC INDEXDEFRAG
Se dejara de usar a partir de la V12 en adelante.
El DBCC INDEXDEFRAG es muy útil y eficiente para defragmentar los índices, lo interesante es que no mantiene bloqueos a largo plazo, y no genera bloqueos en actualizaciones (Update) y consultas (Select).
El tiempo dependerá de la ejecución del DBCC INDEXDEFRAG, del tamaño de la tabla y cuan fragmentado esta el índice. Por lo general no hay que preocuparse por esto. Si la defragmentación tarda mucho sobre un índice especifico sera mejor aplicar una reconstrucción del índice.
Si se esta trabajando con grandes volúmenes de datos y los indices presentan una fragmentacion también grande hay que tener cuidado porque los resultados pueden genera demaciada informacion en el registro log que la creacion misma de un indice.
Script de microsoft para defragmentar:
El DBCC INDEXDEFRAG es muy útil y eficiente para defragmentar los índices, lo interesante es que no mantiene bloqueos a largo plazo, y no genera bloqueos en actualizaciones (Update) y consultas (Select).
El tiempo dependerá de la ejecución del DBCC INDEXDEFRAG, del tamaño de la tabla y cuan fragmentado esta el índice. Por lo general no hay que preocuparse por esto. Si la defragmentación tarda mucho sobre un índice especifico sera mejor aplicar una reconstrucción del índice.
Si se esta trabajando con grandes volúmenes de datos y los indices presentan una fragmentacion también grande hay que tener cuidado porque los resultados pueden genera demaciada informacion en el registro log que la creacion misma de un indice.
Script de microsoft para defragmentar:
/*Perform a 'USE' to select the database in which to run the script.*/ -- Declare variables SET NOCOUNT ON; DECLARE @tablename varchar(255); DECLARE @execstr varchar(400); DECLARE @objectid int; DECLARE @indexid int; DECLARE @frag decimal; DECLARE @maxfrag decimal; -- Decide on the maximum fragmentation to allow for. SELECT @maxfrag = 30.0; -- Declare a cursor. DECLARE tables CURSOR FOR SELECT TABLE_SCHEMA + '.' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'; -- Create the table. CREATE TABLE #fraglist ( ObjectName char(255), ObjectId int, IndexName char(255), IndexId int, Lvl int, CountPages int, CountRows int, MinRecSize int, MaxRecSize int, AvgRecSize int, ForRecCount int, Extents int, ExtentSwitches int, AvgFreeBytes int, AvgPageDensity int, ScanDensity decimal, BestCount int, ActualCount int, LogicalFrag decimal, ExtentFrag decimal); -- Open the cursor. OPEN tables; -- Loop through all the tables in the database. FETCH NEXT FROM tables INTO @tablename; WHILE @@FETCH_STATUS = 0 BEGIN -- Do the showcontig of all indexes of the table INSERT INTO #fraglist EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''') WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS'); FETCH NEXT FROM tables INTO @tablename; END; -- Close and deallocate the cursor. CLOSE tables; DEALLOCATE tables; -- Declare the cursor for the list of indexes to be defragged. DECLARE indexes CURSOR FOR SELECT ObjectName, ObjectId, IndexId, LogicalFrag FROM #fraglist WHERE LogicalFrag >= @maxfrag AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0; -- Open the cursor. OPEN indexes; -- Loop through the indexes. FETCH NEXT FROM indexes INTO @tablename, @objectid, @indexid, @frag; WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ', ' + RTRIM(@indexid) + ') - fragmentation currently ' + RTRIM(CONVERT(varchar(15),@frag)) + '%'; SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ', ' + RTRIM(@indexid) + ')'; EXEC (@execstr); FETCH NEXT FROM indexes INTO @tablename, @objectid, @indexid, @frag; END; -- Close and deallocate the cursor. CLOSE indexes; DEALLOCATE indexes; -- Delete the temporary table. DROP TABLE #fraglist; GO
jueves, 16 de julio de 2015
REINDEX - Tabla de comportamientos de reindex
TABLA
DE COMPORTAMIENTOS DE REINDEX
Scenario
|
SQL Server 2008 R2
|
SQL Server 2008
|
SQL Server 2005
|
SQL Server 2000
|
DBCC
REINDEX to rebuild the Clustered Index ix_Col1
|
Update all Index Statistics
|
Update all Index Statistics
|
Update
only the Clustered Index
|
All statistics updated
|
DBCC
REINDEX in the NonClustered Index
|
Update
only the NonClustered Index
|
Update
only the NonClustered Index
|
Update
only the NonClustered Index
|
Update
only the NonClustered Index
|
DBCC
REINDEX without specify the index. That means all index must be updated
|
All statistics updated
|
All statistics updated
|
All statistics updated
|
All statistics updated
|
ALTER
INDEX REBUILD to update the Clustered Index
|
Update
only the Clustered Index
|
Update
only the Clustered Index
|
Update
only the Clustered Index
|
Not Apply
|
ALTER
INDEX REBUILD to update the NonClustered Index
|
Update
only the NonClustered Index
|
Update
only the NonClustered Index
|
Update
only the NonClustered Index
|
Not Apply
|
ALTER
INDEX ALL REBUILD to update the ALL Index
|
Update all Index Statistics
|
Update all Index Statistics
|
Update all Index Statistics
|
Not Apply
|
Monitoreo con PSSDIAG, SQLNEXUS y PerfStatsScripts
Para el servidor Pegaso
1.- instalar
PSSDIAG en C:\PSSDIAG
Revisar el
ejecutable en: C:\PSSDIAG\Pristine\pssdiag.cmd
Verificar donde
se instaló el SQLdiag: F:\Program Files\Microsoft SQL
Server\100\Tools\Binn\SQLdiag.exe
2.- Copiar SQL
Nexux y PerfStatsScript2008 en C:\temp2
SQL Nexus: Es
el editor de los reportes
PerfStatsScript2008:
es la carpeta que contiene los reportes script y xml
3.- Donde y
como ejecutar los monitoreos.
Para ejecutar
un monitoreo vamos a la carpeta PerfStatsScript2008
y modificamos el archivos: StartSQLDiagTrace2008.cmd o creamos una copia de
este y lo modificamos.
@REM To
register the collector as a service, open a command prompt, change to this
@REM directory,
and run:
@REM
@REM SQLDIAG
/R /I "%cd%\SQLDiagPerfStats_Trace.XML" /O
"%cd%\SQLDiagOutput" /P
@REM
@REM You can
then start collection by running "SQLDIAG START" from Start->Run,
and
@REM stop
collection by running "SQLDIAG STOP".
@rem the command below sets sqldiag.exe path. if your installation is different, adjust
accordinly
@rem sql 2008 sqldiag.exe will be able to capture
multiple platforms.
@rem any sqldiag will be able to detect 32 bit or 64
bit instances
set SQLDIAGCMD=F:\Program Files\Microsoft SQL
Server\100\Tools\Binn\SQLdiag.exe
"%SQLDIAGCMD%" /I "C:\Temp2\PerfStatsScript2008\SQLDiagPerfStats_Trace2008.XML"
/O "G:\SQLDiagOutput" /P
JOB - Eliminar jobs obsoletos
Eliminar o dar de Baja Jobs
Se borraron BD en des-uso, el problema es que estas bases estuvieron operativas y productivas en su momento,
y cuando se dieron de baja no se tomo en cuenta los job y usuarios que accedian a las bases desde alguna app.
El error que encontre en el log era el siguiente:
2013-05-09 10:18:03.88 Logon Error: 18456, Severity: 14, State: 38.
2013-05-09 10:18:03.88 Logon Login failed for user 'dominio\xxxxx'. Reason: Failed to open the explicitly specified database. [CLIENT: xx.xxx.xx.xx]
1.- Lo primero es ejecutar un trace con SQL Server Profiler, seleccionando los eventos: Error Log y User Error Message. y tildando en todas las columnas para un mejor análisis.
2.- Después navegar por el trace e identificar los problemas del usuario 'dominio\xxxxx', una vez identificado es bastante facil.
1.-
--sacar el database_id-- si no existe la base paso a la consulta 2
select * from sys.databases
where name = 'basededato'
2.-
--Buscar por "database_name" segun la consulta anterior
-- y sacar el job_id para ejecutar en la siguiente consulta
use msdb
go
select database_name, * from sysjobsteps
order by 1 desc
3.-
select name, job_id,* from sysjobs
where job_id = '36E88341-774B-4D26-BD63-863F53EE42BB'
Se borraron BD en des-uso, el problema es que estas bases estuvieron operativas y productivas en su momento,
y cuando se dieron de baja no se tomo en cuenta los job y usuarios que accedian a las bases desde alguna app.
El error que encontre en el log era el siguiente:
2013-05-09 10:18:03.88 Logon Error: 18456, Severity: 14, State: 38.
2013-05-09 10:18:03.88 Logon Login failed for user 'dominio\xxxxx'. Reason: Failed to open the explicitly specified database. [CLIENT: xx.xxx.xx.xx]
1.- Lo primero es ejecutar un trace con SQL Server Profiler, seleccionando los eventos: Error Log y User Error Message. y tildando en todas las columnas para un mejor análisis.
2.- Después navegar por el trace e identificar los problemas del usuario 'dominio\xxxxx', una vez identificado es bastante facil.
1.-
--sacar el database_id-- si no existe la base paso a la consulta 2
select * from sys.databases
where name = 'basededato'
2.-
--Buscar por "database_name" segun la consulta anterior
-- y sacar el job_id para ejecutar en la siguiente consulta
use msdb
go
select database_name, * from sysjobsteps
order by 1 desc
3.-
select name, job_id,* from sysjobs
where job_id = '36E88341-774B-4D26-BD63-863F53EE42BB'
lunes, 13 de julio de 2015
SUSPECT - Recuperar base de datos
/*
--modo emergencia sql server 2000--
sp_configure ‘allow’ ,1
GO
Reconfigure with override
GO
Update sysdatabases set status = 32768 where name = ‘SQLDBPool’
GO
sp_configure ‘allow’, 0
GO
Reconfigure with override
go
*/
/*
--modo emergencia sql server 2000--
sp_configure ‘allow’ ,1
GO
Reconfigure with override
GO
Update sysdatabases set status = 32768 where name = ‘SQLDBPool’
GO
sp_configure ‘allow’, 0
GO
Reconfigure with override
go
*/
/*
Caso estado de la base emergencia en suspect, Servidor:
SQL Server 2005
--Antes de seguir estos pasos es posible que reiniciando el servicio
--de SQL solucione el problema de bases: suspect.
*/
--Pongo la base en modo emergencia
use master
GO
ALTER DATABASE emergencias SET EMERGENCY
--Pongo la base en modo simple
ALTER DATABASE emergencias SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
GO
--Ejecuto el check db para reparar
datos perdidos
DBCC CHECKDB (emergencias, REPAIR_ALLOW_DATA_LOSS)
GO
--Con el resultado del dbcc checkdb identifico la tabla/vista/indice ------donde
esta el problema
--Como indentifique la tabla del problema ejecuto
--dbcc checktable, siempre en el estado modo simple user
DBCC CHECKTABLE ('EM_Visitas_Enc',
REPAIR_REBUILD)
GO
--Pongo la base modo multi user
ALTER DATABASE emergencias
SET MULTI_USER
--Ejecuto dbcc checkdb sobre toda la base
--ya no deberiamos tener errores.
use
emergencias
go
DBCC CHECKDB
lunes, 6 de julio de 2015
BACKUPS - Bases del Sistema - Device
1.- Ejecutar el Device.sql
Que genera los archivos de los device para backups de bases del sistema
Después programar Job de bakups
/*Isaac Pacheco*/
/*Devices for system databases backup*/
/*Cambiar @physicalname donde corresponde*/
/*Bases Master,Model,msdb*/
----------------------/Master/-------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'masterLMV',
@physicalname = N'D:\MSSQL2008R2\masterLMV.bak'
GO
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'masterMJS',
@physicalname = N'D:\MSSQL2008R2\masterMJS.bak'
GO
------------------------/Model/------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'modelLMV',
@physicalname = N'D:\MSSQL2008R2\modelLMV.bak'
GO
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'modelMJS',
@physicalname = N'D:\MSSQL2008R2\modelMJS.bak'
GO
------------------------msdb----------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'msdbLMV',
@physicalname = N'D:\MSSQL2008R2\msdbLMV.bak'
GO
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'msdbMJS',
@physicalname = N'D:\MSSQL2008R2\msdbMJS.bak'
GO
Que genera los archivos de los device para backups de bases del sistema
Después programar Job de bakups
/*Isaac Pacheco*/
/*Devices for system databases backup*/
/*Cambiar @physicalname donde corresponde*/
/*Bases Master,Model,msdb*/
----------------------/Master/-------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'masterLMV',
@physicalname = N'D:\MSSQL2008R2\masterLMV.bak'
GO
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'masterMJS',
@physicalname = N'D:\MSSQL2008R2\masterMJS.bak'
GO
------------------------/Model/------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'modelLMV',
@physicalname = N'D:\MSSQL2008R2\modelLMV.bak'
GO
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'modelMJS',
@physicalname = N'D:\MSSQL2008R2\modelMJS.bak'
GO
------------------------msdb----------------------------
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'msdbLMV',
@physicalname = N'D:\MSSQL2008R2\msdbLMV.bak'
GO
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'msdbMJS',
@physicalname = N'D:\MSSQL2008R2\msdbMJS.bak'
GO
martes, 29 de julio de 2014
Modificación y administración del tamaño de una base de datos
El escenario ideal en la administración de base de datos para los casos de tamaño de las bases es saber el crecimiento que pueda tener la base en función del tiempo. Este es un dato que no pueden saber las áreas de desarrollo, ni las áreas de TI, por que el negocio puede tomar un rumbo no programado.
Tenemos que administrar el tamaño. La mejor opción es setear el crecimiento de la base en 100 MB como recomienda Microsoft, lo importante es tener un estandard para todas nuestras bases.
La base de datos por defecto se crea con dos grupos de archivos (FileGroup) el PRIMARY que contiene los archivos Data, y el No applicable donde contiene los archivos Log.
Después de 3 a 6 meses, podremos saber un crecimiento aproximado, setear nuestra base de datos
para que no crezca mas de lo que deseamos seteando los parámetros en las propiedades de base de datos.
Para servidores dedicados hay escenarios en el cual no se limita el crecimiento, esto se hace por conveniencia, puede facilitar la administración de las bases de datos.
Tenemos que administrar el tamaño. La mejor opción es setear el crecimiento de la base en 100 MB como recomienda Microsoft, lo importante es tener un estandard para todas nuestras bases.
La base de datos por defecto se crea con dos grupos de archivos (FileGroup) el PRIMARY que contiene los archivos Data, y el No applicable donde contiene los archivos Log.
Después de 3 a 6 meses, podremos saber un crecimiento aproximado, setear nuestra base de datos
para que no crezca mas de lo que deseamos seteando los parámetros en las propiedades de base de datos.
Para servidores dedicados hay escenarios en el cual no se limita el crecimiento, esto se hace por conveniencia, puede facilitar la administración de las bases de datos.
sábado, 17 de mayo de 2014
Disco Quorum
Configuración del Disco Quorum importante para la creación del Cluster Server
Por qué es necesario el quórum
Los problemas de red pueden interferir en la comunicación entre los nodos de un clúster. Es posible que un grupo reducido de nodos pueda comunicarse entre sí a través de una parte en funcionamiento de la red, pero que no pueda comunicarse con un grupo de nodos diferente en otra parte de la red. Esto puede causar problemas graves. En esta situación de "división", al menos uno de los conjuntos de nodos debe dejar de ejecutarse como un clúster.
Para prevenir los problemas ocasionados por una división en el clúster, el software del clúster requiere que cualquier conjunto de nodos que se ejecute como un clúster debe usar un algoritmo de voto para determinar si, en un momento dado, ese conjunto dispone de quórum. Puesto que el clúster especificado tiene un conjunto específico de nodos y una configuración de quórum específica, el clúster sabrá la cantidad de "votos" necesaria para constituir una mayoría (es decir, quórum). Si el número cae por debajo de la mayoría, el clúster deja de funcionar. Los nodos seguirán detectando la presencia de otros nodos, en el caso de que otro nodo aparezca de nuevo en la red, pero no empezarán a funcionar como un clúster hasta que vuelva a existir quórum.
Por ejemplo, en un clúster de cinco nodos que usa una mayoría de nodos, tenga en consideración lo que ocurriría si los nodos 1, 2 y 3 pudieran comunicarse entre sí pero no con los nodos 4 y 5. Los nodos 1, 2 y 3 constituyen una mayoría y siguen ejecutándose como un clúster. Los nodos 4 y 5, al ser minoría, dejan de ejecutarse como un clúster. Si el nodo 3 pierde la comunicación con el resto de nodos, todos los nodos dejan de ejecutarse como un clúster. Sin embargo, todos los nodos en funcionamiento continuarán recibiendo comunicación, por lo que, cuando la red vuelve a funcionar, el clúster puede formarse y empezar a ejecutarse.
Biografia:
http://technet.microsoft.com/es-es/library/cc731739.aspx
Memoria SQL Server 2005
Un mínimo de 512 MB de memoria RAM para ediciones Standar y Entreprise. Para ediciones de 64 bits la recomendación es de 1 GB de RAM.
Microsoft recomienda agregar un adicional del doble de esta memoria, hay que tomar en cuenta los 256 MB que usa el S.O. Esto ayuda al desempeño.
jueves, 20 de febrero de 2014
Linked Server a ORACLE
Para realizar un Linked server desde el SQL Server 2008 R2 a Oracle 11g. debemos serguir los siguientes pasos:
1.- Instalar el cliente Oracle en el servidor SQL Server, buscar en la página de Oracle, como recomendación es mejor bajar la ultima version.
2.- Reiniciar el servidor SQL Server donde se instalo en cliente de Oracle
3.- Configurar el tns name con conexion string
Ej: tnsname con el conexión string de la base a Oracle donde vamos a crear el Linked Server
PXT11G=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=100.12.44.0)
(PORT=1234)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=PXT11G)
)
)
4.- Crear usuario en la base de Oracle
5.- Crear el linked Server
1.- Instalar el cliente Oracle en el servidor SQL Server, buscar en la página de Oracle, como recomendación es mejor bajar la ultima version.
2.- Reiniciar el servidor SQL Server donde se instalo en cliente de Oracle
3.- Configurar el tns name con conexion string
Ej: tnsname con el conexión string de la base a Oracle donde vamos a crear el Linked Server
PXT11G=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=100.12.44.0)
(PORT=1234)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=PXT11G)
)
)
4.- Crear usuario en la base de Oracle
5.- Crear el linked Server
/****** Object:
LinkedServer [PRUEBA] Script
Date: 10/01/2012 12:55:26 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'PRUEBA',
@srvproduct=N'ORACLE',
@provider=N'OraOLEDB.Oracle', @datasrc=N'PXT11G'
/* For security
reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'PRUEBA',@useself=N'False',@locallogin=NULL,@rmtuser=N'PASS',@rmtpassword='WORD'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'rpc', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'rpc out', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'PRUEBA',
@optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
lunes, 20 de mayo de 2013
Cuenta de servicios
Cuando instale un SQL Server 2000 R2 en un ambiente de desarrollo, el requeriemiento era instalar el servidor fuera del dominio.
Para eso tuve que crear doz cuentas de servicio una para el SQLService y otra para el SQLAgent.
Después de instalar todo correctamente, a los dias tuve el siguiente error:
1.- Primero no podia entrar al management Studio remotamente desde mi PC
2.- Entrando desde el servidor logeado con mi cuenta tampoco
Verificando en el SQL Server Configuration Manager todos los servicios estaban bajo.
No podia ser ya que el servicios se bajan manualmente.
El Problema
Otra área tuvo que reiniciar el servidor para tareas de mantenimiento, esto lo detecte en el ErrorLog.
Mensaje: SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.
Mensaje: Service Broker manager has shut down.
Revisando las cuentas de servicio en Computer Management/User. Estaba tildada la opción 'user must change password at next logon'
Destildando esta opción y reseteando la password se soluciono el problema.
Para eso tuve que crear doz cuentas de servicio una para el SQLService y otra para el SQLAgent.
Después de instalar todo correctamente, a los dias tuve el siguiente error:
1.- Primero no podia entrar al management Studio remotamente desde mi PC
2.- Entrando desde el servidor logeado con mi cuenta tampoco
Verificando en el SQL Server Configuration Manager todos los servicios estaban bajo.
No podia ser ya que el servicios se bajan manualmente.
El Problema
Otra área tuvo que reiniciar el servidor para tareas de mantenimiento, esto lo detecte en el ErrorLog.
Mensaje: SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.
Mensaje: Service Broker manager has shut down.
Revisando las cuentas de servicio en Computer Management/User. Estaba tildada la opción 'user must change password at next logon'
Destildando esta opción y reseteando la password se soluciono el problema.
jueves, 9 de mayo de 2013
Eliminar o dar de Baja Jobs
Se borraron BD en desuso, el problema es que estas bases estuvieron operativas y productivas en su momento,
y cuando se dieron de baja no se tomo en cuenta los job y usuarios que accedian a las bases desde alguna app.
El error que encontre en el log era el siguiente:
2013-05-09 10:18:03.88 Logon Error: 18456, Severity: 14, State: 38.
2013-05-09 10:18:03.88 Logon Login failed for user 'dominio\xxxxx'. Reason: Failed to open the explicitly specified database. [CLIENT: xx.xxx.xx.xx]
1.- Lo primero es tirar un trace con SQL Server Profiler, seleccionando los eventos: Error Log y User Error Message. y tildando en todas las columnas para un mejor análisis.
2.- Después navegar por el trace e identificar los problemas del usuario 'dominio\xxxxx', una vez identificado es bastante facil.
--identifico si la base existe si no existe, voy al siguiente paso
select * from sys.databases
where name = 'basededato'
--Identifico el job en función a la base, copio el job_id voy al siguiente paso
select * from sysjobsteps
--Idenfico el nombre del job para darlo de baja.
select * from sysjobs
where job_id = '12B8956-2889-46VB-1212-BE456PO'
Suscribirse a:
Entradas (Atom)
