jueves, 9 de octubre de 2008
Ver los querys que se estan ejecutando en tu BD
FROM sys.dm_exec_requests dmr
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest
WHERE dmr.database_id IN (SELECT sd.dbid FROM sysdatabases sd WHERE sd.name = 'NOMBRE_DE_TU_BD')
Saber que estan ejecutando tus usuarios
Primero debes determinar el(los) spid de tu usuario:
SELECT spid FROM master..sysprocesses WHERE loginame = 'dummy'
Una vez que detectamos todas conecciones del developer jr ejecutamos los siguiente:
SELECT dest.text
FROM sys.dm_exec_requests dmr
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest
WHERE dmr.session_id in (SELECT spid FROM master..sysprocesses WHERE loginame = 'dummy')
Listo ahora ya podemos saber que es lo que estan haciendo nuestros usuarios y podemos darles sugerencias de como eficientar sus consultas para que no afecten el performance de nuestro DbServer
=)
viernes, 3 de octubre de 2008
Habilitar CLR en SQL Server 2005
GO
RECONFIGURE
GO
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO
lunes, 19 de mayo de 2008
Indispensable para el desarrollo de WebServices
lunes, 14 de abril de 2008
El tipo de proyecto no es compatible con esta instalación.
Español:
No se puede abrir el archivo de proyecto 'archivo.csproj'.
El tipo de proyecto no es compatible con esta instalación.
English:
The project file 'file.csproj' cannot be opened.
The project type is not supported by this installation.
El problema se debe a que el proyecto fué creado con Visual Studio 2005 Service Pack 1, y tú no lo tienes instalado.
Simular DESC TABLE de Oracle en SQL Server
GO
SELECT T1.NAME AS [Tabla], T2.NAME AS [Campo], T3.NAME AS [Tipo], T3.LENGTH AS [Tamaño]
FROM SYS.OBJECTS AS T1
INNER JOIN SYS.COLUMNS AS T2 ON T1.OBJECT_ID = T2.OBJECT_ID
INNER JOIN SYS.SYSTYPES AS T3 ON T2.USER_TYPE_ID = T3.XUSERTYPE
WHERE T1.TYPE ='U'
ORDER BY T1.NAME
viernes, 11 de abril de 2008
Parametro tipo Tabla en SQL Server 2008
GO
CREATE TYPE TipoTabla AS TABLE
(Nombre VARCHAR(50), Costo INT);
GO
CREATE PROCEDURE InsertaAreasDeProduccion
@ParametroTabla TipoTabla READONLY
AS
SET NOCOUNT ON
INSERT INTO [AdventureWorks].[Production].[Location]
([Name], [CostRate], [Availability], [ModifiedDate])
SELECT *, 0, GETDATE()
FROM @ParametroTabla;
GO
DECLARE @TablaLocation AS TipoTabla;
INSERT INTO @TablaLocation (Nombre, Costo)
SELECT [Name], 0.00
FROM [AdventureWorks].[Person].[StateProvince];
EXEC InsertaAreasDeProduccion @TablaLocation;
GO
jueves, 10 de abril de 2008
Como auditar con seguridad en SQL Server 2008
WITH SINK = MyWindowsSecurityLog
STATE = STARTED
ADD AUDIT GROUP SYS_FAILED_LOGIN,
ADD AUDIT GROUP SYS_DATABASE_OBJECT_MANAGEMENT
ON MiBaseDeDatos
ALTER AUDIT SERVER PACKAGE MiPaquete
ADD SINK = LocalFileSystemLogSink
Cursor dinamico en Oracle
TYPE tipoCursor IS REF CURSOR;
cursorDinamico tipoCursor;
tableName varchar(100) := 'ESQUEMA.TABLA';
campo1 varchar(200);
campo2 varchar(200);
begin
open cursorDinamico for
'SELECT campo1, campo2 FROM ' || tableName;
loop
fetch cursorDinamico into campo1, campo2;
exit when cursorDinamico%NOTFOUND;
dbms_output.put_line(campo1);
end loop;
close cursorDinamico;
end;
miércoles, 9 de abril de 2008
Limpiar el LOG de transacciones de tus BD
SET @sql = '
IF ''?'' NOT IN (''tempdb'',''master'',''model'',''msdb'')
BEGIN
PRINT ''SHRINK LOG FILES FOR ?''
USE [?]
DECLARE @tsql nvarchar(4000) SET @tsql = ''''
DECLARE @LogFileId int
DECLARE LogFiles CURSOR FOR
SELECT fileid FROM sysfiles WHERE status & 0x40 = 0x40
OPEN LogFiles
FETCH next FROM LogFiles INTO @LogFileId
WHILE @@fetch_status = 0
BEGIN
SET @tsql = @tsql + ''DBCC SHRINKFILE('' + cast(@LogFileId AS varchar(5)) + '', 1)'' + CHAR(13) + CHAR(10)
FETCH next FROM LogFiles INTO @LogFileId
END
CLOSE LogFiles
DEALLOCATE LogFiles
SET @tsql = @tsql + ''BACKUP LOG [?] WITH TRUNCATE_ONLY'' + CHAR(13) + CHAR(10) + @tsql
EXEC(@tsql)
END'
EXEC sp_msforeachdb @sql
lunes, 7 de abril de 2008
Controlar tu PDA desde la PC
Si tu PDA tiene Windows Mobile 6, entonces debes ir a C:\Program Files\Windows Mobile Developer Power Toys\ActiveSync_Remote_Display\devices\wce400\armv4t
y copias a la carpeta \Windows de tu dispositivo los archivos:
cerdisp2.exe
KillProc.exe
Te marcara "The OS or CPU of this device is unknown to this application", dale en OK y en tu PDA le dices que si ejecute la aplicación y listo ya puedes controlar remotamente tu PDA =)
Otra opción es descargar este programa: My Mobiler
jueves, 27 de marzo de 2008
Convertir Número a Letra en .NET
using System.Collections.Generic;
using System.Text;
namespace SfControls.MoneyFunctions
{
class MoneyFunctions
{
public string toString(string stringNumber)
{
string stringDecimals = "";
Int64 intNumber;
int decimals;
double number;
try
{
number = Convert.ToDouble(stringNumber);
}
catch
{
return "";
}
intNumber = Convert.ToInt64(Math.Truncate(number));
decimals = Convert.ToInt32(Math.Round((number - intNumber) * 100, 2));
if (decimals > 0)
{
stringDecimals = " CON " + decimals.ToString() + "/100";
}
return toText(Convert.ToDouble(intNumber)) + stringDecimals;
}
private string toText(double value)
{
string result = "";
value = Math.Truncate(value);
if (value == 0) result = "CERO";
else if (value == 1) result = "UNO";
else if (value == 2) result = "DOS";
else if (value == 3) result = "TRES";
else if (value == 4) result = "CUATRO";
else if (value == 5) result = "CINCO";
else if (value == 6) result = "SEIS";
else if (value == 7) result = "SIETE";
else if (value == 8) result = "OCHO";
else if (value == 9) result = "NUEVE";
else if (value == 10) result = "DIEZ";
else if (value == 11) result = "ONCE";
else if (value == 12) result = "DOCE";
else if (value == 13) result = "TRECE";
else if (value == 14) result = "CATORCE";
else if (value == 15) result = "QUINCE";
else if (value < 20) result = "DIECI" + toText(value - 10);
else if (value == 20) result = "VEINTE";
else if (value < 30) result = "VEINTI" + toText(value - 20);
else if (value == 30) result = "TREINTA";
else if (value == 40) result = "CUARENTA";
else if (value == 50) result = "CINCUENTA";
else if (value == 60) result = "SESENTA";
else if (value == 70) result = "SETENTA";
else if (value == 80) result = "OCHENTA";
else if (value == 90) result = "NOVENTA";
else if (value < 100) result = toText(Math.Truncate(value / 10) * 10) + " Y " + toText(value % 10);
else if (value == 100) result = "CIEN";
else if (value < 200) result = "CIENTO " + toText(value - 100);
else if ((value == 200) || (value == 300) || (value == 400) || (value == 600) || (value == 800)) result = toText(Math.Truncate(value / 100)) + "CIENTOS";
else if (value == 500) result = "QUINIENTOS";
else if (value == 700) result = "SETECIENTOS";
else if (value == 900) result = "NOVECIENTOS";
else if (value < 1000) result = toText(Math.Truncate(value / 100) * 100) + " " + toText(value % 100);
else if (value == 1000) result = "MIL";
else if (value < 2000) result = "MIL " + toText(value % 1000);
else if (value < 1000000)
{
result = toText(Math.Truncate(value / 1000)) + " MIL";
if ((value % 1000) > 0) result = result + " " + toText(value % 1000);
}
else if (value == 1000000) result = "UN MILLON";
else if (value < 2000000) result = "UN MILLON " + toText(value % 1000000);
else if (value < 1000000000000)
{
result = toText(Math.Truncate(value / 1000000)) + " MILLONES ";
if ((value - Math.Truncate(value / 1000000) * 1000000) > 0) result = result + " " + toText(value - Math.Truncate(value / 1000000) * 1000000);
}
else if (value == 1000000000000) result = "UN BILLON";
else if (value < 2000000000000) result = "UN BILLON " + toText(value - Math.Truncate(value / 1000000000000) * 1000000000000);
else
{
result = toText(Math.Truncate(value / 1000000000000)) + " BILLONES";
if ((value - Math.Truncate(value / 1000000000000) * 1000000000000) > 0) result = result + " " + toText(value - Math.Truncate(value / 1000000000000) * 1000000000000);
}
return result;
}
}
}
martes, 25 de marzo de 2008
Excelente blog para desarrolladores .NET
Matt Bersenth
Realmente cosas muy interesantes =)
lunes, 24 de marzo de 2008
Control CreateUserWizard sin caracteres no alfanumericos
Esto es recomendable para aumentar la seguridad del sitio; sin embargo, mientras se esta en desarrollo lo podemos omitir.
Para lograrlo hay que poner en nuestro provider string del membership (en el web.config) la siguiente propiedad:
<providers>
<remove name="SqlMembershipProvider"/>
<add name="SqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="Membership" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" />
</providers>
Herramienta para todo DBA
Aqua Data Studio
Realmente muy buena, se las recomiendo =)
viernes, 21 de marzo de 2008
Obtener el nombre del día actual en SQL Server
GO
SELECT DATENAME(WEEKDAY, GETDATE()) AS [Hoy es]
jueves, 20 de marzo de 2008
Definir numero de registros a mostrar en un ListView de ASP.NET 3.5
<asp:ListView ID="ListView1" runat="server" >
<LayoutTemplate>
<asp:DataPager ID="DataPager1" runat="server" PageSize="28">
<Fields>
<asp:NumericPagerField ButtonCount="10" />
</Fields>
</asp:DataPager>
</LayoutTemplate>
</asp:ListView>
miércoles, 19 de marzo de 2008
Metodo para enviar correo desde .NET
{
try
{
string host = System.Configuration.ConfigurationManager.AppSettings["Host"];
string usuario = System.Configuration.ConfigurationManager.AppSettings["Usuario"];
string password = System.Configuration.ConfigurationManager.AppSettings["Password"];
if (string.IsNullOrEmpty(body))
body = subject;
using (System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(from, to, subject, body))
{
string[] addresses;
if (!string.IsNullOrEmpty(to))
{
addresses = to.Split(';');
for (int con = 0; con < addresses.Length; con++)
message.CC.Add(addresses[con]);
}
if (!string.IsNullOrEmpty(cc))
{
addresses = cc.Split(';');
for (int con = 0; con < addresses.Length; con++)
message.CC.Add(addresses[con]);
}
if (!string.IsNullOrEmpty(bcc))
{
addresses = bcc.Split(';');
for (int con = 0; con < addresses.Length; con++)
message.Bcc.Add(addresses[con]);
}
message.IsBodyHtml = true;
System.Net.Mail.SmtpClient mail = new System.Net.Mail.SmtpClient(host);
if (!string.IsNullOrEmpty(usuario))
mail.Credentials = new System.Net.NetworkCredential(usuario, password);
mail.Send(message);
}
return "Mensaje enviado correctamente";
}
catch (System.Net.Mail.SmtpException ex)
{
return ex.Message;
}
}
martes, 18 de marzo de 2008
Configura gratis el acceso a Internet con TELCEL desde tu Celular
Instanciar una SPList de Sharepoint con C#
{
foreach (SPList list in SPContext.Current.Web.Lists)
{
if (0 == StringComparer.InvariantCultureIgnoreCase.Compare("Calendar", list.Title))
return list;
}
try
{
SPContext.Current.Web.AllowUnsafeUpdates = true;
Guid listId = SPContext.Current.Web.Lists.Add("Calendar", null, SPListTemplateType.Events);
return SPContext.Current.Web.Lists[listId];
}
finally
{
SPContext.Current.Web.AllowUnsafeUpdates = false;
}
}
viernes, 14 de marzo de 2008
Crear un Servidor Linkeado
@server='NOMBRE_QUE_LE_PONDREMOS_AL_LINKEDSERVER'
, @srvproduct=''
, @provider='SQLNCLI'
, @datasrc='IP_O_NOMBRE_DEL_SERVIDOR'
, @catalog=N'NOMBRE_DE_LA_BASE_DE_DATOS'
GO
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'NOMBRE_DE_NUESTRO_LINKEDSERVER'
, @locallogin = NULL
, @useself = N'False'
, @rmtuser = N'NOMBRE_DE_USUARIO'
, @rmtpassword = N'CONTRASEÑA'
jueves, 13 de marzo de 2008
Comandos recomendados despues de Migrar una BD SQLServer 2000 a 2005
GO
DBCC UPDATEUSAGE ('NOMBRE_DE_LA_BD')
GO
EXEC sp_updatestats
GO
DBCC CHECKDB
martes, 11 de marzo de 2008
Cambiar ruta por defecto de las BD en SQL Server
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', REG_SZ, N'D:\NUEVA RUTA\DATA'
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'E:\NUEVA RUTA\LOG'
Desconectar todos los usuarios de una BD en SQL Server
USE master
DECLARE curkillproc
CURSOR FOR
SELECT spid,dbs.name AS dbname
FROM master..sysprocesses pro, master..sysdatabases dbs
WHERE pro.dbid = dbs.dbid
AND dbs.name = 'NOMBRE DE LA BD'
FOR READ ONLY
DECLARE @varspid AS integer
DECLARE @vardbname AS varchar(256)
DECLARE @numUsers AS integer
SET @numUsers = 0
OPEN curkillproc
FETCH NEXT FROM curkillproc
INTO @varspid, @vardbname
WHILE @@fetch_status = 0
BEGIN
EXEC('kill ' + @varspid)
SET @numUsers = @numUsers + 1
FETCH NEXT FROM curkillproc INTO @varspid, @vardbname
END
CLOSE curkillproc
DEALLOCATE curkillproc
SELECT @numUsers as NumUsersDisconnected
Ejemplo de Trigger en Oracle con PL/SQL
CREATE OR REPLACE TRIGGER NOMBRE_DEL_TRIGGER
AFTER INSERT OR UPDATE OR DELETE ON ESQUEMA.NOMBRE_DE_LA_TABLA
FOR EACH ROW
BEGIN
IF UPPER(SYS_CONTEXT('USERENV','CURRENT_USER')) <> 'USUARIO DE MANTENIMIENTO' THEN
IF INSERTING THEN
...
END IF;
IF UPDATING THEN
...
END IF;
IF DELETING THEN
...
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN NULL;
END NOMBRE_DEL_TRIGGER;
Monitoreo de Mail DataBase
select * from msdb.dbo.sysmail_profile;
select * from msdb.dbo.sysmail_account;
select * from msdb.dbo.sysmail_allitems;
select * from msdb.dbo.sysmail_event_log;
select * from msdb.dbo.sysmail_faileditems;
select * from msdb.dbo.sysmail_mailattachments;
select * from msdb.dbo.sysmail_sentitems;
select * from msdb.dbo.sysmail_unsentitems;
--Borrar todos los mails enviados hasta el momento
DECLARE @fecha datetime
SET @fecha = getdate()
EXEC msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @fecha
--Limpiar el archivo de registro
EXEC msdb.dbo.SYSMAIL_DELETE_LOG_SP