Search This Blog

2010-03-25

how-to track table DDL changes on sql server 2008



IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_MetaTable_IsDeleted]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[MetaTable] DROP CONSTRAINT [DF_MetaTable_IsDeleted]
END
 
GO
 
/****** Object:  Table [dbo].[MetaTable]    Script Date: 03/25/2010 15:44:59 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MetaTable]') AND type in (N'U'))
DROP TABLE [dbo].[MetaTable]
GO
 
/****** Object:  Table [dbo].[MetaTable]    Script Date: 03/25/2010 15:44:59 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[MetaTable](
[MetaTableId] [int] IDENTITY(1,1) NOT NULL,
[DbName] [varchar](256) NOT NULL,
[SchemaName] [varchar](256) NOT NULL,
[Name] [varchar](256) NOT NULL,
[Title] [varchar](200) NULL,
[DocumentationDescription] [varchar](2000) NOT NULL,
[IsPlatform] [bit] NULL,
[IsDeleted] [bit] NULL,
[CreationOrder] [int] NULL,
CONSTRAINT [PK_MetaTable] PRIMARY KEY CLUSTERED 
(
[MetaTableId] 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
 
ALTER TABLE [dbo].[MetaTable] ADD  CONSTRAINT [DF_MetaTable_IsDeleted]  DEFAULT ((0)) FOR [IsDeleted]
GO
 
 
/****** Object:  Table [dbo].[MetaTableHistory]    Script Date: 03/25/2010 15:49:43 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MetaTableHistory]') AND type in (N'U'))
DROP TABLE [dbo].[MetaTableHistory]
GO
 
/****** Object:  Table [dbo].[MetaTableHistory]    Script Date: 03/25/2010 15:49:43 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[MetaTableHistory](
[MetaTableHistoryId] [int] IDENTITY(1,1) NOT NULL,
[MetaTableId] [int] NOT NULL,
[DbName] [varchar](256) NOT NULL,
[SchemaName] [varchar](256) NOT NULL,
[Name] [varchar](256) NOT NULL,
[Title] [varchar](200) NULL,
[DocumentationDescription] [varchar](2000) NOT NULL,
[IsPlatform] [bit] NULL,
[IsDeleted] [bit] NULL,
[CreationOrder] [int] NULL,
[SqlLogin] [varchar](50) NOT NULL,
[Action] [varchar](50) NOT NULL,
[UpdatedWhen] [datetime] NOT NULL,
CONSTRAINT [PK_MetaTableHistory] PRIMARY KEY CLUSTERED 
(
[MetaTableHistoryId] 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
 
 
--use MyDb ; 
 
IF  EXISTS (SELECT * FROM sys.triggers 
WHERE parent_class_desc = 'DATABASE' AND name = N'trigDdl_UpdateTableDocumentation')
DISABLE TRIGGER [trigDdl_UpdateTableDocumentation] ON DATABASE
 
GO
 
/****** Object:  DdlTrigger [trigDdl_UpdateTableDocumentation]    Script Date: 03/25/2010 12:21:16 ******/
IF  EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'trigDdl_UpdateTableDocumentation')DROP TRIGGER [trigDdl_UpdateTableDocumentation] ON DATABASE
GO
 
/****** Object:  DdlTrigger [trigDdl_UpdateTableDocumentation]    Script Date: 03/25/2010 12:21:16 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
 
CREATE trigger [trigDdl_UpdateTableDocumentation]
on database
for CREATE_TABLE , DROP_TABLE
--, alter_TABLE, drop_TABLE
--, create_table, alter_table, drop_table,
--create_function, alter_function, drop_function
as
 
set nocount on
 
DECLARE  @data xml
DECLARE  @Event varchar(50)
DECLARE  @tableName varchar(256)
DECLARE  @DbName varchar(200)
DECLARE  @colName varchar (200) 
DECLARE  @DataType varchar(50)
DECLARE  @MaxLength int 
DECLARE  @IsNullable nvarchar(5)
DECLARE  @colMode varchar(10)
DECLARE  @eventType varchar(200)
DECLARE  @loginName varchar(200)
DECLARE  @eventName varchar(200)
DECLARE  @eventDate varchar(200)
DECLARE  @domainName varchar(200)
DECLARE  @SchemaName varchar(200)
DECLARE  @ordinalPosition int 
DECLARE  @colDefault varchar(200)
DECLARE @Documentation varchar(max) 
 
 
 
set @SchemaName = 'dbo'
set @domainName = 'trigMeta_UpdateTableColMetaData'
set @data = EVENTDATA()
set @tableName = cast (@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)') as varchar(256))
set @DbName = @data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)')
set @event = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)')
set @eventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)')
set @loginName = @data.value ('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)') 
set @eventDate = getdate()
set @IsNullable = 'NO'
set @Documentation = convert(nvarchar(max) , @data.query('data(/EVENT_INSTANCE/TSQLCommand[1]/CommandText[1])'))
 
--REPLACE(string to search, string to find, string to replace)
--debug SELECT '1 DOCUMENTATION IS ' + @documentation
set @Documentation = replace ( convert(nvarchar(max) , @data ) , '&lt;' , '<')
--debug SELECT '2 DOCUMENTATION IS ' + @documentation
set @Documentation = replace ( convert(nvarchar(max) , @Documentation ) , '&gt;' , '>')
--repalce the enters 
set @Documentation = replace ( convert(nvarchar(max) , @Documentation ) , '&#x0D;' , char(13))
--now get a tmp variable 
declare @xmlData xml 
set @xmlData= convert(xml , @Documentation ) 
--debug SELECT '3 DOCUMENTATION IS ' + @documentation
set @Documentation = convert(nvarchar(max) , @xmldata.query('data(/EVENT_INSTANCE/TSQLCommand[1]/CommandText[1]/doc[1])' ))
 
 
 
 
 
DECLARE  @Type varchar(200)
DECLARE  @ObjectId int 
 
if @event = 'CREATE_TABLE' and @TableName <> 'MetaTable'
begin --if @event = 'CREATE_TABLE'
 
 
--WRITE HERE THE INSERT
--DEBUG SELECT 'DOCUMENTATION IS ' + @documentation
DECLARE @TableCount int 
set @TableCount  = ( select count([Name]) from MetaTable where Name=@TableName )
 
if @TableCount <> 1 
BEGIN 
INSERT INTO [dbo].[MetaTable] ( 
[DbName] ,  --type of varchar
[SchemaName] ,  --type of varchar
[Name],  --type of varchar
[Title],  --type of varchar
[DocumentationDescription]  --type of varchar
) 
VALUES 
( 
@DbName , --type of varchar
'dbo' , --type of varchar todo:change
@TableName , --type of varchar
@TableName , --type of varchar
@Documentation  --type of varchar
)            
end -- the table is not in the MetaTable table if ( @TableCount <> 1 ) 
else 
BEGIN
update MetaTable 
set [DocumentationDescription] = @Documentation
where [Name] = @TableName    
END --
 
 
end --if @event = 'CREATE_TABLE'
 
 
 
 
 
--if @event = 'ALTER_TABLE'
--begin -- if @event = 'alter_TABLE'
--SELECT  'alter table'
--SELECT  'Documentation -- ' + @Documentation
---- WRITE HERE THE UPDATE
--end -- if @event = 'ALTER_TABLE'
 
if @event = 'DROP_TABLE' AND @TableName <> 'MetaTable'
begin --if @event = 'DROP_Table'
--SELECT  'drop_table' 
--SELECT  'Documentation -- ' + @Documentation 
UPDATE METATABLE 
SET IsDeleted = convert(bit , 1) , 
[DocumentationDescription] = @Documentation
WHERE [NAME] = @TableName
--        Update [MetaTable] set IsDeleted = 'True' WHERE [ObjectId]=@ObjectId
end --if @event = 'DROP_Table'
 
GO
 
SET ANSI_NULLS OFF
GO
 
SET QUOTED_IDENTIFIER OFF
GO
 
DISABLE TRIGGER [trigDdl_UpdateTableDocumentation] ON DATABASE
GO
 
ENABLE TRIGGER [trigDdl_UpdateTableDocumentation] ON DATABASE
GO
 
 
/****** Object:  Trigger [trigGen_AfterDeleteOnMetaTable]    Script Date: 03/24/2010 08:03:26 ******/
IF  EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[trigGen_AfterDeleteOnMetaTable]'))
DROP TRIGGER [dbo].[trigGen_AfterDeleteOnMetaTable]
GO
 
/****** Object:  Trigger [dbo].[trigGen_AfterDeleteOnMetaTable]    Script Date: 03/24/2010 08:03:27 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================  
-- Author:  <Yordan Georgiev>  
-- Create date: <Create Date,,>  
-- Description: <Description,,>  
-- =============================================  
CREATE TRIGGER  [dbo].[trigGen_AfterDeleteOnMetaTable]   
ON  [dbo].[MetaTable]  
for Delete  
AS   
BEGIN  
-- SET NOCOUNT ON added to prevent extra result sets from  
-- interfering with SELECT statements.  
SET NOCOUNT ON;  
Insert into MetaTableHistory   
(   
[MetaTableId], --type of int
[DbName], --type of varchar
[SchemaName], --type of varchar
[Name], --type of varchar
[Title], --type of varchar
[DocumentationDescription], --type of varchar
[IsPlatform], --type of bit
[IsDeleted], --type of bit
[CreationOrder] , --type of int
[SqlLogin],  
[Action],  
[UpdatedWhen]  
)  
SELECT   
[MetaTableId], --type of int
[DbName], --type of varchar
[SchemaName], --type of varchar
[Name], --type of varchar
[Title], --type of varchar
[DocumentationDescription], --type of varchar
[IsPlatform], --type of bit
[IsDeleted], --type of bit
[CreationOrder] , --type of int
user_name(),  
'DELETE',  
getdate()
from Deleted  
END  
 
GO
 
 
/****** Object:  Trigger [trigGen_AfterInsertOnMetaTable]    Script Date: 03/24/2010 08:07:27 ******/
IF  EXISTS (SELECT * FROM sys.triggers 
WHERE object_id = OBJECT_ID(N'[dbo].[trigGen_AfterInsertOnMetaTable]'))
DROP TRIGGER [dbo].[trigGen_AfterInsertOnMetaTable]
GO
 
/****** Object:  Trigger [dbo].[trigGen_AfterInsertOnMetaTable]    Script Date: 03/24/2010 08:07:27 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
-- =============================================    
-- Author:  <Yordan Georgiev>    
-- Create date: <Create Date,,>    
-- Description: <Description,,>    
-- =============================================    
CREATE TRIGGER  [dbo].[trigGen_AfterInsertOnMetaTable]     
ON  [dbo].[MetaTable]    
for Insert    
AS     
BEGIN    
-- SET NOCOUNT ON added to prevent extra result sets from    
-- interfering with SELECT statements.    
SET NOCOUNT ON;    
Insert into MetaTableHistory     
(     
[MetaTableId], --type of int
[DbName], --type of varchar
[SchemaName], --type of varchar
[Name], --type of varchar
[Title], --type of varchar
[DocumentationDescription], --type of varchar
[IsPlatform], --type of bit
[IsDeleted], --type of bit
[CreationOrder] , --type of int
[SqlLogin],    
[Action],    
[UpdatedWhen]    
)    
SELECT     
[MetaTableId], --type of int
[DbName], --type of varchar
[SchemaName], --type of varchar
[Name], --type of varchar
[Title], --type of varchar
[DocumentationDescription], --type of varchar
[IsPlatform], --type of bit
[IsDeleted], --type of bit
[CreationOrder] , --type of int
user_name(),    
'INSERT',    
getdate()
from MetaTable where MetaTableId in (select MetaTableId from Inserted)  
END    
 
GO
 
 
--exec procUtils_GenerateTableHistorySql 'MetaTable'
/****** Object:  Trigger [trigGen_AfterUpdateOnMetaTable]    Script Date: 11/25/2009 10:35:45 ******/    
IF  EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[trigGen_AfterUpdateOnMetaTable]'))    
DROP TRIGGER [dbo].[trigGen_AfterUpdateOnMetaTable]    
GO    
/****** Object:  Trigger [dbo].[trigGen_AfterUpdateOnMetaTable]    Script Date: 11/25/2009 10:35:45 ******/    
SET ANSI_NULLS ON    
GO    
SET QUOTED_IDENTIFIER ON    
GO    
-- =============================================    
-- Author:  <Yordan Georgiev>    
-- Create date: <Create Date,,>    
-- Description: <Description,,>    
-- =============================================    
CREATE TRIGGER  [dbo].[trigGen_AfterUpdateOnMetaTable]     
ON  [dbo].[MetaTable]    
for Update    
AS     
BEGIN    
-- SET NOCOUNT ON added to prevent extra result sets from    
-- interfering with SELECT statements.    
SET NOCOUNT ON;    
Insert into MetaTableHistory     
(     
[MetaTableId], --type of int
[DbName], --type of varchar
[SchemaName], --type of varchar
[Name], --type of varchar
[Title], --type of varchar
[DocumentationDescription], --type of varchar
[IsPlatform], --type of bit
[IsDeleted], --type of bit
[CreationOrder] , --type of int
[SqlLogin],    
[Action],    
[UpdatedWhen]    
)    
SELECT     
[MetaTableId], --type of int
[DbName], --type of varchar
[SchemaName], --type of varchar
[Name], --type of varchar
[Title], --type of varchar
[DocumentationDescription], --type of varchar
[IsPlatform], --type of bit
[IsDeleted], --type of bit
[CreationOrder] , --type of int
user_name(),    
'UPDATE',    
getdate()
from MetaTable where MetaTableId in (select MetaTableId from Inserted)    
END    
GO    
--SELECT * FROM [dbo].[MetaTableHistory] ORDER BY 1 DESC 
--SELECT NAME FROM SYS.PROCEDURES WHERE NAME LIKE '%PROC%'
--SELECT NAME FROM SYS.TABLES WHERE NAME LIKE '%TABLE%'
--exec sp_HelpText procUtils_GenerateMetaInsert
--exec procUtils_GenerateMetaInsert 'TABLE'
 
-- FIRST REMOVE THE FOREIGN KEY CONSTRAINTS 
IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_MetaTableStatus_MetaTable]') AND parent_object_id = OBJECT_ID(N'[dbo].[MetaTableStatus]'))
ALTER TABLE [dbo].[MetaTableStatus] DROP CONSTRAINT [FK_MetaTableStatus_MetaTable]
GO
 
 
-- ADD HERE THE DROP TABLE STATEMENTS OF THE REFERENCES TABLES 
 
truncate table MetaTable 
 
 
 
 
SET IDENTITY_INSERT [dbo].[MetaTable] ON;
BEGIN TRANSACTION;
INSERT INTO [dbo].[MetaTable]([MetaTableId], [DbName], [SchemaName], [Name], [Title], [DocumentationDescription], [IsPlatform], [IsDeleted], [CreationOrder])
SELECT 1, N'MyDb', N'dbo', N'MetaTable', N'MetaTable', N'The table used to describe all other tables in the database', 1, 0, 1 UNION ALL
SELECT 2, N'MyDb', N'dbo', N'User1', N'User1 table', N'Contains all the user data ', 1, 0, 2 UNION ALL
SELECT 3, N'MyDb', N'dbo', N'NamingConvention', N'NamingConvention',N'Provides basic aggreed naming conventions patterns', 1, 0, 7 
COMMIT;
RAISERROR (N'[dbo].[MetaTable]: Insert Batch: 1.....Done!', 10, 1) WITH NOWAIT;
GO
 
SET IDENTITY_INSERT [dbo].[MetaTable] OFF;
 
 
--SELECT TOP 50 * FROM DdlLog ORDER BY 1 DESC
 
--select 'SELECT ' + convert(varchar(10), row_number() over (ORDER BY create_date )) + ', N''MyDb'', N''dbo'', N''' + name + ''', N''' + name + ''', N''' + name + ' - Description '', 1, 0, 10 UNION ALL '  from sys.tables  
 
 
-- AND THE CREATE TABLE STATEMENTS 
 
-- READDD THE FOREIGN KEYS

No comments:

Post a Comment

- the first minus - Comments have to be moderated because of the spammers
- the second minus - I am very lazy at moderating comments ... hardly find time ...
- the third minus - Short links are no good for security ...
- The REAL PLUS : Any critic and positive feedback is better than none, so your comments will be published sooner or later !!!!

Labels

perl (41) Cheat Sheet (25) how-to (24) windows (14) sql server 2008 (13) linux (12) oracle (12) sql (12) Unix (11) cmd windows batch (10) mssql (10) cmd (9) script (9) textpad (9) netezza (8) sql server 2005 (8) cygwin (7) meta data mssql (7) metadata (7) bash (6) code generation (6) Informatica (5) cheatsheet (5) energy (5) tsql (5) utilities (5) excel (4) future (4) generic (4) git cheat sheet (4) html (4) perl modules (4) programs (4) settings (4) sh (4) shortcuts (4) поуки (4) принципи (4) Focus Fusion (3) Solaris (3) cool programs (3) development (3) economy (3) example (3) freeware (3) fusion (3) logging (3) morphus (3) mssql 2005 (3) nuclear (3) nz (3) parse (3) python (3) sftp (3) sofware development (3) source (3) sqlplus (3) table (3) vim (3) .Net (2) C# (2) China (2) GUI (2) Google (2) GoogleCL (2) Solaris Unix (2) architecture (2) ascii (2) awk (2) batch (2) cas (2) chrome extensions (2) code2html (2) columns (2) configuration (2) conversion (2) duplicates (2) excel shortcuts (2) export (2) file (2) free programs (2) informatica sql repository (2) linux cheat sheet (2) mssql 2008 (2) mysql (2) next big future (2) nsis (2) nz netezza cheat sheet (2) nzsql (2) ora (2) prediction (2) publish (2) release management (2) report (2) security (2) single-click (2) sqlserver 2005 (2) sqlserver 2008 (2) src (2) ssh (2) template (2) tools (2) vba (2) video (2) xlt (2) xml (2) youtube videos (2) *nix (1) .vimrc (1) .virmrc vim settings configs (1) BSD license (1) Bulgaria (1) Dallas (1) Database role (1) Dense plasma focus (1) Deployment (1) ERP (1) ExcelToHtml (1) GD (1) GDP (1) HP-UX (1) Hosting (1) IDEA (1) INC (1) IT general (1) ITIL management bullshit-management (1) IZarc (1) Java Web Start (1) JavaScript anchor html jquery (1) Khan Academy (1) LINUX UNIX BASH AND CYGWIN TIPS AND TRICKS (1) Linux Unix rpm cpio build install configure (1) Linux git source build .configure make (1) ListBox (1) MIT HYDROGEN VIRUS (1) OO (1) Obama (1) PowerShell (1) Run-time (1) SDL (1) SIWA (1) SOX (1) Scala (1) Services (1) Stacks (1) SubSonic (1) TED (1) abstractions (1) ansible hosts linux bash (1) ansible linux deployment how-to (1) ansible yum pip python (1) apache (1) apache 2.2 (1) application life cycle (1) architecture input output (1) archive (1) arguments (1) avatar (1) aws cheat sheet cli (1) aws cli (1) aws cli amazon cheat sheet (1) aws elb (1) backup (1) bash Linux open-ssh ssh ssh_server ssh_client public-private key authentication (1) bash perl search and replace (1) bash stub (1) bin (1) biofuels (1) biology (1) books (1) browser (1) bubblesort (1) bugs (1) build (1) byte (1) cas_sql_dev (1) chennai (1) chrome (1) class (1) claut (1) cmdow (1) code generation sqlserver (1) command (1) command line (1) conf (1) confluence (1) console (1) convert (1) cool programs windows free freeware (1) copy paste (1) copy-paste (1) csv (1) ctags (1) current local time (1) cygwin X11 port-forwarding mintty xclock Linux Unix X (1) cygwin bash how-to tips_n_tricks (1) cygwin conf how-to (1) data (1) data types (1) db2 cheat sheet (1) db2 starter ibm bash Linux (1) debt (1) diagram (1) dictionaries (1) digital (1) disk (1) disk space (1) documentation (1) dos (1) dubai (1) e-cars (1) electric cars (1) electricity (1) emulate (1) errors (1) exponents (1) export workflow (1) extract (1) fast export (1) fexp (1) file extension (1) file permissions (1) findtag (1) firewall (1) for loop (1) freaky (1) functions (1) fusion research (1) german (1) git gitlab issues handling system (1) google cli (1) google code (1) google command line interface (1) gpg (1) ha (1) head (1) helsinki (1) history (1) hop or flop (1) host-independant (1) how-to Windows cmd time date datetime (1) ibm db2 cognos installation example db deployment provisioning (1) ideas (1) image (1) informatica oracle sql (1) informatica repo sql workflows sessions file source dir (1) informatica source files etl (1) install (1) isg-pub issue-tracker architecture (1) it management best practices (1) java (1) jump to (1) keyboard shortcuts (1) ksh (1) level (1) linkedin (1) linux bash ansible hosts (1) linux bash commands (1) linux bash how-to shell expansion (1) linux bash shell grep xargs (1) linux bash tips and t ricks (1) linux bash unix cygwin cheatsheet (1) linux bash user accounts password (1) linux bash xargs space (1) linux cheat-sheet (1) linux cheatsheet cheat-sheet revised how-to (1) linux how-to non-root vim (1) linux ssh hosts parallel subshell bash oneliner (1) london (1) make (1) me (1) metacolumn (1) metadata functions (1) metaphonre (1) method (1) model (1) movie (1) multithreaded (1) mysql cheat sheet (1) mysql how-to table datatypes (1) n900 (1) nano (1) neteza (1) netezza bash linux nps (1) netezza nps (1) netezza nps nzsql (1) netezza nz Linux bash (1) netezza nz bash linux (1) netezza nz nzsql sql (1) netezza nzsql database db sizes (1) non-password (1) nord pol (1) nps backup nzsql schema (1) number formatting (1) nz db size (1) nz table count rows (1) nzsql date timestamp compare bigint to_date to_char now (1) on-lier (1) one-liners (1) one-to-many (1) oneliners (1) open (1) open source (1) openrowset (1) openssl (1) oracle PL/SQL (1) oracle Perl perl (1) oracle installation usability (1) oracle number formatting format-model ora-sql oracle (1) oracle templates create table (1) oracle trigger generic autoincrement (1) oracle vbox virtual box cheat sheet (1) oracle virtual box cheat sheet (1) outlook (1) parser (1) password (1) paths (1) perl @INC compile-time run-time (1) perl disk usage administration Linux Unix (1) perl modules configuration management (1) permissions (1) php (1) picasa (1) platform (1) postgreSQL how-to (1) powerShell cmd cygwin mintty.exe terminal (1) ppm (1) predictions (1) prices (1) principles (1) productivity (1) project (1) prompt (1) proxy account (1) public private key (1) publishing (1) putty (1) qt (1) read file (1) registry (1) relationship (1) repository (1) rm (1) scala ScalaFmt (1) scp (1) scripts (1) scsi (1) search and replace (1) sed (1) sendEmail (1) sh stub (1) shortcuts Windows sql developer Oracle (1) sidebar (1) silicon (1) smells (1) smtp (1) software development (1) software procurement (1) sofware (1) sort (1) sql script (1) sql_dev (1) sqlcmd (1) sqlite (1) sqlite3 (1) sshd (1) sshd cygwin (1) stackoverflow (1) stored procedure (1) stub (1) stupidity (1) subroutines (1) svn (1) sysinternals (1) system design (1) tail (1) tar (1) temp table (1) templates (1) teradata (1) terminal (1) test (1) testing (1) theory (1) thorium (1) time (1) tip (1) title (1) tmux .tmux.conf configuration (1) tmux efficiency bash (1) tool (1) ui code prototyping tips and tricks (1) umask Linux Unix bash file permissions chmod (1) url (1) urls (1) user (1) utility (1) utils (1) vb (1) vbox virtual box cheat sheet (1) vim perl regex bash search for string (1) vim recursively hacks (1) vim starter (1) vim-cheat-sheet vim cheat-sheet (1) vimeo (1) visual stuio (1) warsaw (1) wiki (1) wikipedia (1) window (1) windows 7 (1) windows 8 (1) windows programs (1) windows reinstall (1) windows utility batch perl space Windows::Clipboard (1) wisdoms (1) workflow (1) worth-reading (1) wrapper (1) xp_cmdshell (1) xslt (1) youtube (1)

Blog Archive

Translate with Google Translate

My Blog List