SQLLeader http://www.sqlleader.com/image/mainLogo.jpg http://www.sqlleader.com SQLLeader.com :: MSSQL Community Site ko Copyright 2006-2007 ADConsulting All Right Reserved. 2011-11-18T00:47:00.000 <![CDATA[ SQL Server 2012 Release Candidate is now Available!]]> ÀÌÀç¿õ http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005ETC&intSeq=4950 ¿©±â´Â ±â¼úÀڷḦ ¿Ã¸®´Â °Ô½ÃÆÇÀÔ´Ï´Ù.

Áú¹® »çÇ×À» ¿Ã¸®½Ã·Á¸é Áú¹®°ú ´äº¯ °Ô½ÃÆÇÀ» ÀÌ¿ëÇϽñ⠹ٶø´Ï´Ù. ]]>
SQL Server 2005 ETC 2011-11-18T00:47:00.000
<![CDATA[ SSAS Operations Guide 2008R2]]> ÇѴ뼺 http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSAS&intSeq=4435 Analysis Services °ü·Ã »õ·Î¿î ±â¼ú ÀÚ·á°¡ SQLCAT ÆÀ¿¡¼­ ³ª¿Ô½À´Ï´Ù.

SSAS Operations Guide 2008R2 À̸ç, ´ÙÀ½ ¸µÅ©¿¡¼­ ´Ù¿î·Îµå ¹ÞÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù.

MSDN link: The Analysis Services 2008R2 Operations Guide


¿î ÁÁ°Ôµµ  Contributor¿¡ Àúµµ ¿Ã¶ó°¡ ÀÖ½À´Ï´Ù.~^^

]]>
SQL Server 2005 SSAS 2011-06-09T08:47:00.000
<![CDATA[ CLR - º´·Ä·Î Äõ¸®¸¦ ó¸®Çϱâ]]> ±èÁ¾¿­ http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005CLR&intSeq=4370 ±èÁ¾¿­


Query´Â ÁýÇÕÀûÀ¸·Î ó¸®ÇÏÁö¸¸ ¼øÂ÷ÀûÀ¸·Î ó¸®Çϰí ÀÖ´Â ±¸Á¶ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ¼¼°³ÀÇ Å×ÀÌºí¿¡ µ¥ÀÌÅ͸¦ ³Ö´Â´Ù°í °¡Á¤Çϸé (¹°·Ð ¼ø¼­´Â ÇÊ¿ä¾ø°í¾Æ¸¶µµ Äõ¸®´Â ´ë·« ÀÌ·¯ÇÒ °ÍÀÔ´Ï´Ù.

INSERT INTO t1 (c1, c2) VALUES (v1, v2)

INSERT INTO t2 (c1, c2) VALUES (v1, v2)

INSERT INTO t3 (c1, c2) VALUES (v1, v2)

±×·±µ¥ À§¿Í °°Àº Äõ¸®¸¦ µ¿½Ã¿¡ ó¸®ÇÏ´Â ±¸Á¶¸¦ °¡Áö¸é ¾î¶³±î¿ä?

ÀÌ·± ÃëÁö·Î Procedure¸¦ Çϳª °³¹ßÇØºÃ½À´Ï´Ù. ÀÌ Procedures´Â ±¸ºÐÀÚ(¼¼¹ÌÄÝ·ÐÀ» »ç¿ëÇß´Ù.)¸¦ ±âÁØÀ¸·Î ¸í·ÉÀ» ¹è¿­È­ ½Ã۰í thread·Î ó¸®ÇÏ´Â Çü½ÄÀÔ´Ï´Ùº¸Åë Äõ¸®¹®Àº ½ÇÇàÇßÀ» ¶§ ¸®ÅÏÀÌ ¾ø´Â Çü½ÄÀÌ Àִ°¡ ÇÏ¸é ¸®ÅÏ Çü½ÄÀÌ Á¸ÀçÇÏ´Â °ÍÀÌ Àִµ¥, ÀÌ ±¸Á¶´Â ¸®ÅÏÀ» ¹«½ÃÇÏ´Â ±¸Á¶ÀÔ´Ï´Ù.
¶ÇÇÑ
º´·Ä ±¸¹®Áß Çϳª°¡ ¿¡·¯°¡ ³ª´Â ±¸Á¶¶ó¸é ±× ±¸¹®¸¸ ¿¡·¯°¡ ³ª¸ç ´Ù¸¥ °Ç ½ÇÇàÀÌ µË´Ï´Ù.


´ÙÀ½Àº C# ¼Ò½ºÀÔ´Ï´Ù.

using System;

using System.Data;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using Microsoft.SqlServer.Server;

using System.Threading;

 

 

public partial class StoredProcedures

{

    public class thWorker

    {

        private string wName;

        public SqlPipe p = SqlContext.Pipe;

        public thWorker(string name)

        {

 

            wName = name;

            p.Send("Start : " + wName);

 

            SqlConnection c = new SqlConnection("context connection=true");

            c.Open();

            SqlCommand db_cmd;

 

            try

            {

                db_cmd = new SqlCommand(wName, c);

                db_cmd.ExecuteNonQuery();

            }

            catch (Exception e)

            {

                p.Send(e.ToString());

            }

            finally

            {

                c.Close();

                p.Send("Finish : " + wName);

            }

 

 

        }

 

        public void mDmy()

        {

            SqlPipe p = SqlContext.Pipe;

            p.Send(wName);

        }

    }

   

    [Microsoft.SqlServer.Server.SqlProcedure]

    public static int USP_Thread_Proc(string cmd)

    {

        Thread t = null;

        thWorker wth = null;

        string[] strCmd = cmd.Split(';');

        int cmdCount = strCmd.Length;

        Object[] obj = new object[cmdCount];

       

 

        for (int i = 0; i < cmdCount; i++)

        {

 

            wth = new thWorker(strCmd[i]);

 

            t = new Thread(new ThreadStart(wth.mDmy));

            t.Name = "Thread -" + i.ToString() + ":";

            t.Start();

            obj[i] = t;

        }

        for (int i = 0; i < cmdCount; i++)

        {

            t = (System.Threading.Thread)obj[i];

            t.Join();         

        }

        return 0;

    }

 

 

};

À§ÀÇ Äڵ带 Çѹø Å×½ºÆ®´Â ¾Æ·¡ÀÇ Äõ¸®·Î °¡´ÉÇÕ´Ï´Ù.

IF OBJECT_ID('t1') IS NOT NULL

        DROP TABLE t1

 

CREATE TABLE t1 (a INT, b DATETIME)

GO

 

IF OBJECT_ID('t2') IS NOT NULL

        DROP TABLE t2

IF OBJECT_ID('t3') IS NOT NULL

        DROP TABLE T3

       

SELECT * INTO t2 FROM t1

SELECT * INTO t3 FROM t1

GO

 

 

SELECT * FROM t1

SELECT * FROM t2

SELECT * FROM t3

 

 

--ÀÌ°Ô ¿ì¸®°¡ ÁÖ¸ñÇØ¾ß ÇÒ ºÎºÐ

EXEC usp_thread_proc 'truncate table t1;truncate table t2;truncate table t3'

EXEC usp_thread_proc 'insert into t1 values(1, getdate());insert into t2 values(1, getdate());insert into t3 values(1, getdate())'

 

 

--½Ã°£ÀÇÂ÷À̸¦È®ÀÎÇØÁÖÀÚ..

SELECT * FROM t1

SELECT * FROM t2
SELECT * FROM t3

¼ö°íÇϽʽÿÀ..



]]>
SQL Server 2005 CLR 2011-04-08T01:57:00.000
<![CDATA[ CLR - Windows Event Log]]> ±èÁ¾¿­ http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005CLR&intSeq=4343 ±èÁ¾¿­


ÀÛ¾÷À» ó¸®ÇÏ°í ±× ±â·ÏÀ» ³²±â´Â ¹æ¹ýµéÀº ¾î´À Ç÷§Æû, ¾î´À µ¥ÀÌÅͺ£À̽º, ¾î´À osµç°£¿¡ °ü¸®ÀÚ¶ó¸é ÇÊ¿äÇÑ ±â´ÉÀÏ °ÍÀÌ´Ù. ¹°·Ð ÀÌ·¯ÇÑ Log¸¦ µ¥ÀÌÅͺ£À̽º¿¡ ¹Ù·Î ½×¾Æµµ µÇ°ÚÁö¸¸..

Å« ÇÁ·Î½ÃÁ®¿¡¼­ sub procedure¸¦ È£ÃâÇÏ´Â °æ¿ì¶ó°í °¡Á¤Çغ¸ÀÚ. Sub procedure¿¡¼­ ½ÇÇàÇÏ¸ç ±× ÀÛ¾÷µéÀ» µ¥ÀÌÅͺ£À̽º¿¡ ¹Ù·Î ½×À¸·Á°í Çϰí Àִµ¥ ÀÌ sub procedure¸¦ È£ÃâÇÑ Å« ÇÁ·Î½ÃÁ®¿¡¼­ transaction 󸮷ΠrollbackÀ» Çϰí ÀÖ´Ù¸é.. ÇÁ·Î½ÃÁ®ÀÇ ¿¡·¯¸¦ ¾î¶»°Ô Tracking ÇØ¾ß ÇÒ±î?

¾î¶² °÷¿¡¼­´Â ÆÄÀϷΠó¸®ÇÏ´Â °æ¿ì°¡ ÀÖÀ¸¸ç, ÀÌ µ¥ÀÌÅ͸¦ µ¥ÀÌÅͺ£À̽º¿¡ ¿Ã·Á¼­ ó¸®Çϱ⵵ ÇÒ °ÍÀÌ´Ù.

 

±×·±µ¥ À̹ø¿¡ ÇϰíÀÚ ÇÏ´Â °ÍÀº ÀÌ·± °úÁ¤ÀÌ ¾Æ´Ï¶ó À©µµ¿ì À̺¥Æ®¿¡ ·Î±×¸¦ ³²±â´Â ÀÛ¾÷À» ÇØº¼±î ÇÑ´Ù.

 

¸ÕÀú mssql¿¡¼­ ÀÌ¹Ì Á¦°øÇϰí ÀÖ´Â procedure, ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ·Î±×¸¦ ³²±â·Á¸é ¾Æ·¡¸¦ »ç¿ëÇÏ¸é µÈ´Ù.


 

DECLARE @desc VARCHAR(100)

SET @desc = 'sp...'

RAISERROR (@desc  ,0, 0) with LOG

 

EXEC xp_logevent 50001, @desc, informational

 

***Âü°í powershell·Î »õÇ׸ñ 30°³ Ç׸ñ¿¡ ´ëÇØ exportÇϱâ

Get-eventLog -logname "application" -newest 30 | where-object {$_.Source -like "*MSSQLSERVER*"} | Export-csv c:\DBScript\sqlevent.csv



À§ÀÇ ¸í·ÉÀ¸·Î ½ÇÇàÇϸé ÀÀ¿ë ÇÁ·Î±×·¥À̶ó´Â Ä«Å×°í¸®¿¡ Log°¡ ½×ÀÌ°Ô µÈ´Ù.

 

±×·±µ¥ ÀÌ ·Î±×¸¦ ´Ù½Ã ÀÐÀ¸·Á¸é ¾î¶»°Ô ÇØ¾ß Çϴ°¡? ¶Ç´Â event log¸¦ Áö¿ì·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î? »õ·Î¿î À̺¥Æ® Ä«Å×°í¸®(³ª¸¸ÀÇ)¸¦ »ý¼ºÇؼ­ ´Ù¸¥ °Í°ú ¼¯ÀÌÁö ¾Ê°Ô ÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ßÇÒ±î? ¿ª½Ã ÀÌ·± Àǹ®À¸·Î ÇÔ¼ö¸¦ Çϳª ¸¸µé¾î ÀÛ¾÷À» Çß´Ù.


±×·±µ¥ ÀÌ ·Î±×¸¦ ´Ù½Ã ÀÐÀ¸·Á¸é ¾î¶»°Ô ÇØ¾ß Çϴ°¡? ¶Ç´Â event log¸¦ Áö¿ì·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î? »õ·Î¿î À̺¥Æ® Ä«Å×°í¸®(³ª¸¸ÀÇ)¸¦ »ý¼ºÇؼ­ ´Ù¸¥ °Í°ú ¼¯ÀÌÁö ¾Ê°Ô ÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ßÇÒ±î? ¿ª½Ã ÀÌ·± Àǹ®À¸·Î ÇÔ¼ö¸¦ Çϳª ¸¸µé¾î ÀÛ¾÷À» Çß´Ù.

 

¼Ö·ç¼ÇÀ» Çϳª ¸¸µé°í µðºñ¸¦ ¿¬°áÇÑ ´ÙÀ½ ¾Æ·¡¿Í °°Àº Äڵ带 ÀúÀåÇϽʽÿÀ..

¾Æ·¡ÀÇ ¼Ö·ç¼Ç¿¡´Â event view°ü·Ã ³× °³ÀÇ ÇÔ¼ö·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.

Write , Read, Backup, ClearÀÌ ³ÝÀ¸·Î ±¸¼ºÇß´Ù. ±×¸®°í Read¸¦ Á¦¿ÜÇÑ ÇÔ¼öµéÀº ÀÛ¾÷ÀÇ ¼º°ø¿©ºÎ 1, 0À¸·Î ¸®ÅÏÇÑ´Ù. Read´Â Áö±Ý ÅÇÀ¸·Î ±¸ºÐÇÑ µ¥ÀÌÅÍ¿¡ ´ëÇØ Å×À̺í·Î ¸®ÅÏÇÏ°Ô Çß´Ù.


using System;

using System.Data;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using Microsoft.SqlServer.Server;

using System.Diagnostics;

using System.IO;

using System.Collections;

 

 

public partial class UserDefinedFunctions

{

  

    [Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "FillLog", TableDefinition = "Num nvarchar(20), T1 nVarchar(1000), T2 nVarchar(1000)")]

 

    public static IEnumerable udf_read_log(string cs)

    {

        string[] sItems;

        string sData = "";

        EventLog eLog = new EventLog(cs);

 

        foreach (EventLogEntry entry in eLog.Entries)

        {

             sData += entry.Message + "#";

        }

 

        try

        {

            sItems = sData.Split('#');

            return (sItems);

        }

        catch

        {

            return null;

        }

 

       

    }

 

    private static void FillLog(Object obj, out SqlString Num, out SqlString T1, out SqlString T2)

    {

        string sTemp = Convert.ToString(obj);

        string[] arr_temp = sTemp.Split('\t');

        try

        {

            Num = (SqlString)arr_temp[0];

            T1 = (SqlString)arr_temp[1];

            T2 = (SqlString)arr_temp[2];

        }

        catch

        {

            Num = null;

            T1 = null;

            T2 = null;

        }

    }

 

 

    [Microsoft.SqlServer.Server.SqlFunction]

    public static SqlInt16 udf_write_log(string message, string cs)

    {

        try

        {

            if (!EventLog.Exists(cs))

            {

                EventLog.CreateEventSource("MSSQL_Trace", cs);

            }

 

            EventLog.WriteEntry(cs, message);

            return 1;

 

        }

        catch (Exception e)

        {

            return 0;

 

        }

 

    }

 

 

    [Microsoft.SqlServer.Server.SqlFunction]

    public static SqlInt16 udf_clear_log(string cs)

    {

        try

        {

            EventLog elog = new EventLog(cs);

            elog.Clear();

            return 1;

        }

        catch

        {

            return 0;

        }

 

    }

 

 

    [Microsoft.SqlServer.Server.SqlFunction]

    public static SqlInt16 udf_backup_log(string pString, string cs)

    {

        try

        {

            EventLog eLog = new EventLog(cs);

            StreamWriter sw = new StreamWriter(pString, true);

            foreach (EventLogEntry entry in eLog.Entries)

            {

                sw.WriteLine(entry.Message);

            }

            sw.Close();

            return 1;

        }

        catch

        {

            return 0;

        }

 

    }

};





ÄÄÆÄÀÏÇÏ°í ¼Ò½º¸¦ ¹èÆ÷Çϸé ÇØ´ç µðºñ¿¡¼­ ¾Æ·¡¿Í °°Àº Äڵ带 ½ÇÇàÇÏ¸é µÈ´Ù.

-write

select common.dbo.udf_write_log('123 234  procedurename_', 'mssql_trace');

--success 1 ,  error 0

 

--backup

select common.dbo.udf_backup_log('d:\mssql_trace.bak', 'mssql_trace');

 

--clear_log

select common.dbo.udf_clear_log('mssql_trace');

 

--read

select * from common.dbo.udf_read_log('mssql_trace')




½ÇÇàÇÏ°í ³­ ´ÙÀ½ÀÇ windows log¸ð½ÀÀÌ´Ù. queryÀÇ °á°úº¸´Ù ÀÌ°Ô ´õ ±Ã±ÝÇÒ µíÇÏ¿© ĸÃÄ ^^



÷ºÎ : udf_read_log.cs

]]>
SQL Server 2005 CLR 2011-03-18T00:46:00.000
<![CDATA[ µðÆúÆ® °ªÀÌ ÁöÁ¤µÈ Å×ÀÌºí¿¡ Attunity Provider·Î µ¥ÀÌÅÍ ÀÔ·Â]]> ÇѴ뼺 http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSIS&intSeq=4298 Default Value°¡ ÁöÁ¤µÈ Å×ÀÌºí¿¡ Attunity Provider·Î µ¥ÀÌÅÍ ÀÔ·ÂÇÒ °æ¿ì

Microsoft Premier Field Engineer

ÇѴ뼺

 

Attunity Provider´Â SQL Server 2008 Enterprise EditionÀ» »ç¿ëÇÒ °æ¿ì¿¡ ¹«·á·Î Á¦°øµÇ´Â 3rd party ProviderÀÌ´Ù. ±âÁ¸ÀÇ OLE DB ¶Ç´Â .NET ´ë»ó¿¡ ºñÇØ Bulk Insert 󸮸¦ ÇÒ ¼ö ÀÖ´Ù´Â Å« ÀåÁ¡ÀÌ ÀÖ´Ù. ½ÇÁ¦ °í°´ »ç·Ê¿¡¼­ ±âÁ¸ÀÇ OLE DB ´ë»óÀ» »ç¿ëÇßÀ» ¶§¿¡ ºñÇØ Attunity Provider¸¦ »ç¿ëÇßÀ» ¶§°¡ ¼ö½Ê ¹è ºü¸¥ ¼Óµµ¸¦ º¸ÀÎ Àûµµ ÀÖ´Ù. (OLE DB ´ë»ó – 22ºÐ ¼Ò¿ä, Attunity ´ë»ó – 27ÃÊ ¼Ò¿ä)

ÇÏÁö¸¸, Oracle ´ë»ó Å×ÀÌºí¿¡ Default ¿­ÀÌ ÁöÁ¤µÇ¾î ÀÖ´Â °æ¿ì¿¡´Â °í·ÁÇØ¾ß ÇÒ »çÇ×ÀÌ ÀÖ´Ù.

 

 

Å×½ºÆ® ȯ°æ

´ÙÀ½°ú °°ÀÌ Oracle¿¡ Default Value°¡ ÁöÁ¤µÈ Å×À̺íÀ» ÁغñÇÑ´Ù.

 

BIDS¿¡¼­ µ¥ÀÌÅÍ È帧 ÀÛ¾÷À» Ãß°¡ÇÑ ÈÄ, ´ÙÀ½°ú °°ÀÌ °£´ÜÇÑ ¿¹Á¦ µ¥ÀÌÅÍ ¿øº»À» »ý¼ºÇÑ´Ù.




 

TEST 1 – Oracle Attunity ´ë»óÀ» »ç¿ëÇϰí Fast Load ¿É¼ÇÀ» »ç¿ëÇÑ °æ¿ì




 

½ÇÇà °á°ú


è 
Default °ªÀÌ ¼³Á¤µÈ Not Null ¿­¿¡ µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÏ·Á°í ÇÒ °æ¿ì, ¾Æ·¡¿Í °°Àº ¿¡·¯°¡ ¹ß»ýÇÔ

[Oracle ´ë»ó [91]] Error: ·Îµå ÈÄ ¶Ç´Â Á¾·á ´Ü°è¿¡¼­ ºü¸¥ ·Îµå ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. Class:       Logical

Status:    0              Code:     0

Note:     

At:           ORAOPRdrpthEngine.c:1128

Text:       Conversion error on column '"DEFAULTCOL"'.              ORA-01400: NULLÀ» (DEFAULTCOL) ¾È¿¡ »ðÀÔÇÒ ¼ö ¾ø½À´Ï´Ù

 

 

TEST 2 – Oracle Attunity ´ë»óÀ» »ç¿ëÇϰí Fast Load ¿É¼ÇÀ» »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì




è 
µ¿ÀÏÇÑ ¿¡·¯ ¹ß»ý – Attunity Provider¸¦ »ç¿ëÇÏ´Â °æ¿ì, Fast Load »ç¿ë ¿©ºÎ¿Í »ó°ü¾øÀÌ Not Null ¿­¿¡ ´ëÇÑ °Ë»ç ÀÛ¾÷À» ¸ÕÀú ¼öÇàÇϱ⠶§¹®¿¡ ÀÌ¿Í °°Àº ¿¡·¯°¡ ¹ß»ýÇÔ

 

 

TEST 3 – OraOledb.OracleÀ» ÀÌ¿ëÇÑ OLE DB ´ë»óÀ» »ç¿ëÇÑ °æ¿ì


è 
Á¤»ó 󸮵Ê. Attunity Provider¿Í´Â ´Þ¸®, Çà ´ÜÀ§ ó¸® ¹æ½ÄÀ¸·Î ¼öÇàµÊ



 

 

ÇØ°á ¹æ¹ý

1.       ÆÄ»ý¿­ º¯È¯À» ÀÌ¿ëÇÑ Default ¿­ Ãß°¡

- ÀÌ ¹æ¹ýÀÇ °æ¿ì, Default Column¿¡ ´ëÇØ ¿­À» ÁöÁ¤ÇØÁà¾ß ÇÏ´Â ´ÜÁ¡Àº ÀÖÁö¸¸ Attunity Provider¸¦ ÀÌ¿ëÇÑ Bulk Insert ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.

a.        ÆÄ»ý¿­ º¯È¯(Derived Column)À» Ãß°¡ÇÑ ÈÄ, µ¥ÀÌÅÍ ¿øº»°ú ¿¬°áÇÑ´Ù.

b.       ÆÄ»ý¿­ º¯È¯ ¼Ó¼ºÀ» ¿¬ ´ÙÀ½, ¾Æ·¡¿Í °°ÀÌ Default·Î ÀÔ·ÂÇÒ °ªÀ» ¼³Á¤ÇÑ´Ù. ÀÌ ¶§, µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸ÂÃß´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù. (Type Casts ¹®À» ÀÌ¿ë)


c.        ´ÙÀ½°ú °°ÀÌ, Default Column¿¡ ´ëÇØ¼­µµ ¸ÅÇÎÀ» ¼³Á¤ÇÑ´Ù.

 



 

 

2.       Àӽà Å×ÀÌºí »ç¿ë

-          MSSQL¿¡¼­ OracleÀÇ Àӽà Å×ÀÌºí¿¡ Bulk Insert·Î ó¸®ÇÑ ÈÄ, Oracle DB ³»¿¡¼­ º» Å×À̺í·Î À̰üÇÏ´Â ¹æ½Ä. Àӽà Å×ÀÌºí °ø°£À» Â÷ÁöÇÏÁö¸¸, ó¸® ¼º´ÉÀÌ ÁÁÀº ¹æ¹ýÀÌ´Ù.

a.        Oracle¿¡ Default Value°¡ ÁöÁ¤µÇÁö ¾ÊÀº Àӽà Å×À̺íÀ» »ý¼º

b.       MSSQL¿¡¼­ Attunity Provider¸¦ ÀÌ¿ëÇØ¼­ Bulk Insert ó¸®

c.        SSIS¿¡¼­ SQL ½ÇÇà ÀÛ¾÷À» ÀÌ¿ëÇØ¼­ OracleÀÇ Àӽà Å×ÀÌºí¿¡¼­ º» Å×À̺í·Î InsertÇÏ´Â SQL Äõ¸®¸¦ ½ÇÇà

 

3.       Attunity Provider ´ë½Å OLE DB Provider(MSDAORA or OraOLEDB)¸¦ »ç¿ëÇØ¼­ ó¸®

-          Ãß°¡ÀûÀÎ Å×ÀÌºí »ý¼ºÀ̳ª º¯°æ ¾øÀÌ ±âÁ¸ Å×À̺íÀ» ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡Àº ÀÖÁö¸¸, µ¥ÀÌÅÍ ¾çÀÌ ¸¹À» °æ¿ì ó¸® ¼Óµµ°¡ ´ÊÀ» ¼ö ÀÖ´Ù.

 

±ÇÀå ¹æ½ÄÀº 1¹ø ¶Ç´Â 2¹øÀÓ

-³¡-

 

]]>
SQL Server 2005 SSIS 2011-02-08T00:01:00.000
<![CDATA[ ProcessAdd ¹æ½ÄÀ¸·Î Â÷¿øÀ» ó¸®ÇÒ ¶§ °í·Á »çÇ×]]> ÇѴ뼺 http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSAS&intSeq=4297

ProcessAdd ¹æ½ÄÀ¸·Î Â÷¿øÀ» ó¸®ÇÒ ¶§ °í·Á »çÇ×

Microsoft Premier Field Engineer

ÇѴ뼺

 

Â÷¿øÀ» ó¸®ÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ ¸î °¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.

              ProcessFull – Â÷¿øÀ» ´Ù½Ã Àüü ó¸®ÇÑ´Ù. ÀÌ ¶§, Â÷¿øÀ» ÂüÁ¶ÇÏ´Â(Â÷¿øÀ» »ç¿ëÇÏ´Â) ÃøÁ¤°ª ±×·ìÀº ¹Ìó¸® »óÅÂ(Unprocessed)·Î µÇ±â ¶§¹®¿¡ ´Ù½Ã ó¸®ÇØ ÁÖ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù.

              ProcessData – Â÷¿øÀÇ µ¥ÀÌÅ͸¸ Àç ó¸®ÇÑ´Ù.

              ProcessIndexes – Â÷¿øÀÇ À妽º¸¸ Àç ó¸®ÇÑ´Ù.

              ProcessUpdate – Â÷¿øÀÇ º¯°æµÈ µ¥ÀÌÅÍ¿¡ ´ëÇÑ Ã³¸®(»ðÀÔ, º¯°æ, »èÁ¦) ÀÛ¾÷À» ÇÑ´Ù.

              ProcessAdd – Â÷¿ø¿¡ »õ·Î Ãß°¡µÈ µ¥ÀÌÅÍ¿¡ ´ëÇÑ Ã³¸®(»ðÀÔ) ÀÛ¾÷À» ÇÑ´Ù.

 

 

BIDS¿¡¼­ Â÷¿øÀ» ¸¸µé°Å³ª, SSMS¿¡¼­ ó¸® ÀÛ¾÷À» ¼öÇàÇÒ ¶§ÀÇ ±âº» ¹æ½ÄÀº ProcessUpdateÀÌ´Ù. ÀÌ ¹æ½ÄÀº Â÷¿øÀÇ µ¥ÀÌÅͰ¡ Ãß°¡µÇ°Å³ª, ¼Ó¼º °ªÀÌ º¯°æµÇ°Å³ª »èÁ¦µÇ´Â °æ¿ì¿¡ ÀÌ¿¡ ´ëÇÑ ¹Ý¿µÀ» ÇÏ°Ô µÈ´Ù. ÀÌ Â÷¿øÀ» ÂüÁ¶ÇÏ´Â ÃøÁ¤°ª ±×·ì¿¡ ´ëÇÑ Àç ó¸® ÀÛ¾÷µµ Ưº°È÷ ÇÊ¿äÇÏÁö ¾Ê´Ù. (´Ü, ¾÷µ¥ÀÌÆ®ÀÎ °æ¿ì, À妽º ¹× Áý°è°¡ »èÁ¦µÇ±â ¶§¹®¿¡ º°µµ·Î À妽º¸¦ ¸¸µé¾îÁְųª Lazy Pocessing ±â´ÉÀ» ÀÌ¿ëÇØ¼­ ÀÚµ¿À¸·Î À妽º ¹× Áý°è¸¦ ¸¸µé¾î ÁÖµµ·Ï ÇØ¼­ ¼º´ÉÀ» °³¼±½ÃÄÑ¾ß ÇÑ´Ù.)

 

SSAS Performance Guide¿¡ º¸¸é, ProcessAdd¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº ¼³¸íÀÌ ÀÖ´Ù.

ProcessAdd optimizes ProcessUpdate in scenarios where you only need to insert new members. ProcessAdd does not delete or update existing members. The performance benefit of ProcessAdd is that you can use a different source table or data source view named query that restrict the rows of the source dimension table to only return the new rows. This eliminates the need to read all of the source data. In addition, ProcessAdd also retains all indexes and aggregations (flexible and rigid).

Note: ProcessAdd is only available as an XMLA command.

¸¸¾à, Â÷¿ø Å×ÀÌºí¿¡ °ª º¯°æ ¾øÀÌ »õ·Î¿î µ¥ÀÌÅ͸¸ µé¾î¿À´Â °æ¿ì¿¡´Â ProcessUpdate ´ë½Å ProcessAdd°¡ ´õ ³´´Ù¶ó´Â °ÍÀÌ´Ù. ¶ÇÇÑ, ProcessAdd´Â ÀÏ¹Ý »ç¿ëÀÚ UI È­¸é¿¡¼­´Â ó¸®ÇÒ ¼ö ¾øÀ¸¸ç, XMLA ¸í·ÉÀ¸·Î¸¸ °¡´ÉÇÏ´Ù¶ó´Â °ÍÀÌ´Ù.

 

ÀÌ Ã³¸® ¹æ½Ä¿¡ ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ´Ù.

 

¿ì¼± ´ÙÀ½°ú °°ÀÌ °£´ÜÇÑ Â÷¿ø Å×À̺íÀ» Çϳª ¸¸µé¾îº¸ÀÚ.

use tempdb

go

 

create table DimensionMember

(

      member_id int not null primary key,

      gen_type char(1) not null

)

go

 

ÀÌ Â÷¿ø Å×À̺íÀ» ÀÌ¿ëÇØ¼­ BIDS¿¡¼­ °£´ÜÈ÷ ´ÙÀ½°ú °°ÀÌ Â÷¿øÀ» ¸¸µé¾îº¸ÀÚ.

 


Analysis Services
¼­¹ö¿¡ ¹èÆ÷ÇÑ ´ÙÀ½, SSMA¿¡¼­ ´ÙÀ½°ú °°ÀÌ Ã³¸® ÀÛ¾÷À» ¼öÇàÇØ º¸ÀÚ.



»ó´Ü¿¡
ÀÖ´Â Script ¹öưÀ» Ŭ¸¯Çϸé ÀÌ Ã³¸® ÀÛ¾÷¿¡ ´ëÇÑ XML/A Script¸¦ »ý¼º½Ãų ¼ö ÀÖ´Ù.

<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">

  <Parallel>

    <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200">

      <Object>

        <DatabaseID>ProcessTest</DatabaseID>

        <DimensionID>Dimension Member</DimensionID>

      </Object>

      <Type>ProcessUpdate</Type>

      <WriteBackTableCreation>UseExisting</WriteBackTableCreation>

    </Process>

  </Parallel>

</Batch>

 

ÀÌÁ¦, ÀÌ Å×ÀÌºí¿¡ ´ÙÀ½°ú °°Àº µ¥ÀÌÅ͸¦ ÀÔ·ÂÇϰí, ó¸® ÀÛ¾÷À» ÇÑ ÈÄ, Â÷¿ø µ¥ÀÌÅ͸¦ »ìÆìº¸ÀÚ.

insert into DimensionMember values (1, 'M')

go

 

insert into DimensionMember values (2, 'M')

go

 

 

 


 

Member ID °ªÀÌ ´Ù¸¥ ³²(M) µ¥ÀÌÅÍ 2°³°¡ µé¾î°¬À¸¸ç, ProcessUpdate ó¸® ½Ã À§¿Í °°ÀÌ Á¤»óÀûÀ¸·Î 󸮰¡ µÇ¾ú´Ù.

 

ÀÌÁ¦, ¿©±â¿¡ µ¥ÀÌÅ͸¦ Çϳª ´õ Ãß°¡ÇÑ ´ÙÀ½, ó¸® ¹æ½ÄÀ¸·Î ProcessUpdate ´ë½Å ProcessAdd·Î ÇØ º¸ÀÚ.

insert into DimensionMember values (3, 'M')

go

 

<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">

  <Parallel>

    <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200">

      <Object>

        <DatabaseID>ProcessTest</DatabaseID>

        <DimensionID>Dimension Member</DimensionID>

      </Object>

      <Type>ProcessAdd</Type>

      <WriteBackTableCreation>UseExisting</WriteBackTableCreation>

    </Process>

  </Parallel>

</Batch>

 

´ÙÀ½°ú °°Àº ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.

<return xmlns="urn:schemas-microsoft-com:xml-analysis">

  <results xmlns="http://schemas.microsoft.com/analysisservices/2003/xmla-multipleresults">

    <root xmlns="urn:schemas-microsoft-com:xml-analysis:empty">

      <Exception xmlns="urn:schemas-microsoft-com:xml-analysis:exception" />

      <Messages xmlns="urn:schemas-microsoft-com:xml-analysis:exception">

        <Warning WarningCode="1092550658" Description="Errors in the OLAP storage engine: A duplicate attribute key has been found when processing: Table: 'dbo_DimensionMember', Column: 'gen_type', Value: 'M'. The attribute is 'Gen Type'." Source="Microsoft SQL Server 2008 R2 Analysis Services" HelpFile="" />

        <Error ErrorCode="3239837698" Description="Server: The operation has been cancelled." Source="Microsoft SQL Server 2008 R2 Analysis Services" HelpFile="" />

      </Messages>

    </root>

  </results>

</return>

 

´Ü¼øÈ÷ µ¥ÀÌÅÍ Ãß°¡¸¸ µÇ´Â °æ¿ì¶ó¸é, ProcessUpdate ´ë½Å ProcessAdd°¡ ´õ ÁÁ´Ù°í Çߴµ¥, ÀÌ·¯ÇÑ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. °á·ÐÀº ¡°By Design¡±À̱⠶§¹®ÀÌ´Ù.

 

ProcessUpdate·Î 󸮸¦ ÇÏ°Ô µÇ¸é, ¿ì¼± Key Ư¼ºÀÌ ¾Æ´Ñ GenTypeÀÌ ¸ÕÀú 󸮵ȴÙ. ÀÌ ¶§, ´ÙÀ½°ú °°Àº Äõ¸®°¡ ¼öÇàµÈ´Ù.

SELECT

                                DISTINCT

                [dbo_DimensionMember].[gen_type] AS [dbo_DimensionMembergen_type0_0]

                                FROM [dbo].[DimensionMember] AS [dbo_DimensionMember]

 

±×·± ´ÙÀ½, Key Ư¼ºÀÎ MemberID Ư¼ºÀÌ Ã³¸®µÈ´Ù.

SELECT

                                DISTINCT

                [dbo_DimensionMember].[member_id] AS [dbo_DimensionMembermember_id0_0],[dbo_DimensionMember].[gen_type] AS [dbo_DimensionMembergen_type0_1]

                                FROM [dbo].[DimensionMember] AS [dbo_DimensionMember]

 

Profiler¿¡¼­ º¸¸é À§ÀÇ ¼ø¼­´ë·Î Äõ¸®°¡ È£ÃâµÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.


 

±×·±µ¥, ProcessAdd·Î ó¸®ÇÏ°Ô µÇ¸é ´ÙÀ½°ú °°ÀÌ ÇϳªÀÇ Äõ¸®¸¸ ¼öÇàµÈ´Ù.

SELECT

                                DISTINCT

                [dbo_DimensionMember].[gen_type] AS [dbo_DimensionMembergen_type0_0]

                                FROM [dbo].[DimensionMember] AS [dbo_DimensionMember]

 

 

 


Áï
, Äõ¸® Çϳª·Î Â÷¿ø Å×À̺íÀÇ ¸ðµç µ¥ÀÌÅ͸¦ ´Ù Àоî¿Í¼­ °¢ Ư¼º º°·Î ó¸®ÇÏ´Â ¹æ½ÄÀ̶ó´Â °ÍÀÌ´Ù.

 

Âü°í·Î ÀÌ¿Í °°Àº ó¸® ¹æ½ÄÀº Â÷¿øÀ» ó¸®ÇÒ ¶§, ProcessGroupÀ» By Attribute (±âº»°ªÀÓ) ´ë½Å By Table·Î ÇßÀ» ¶§¿Í µ¿ÀÏÇÑ ÇüÅÂÀÌ´Ù.



ÀÌ·¸°Ô
¼³Á¤ÇÏ´Â ÀÌÀ¯´Â °¢ Â÷¿ø º°·Î °³º° Äõ¸®¸¦ ½ÇÇàÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ÇϳªÀÇ Äõ¸®·Î ¸ðµç Ư¼ºÀ» ó¸®Çؼ­ Äõ¸®¸¦ Àоî¿À´Â ½Ã°£À» ÁÙÀ̱â À§ÇÔÀÌ´Ù. (°¡±ÞÀû »ç¿ëÇÏÁö ¾Ê´Â´Ù.)

 

¾î·µç, ProcessUpdate·Î ó¸®ÇÏ¸é °¢ Ư¼º º°·Î SELECT distinct Äõ¸®¸¦ ¼öÇàÇØ¼­ UniqueÇÑ ÁýÇÕÀ» ¸¸µé¾î¼­ À̸¦ »ç¿ëÇÏ´Â ¹æ½ÄÀε¥, ProcessAdd·Î ó¸®Çϸé Â÷¿øÀÇ µ¥ÀÌÅ͸¦ ¸ðµÎ Àо ó¸®Çϱ⠶§¹®¿¡, Å×À̺íÀÇ Primary KeyÀÎ MemberID¿¡ ´ëÇØ¼­´Â UniqueÇÏÁö¸¸, GenTypeÀÎ °æ¿ì¿¡´Â UniqueÇÏÁö ¾Ê±â ¶§¹®¿¡ ¿¡·¯°¡ ¹ß»ýÇÏ´Â °ÍÀÌ´Ù.

 

±×·³ ¾î¶»°Ô ó¸®ÇØ¾ß ÇÒ±î?

1)       Â÷¿øÀÇ ErrorConfiguration ¼Ó¼º Áß, Duplicate keyÀÇ ¼Ó¼ºÀ» ReportAndStop¿¡¼­ IgnoreError·Î º¯°æÇÑ´Ù.



´Ü
, ÀÌ·¸°Ô Çϸé Â÷¿øÀÇ ¸ðµç Ư¼º¿¡ ´ëÇØ¼­ Àû¿ëµÇ±â ¶§¹®¿¡, ½Ç¼ö·Î Áߺ¹ µ¥ÀÌÅͰ¡ ¹ß»ýÇÑ °æ¿ì¿¡µµ ¹«½ÃµÇ±â ¶§¹®¿¡ À߸øµÈ µ¥ÀÌÅͰ¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. (Data Double MappingÀ̳ª, Áߺ¹ ¸ÅÇÎ µî)

 

2)       ´Ù¸¥ ¹æ¹ýÀº, ÀÌ¿Í °°ÀÌ Æ¯¼º º°·Î UniqueÇÏÁö ¾Ê´Â °æ¿ì¿¡´Â ProcessAdd¸¦ »ç¿ëÇÏÁö ¸»°í ±×³É ProcessUpdate¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ProcessAdd°¡ ó¸® ¼Óµµ´Â Á¶±Ý °³¼±µÉ ¼ö´Â ÀÖÁö¸¸ ¿©·¯ °í·Á »çÇ×µéÀÌ ¸¹±â