jueves, 9 de octubre de 2008

Ver los querys que se estan ejecutando en tu BD

SELECT dest.text
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

Con esto podras ver que es lo que tus clientes estan ejecutando en tu BD.

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

Contenido de la Acer Aspire One
















Habilitar CLR en SQL Server 2005

sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO

lunes, 19 de mayo de 2008

Indispensable para el desarrollo de WebServices

Esta herramienta "SoapUI" te facilita el testing de tus web services, checala =)

lunes, 14 de abril de 2008

El tipo de proyecto no es compatible con esta instalación.

Si te sale en siguiente mensaje al abrir un proyecto web en Visual Studio 2005:

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

USE MiBaseDeDatos
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

TSQL desde linea de comandos con SqlCmd

sqlcmd -Q"select * from TABLA"

Para la ayuda:
sqlcmd -?

viernes, 11 de abril de 2008

Parametro tipo Tabla en SQL Server 2008

USE AdventureWorks;
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

CREATE AUDIT SERVER PACKAGE MiPaquete
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

Fotos de mi Watch m800i recien importado







Cursor dinamico en Oracle

declare
   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

DECLARE @sql nvarchar(4000)
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

Para hacerlo debes instalar: ActiveSync Remote Display

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;
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

Que Tarjeta de Credito te conviene

Checa en este link que Tarjeta de Credito te conviene:

Condusef

Excelente blog para desarrolladores .NET

Aquí les paso un excelente blog siempre con ejemplos de lo mas nuevo que hay

Matt Bersenth

Realmente cosas muy interesantes =)

lunes, 24 de marzo de 2008

Control CreateUserWizard sin caracteres no alfanumericos

El control por default pone por lo menos un caractér alfanumérico en la contraseña como por ejemplo el @

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

Si eres DBA o desarrollas sistemas con diferentes bases de datos y estas cansado de tener varios programas abiertos al mismo tiempo para ejecutar tus consultas, checa esta herramienta:

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

PRINT 'Hoy es ' + DATENAME(WEEKDAY, GETDATE())

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

Esto se logra definiento el tamaño con la propiedad "PageSize" del DataPager, ejemplo:

<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

public string EnviaMail(string from, string to, string cc, string bcc, string subject, string body)
{
 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

Excelente tutorial para configurar el acceso a Internet con TELCEL desde tu Celular, SmartPhone, PDA, etc.

Instanciar una SPList de Sharepoint con C#

internal static SPList GetListInstance()
{
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

EXEC master.dbo.sp_addlinkedserver
@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

USE NOMBRE_DE_LA_BD
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

USE [master]
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

--Tablas de la 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