날짜 포맷에 맞추기(YYYYMMDD, YYYY-MM-DD)

날짜 포맷을 자유자재로 포맷 형식으로 변형해서 사용 할 수 있는 것입니다.
유용할 것 같네요 ^.^

private function currentDate(dateType:String):String{
     var currentDate:Date = new Date();
     var dateFormat:DateFormatter = new DateFormatter();
     dateFormat.formatString=dateType;
               
     return dateFormat.format(currentDate);
}

<mx:Button label="오늘 날짜 출력(YYYY-MM-DD)" click="mx.controls.Alert.show(currentDate('YYYY-MM-DD'));"
            fontSize="11"/>









출처 : http://cafe.naver.com/ArticleRead.nhn?clubid=10833316&page=1&boardtype=L&articleid=15634

by 지식공유 | 2009/04/03 15:11 | Flex Builder 3.0 | 트랙백 | 덧글(0)

입력 문자 제한

<mx:TextInput x="111" y="97" id="txtTrg" restrict="ㄱ-힣"/> <== 한글만 입력 가능함

리스트 제한은 아래와 같음...

restrict = "ㄱ-힣" : 한글만 입력가능.
restrict = "A-z" : 영어만 입력가능.
restrict = "0-9" : 숫자만 입력가능.
restrict = "0-9\-" : 숫자와 '-'만 입력가능.
restrict = "^a-z" : 소문자 a부터 z까지 제외한 모든문자 입력가능.
restrict = "A-z0-9\@\." : 이메일 형식만 입력가능.
restrict = "
\\\" : '\' 문자만 입력가능.
restrict = "\^" : '^' 문자만 입력가능.

출처 : http://cafe.naver.com/ArticleRead.nhn?clubid=16213485&page=1&searchtype=1&query=restrict&searchdate=all&articlemedia=0&sortby=date&articleid=881

by 지식공유 | 2009/03/26 17:31 | 트랙백 | 덧글(0)

Timer 이벤트 사용하여 시험 경과 시간 체크하기

Timer 클래스를 이용한 시험 시간 체크 프로그램입니다.

[시험 시작] 버튼을 클릭하면 1분 10초 간은 하단에 남은 시간을 보여 주다, 경과 시간이 지남면 그림-2 와 같이 메시지 창이
나오면서 시험이 종료됩니다.

                                                                  [그림-1 시험 중]                              

                                                              [그림-2 시험 종료]



by 따시쿵 | 2009/03/23 10:34 | Flex Builder 3.0 | 트랙백 | 덧글(0)

프로젝트 제안이란?

안녕하세요.

프로젝트를 준비중이거나 진행중인데 의뢰를 하고 싶으실 때는 여기에 기입해 주세요.

작업 가능한 범주는 다음과 같습니다.
1. 웹 설계, 개발 - asp, javascript, flex 3.0
2. 디비 설계 및 개발 - MS SQL 2000, MS SQL 2005

설계에서부터 개발까지 작업이 가능하니 메모 남겨 주시면 바로 연락 드리겠습니다.

즐거운 한 주 되세요.

by 따시쿵 | 2009/03/09 10:39 | 프로젝트 제안란 | 트랙백 | 덧글(0)

AS3.0 을 이용한 xml 파일 가져오기

인터넷의 rss, xml 파일을 읽어서 데이타를 저장할 필요가 있습니다.
이 경우에 다음을 사용 할 수 있습니다.
1. 화면 구성 mxml : XMLRead.mxml
2. xml 파일을 읽는 부분: URLRequestObj.as
3. xml ==> arraycollection 으로 변환하는 부분 : XMLDeserializer.as
4. 가져올 xml 파일 : names.xml
5. style sheet 파일 : XMLStyle.css
파일 안에 설명이 있으니 다운 받아서 경로만 설정해서 사용하시면 됩니다.

XMLRead.mxml
names.xml
URLRequestObj.as
XMLDeserializer.as
XMLStyle.css

by 따시쿵 | 2008/11/21 17:21 | Flex Builder 3.0 | 트랙백 | 덧글(0)

ActionScript 와 자바 스크립트와의 통신

플렉스를 개발하다보면 swf 파일을 포함하고 있는 컨테이너와 통신을 할 필요가 있습니다.
그런 경우, 1. 액션스크립트에서 ==> 자바 스크립트 함수 호출하는 경우
2. 자바 스크립트에서 ==> 액션스크립트 함수 호출하는 경우가 있습니다.
1. 액션스크립트에서 ==> 자바 스크립트 함수 호출하는 경우
[설 명] : 플래쉬에서 숫자를 입력하고 [계산] 버튼을 클릭하면 자바 스크립트에서 계산을 하고
다시 플래쉬에 입력하는 형태.
[ActionSacript] : 호출하는 함수
<mx:Script>
<![CDATA[
import flash.external.ExternalInterface; // 외부 함수를 호출하기 위한 필수 클래스
// addNumbers : 자바 스크립트 함수
// 자바 스트립트 함수 파라미터 : 숫자인 파라미터 2개
private function calcu():void
{
var result:int = ExternalInterface.call("addNumbers", int(text1.text), int(text2.text));
text3.text = result.toString();
trace(result);
}
]]>
</mx:Script>
<mx:HBox x="10" y="10" width="100%">
<mx:TextInput width="79" id="text1"/>
<mx:Label text="+"/>
<mx:TextInput width="79" id="text2"/>
<mx:Label text="="/>
<mx:TextInput width="81" id="text3"/>
<mx:Spacer width="5%" height="100%"/>
<mx:Button label="계 산" click="calcu();"/>
</mx:HBox>
[Javascript] : 호출당하는 함수
<script language="JavaScript">
// adds two numbers, and sends the result back to ActionScript
function addNumbers(num1, num2)
{
return (num1 + num2);
}
</script>
2. 자바 스크립트에서 ==> 액션스크립트 함수 호출
[Javascript] : 호출하는 함수
<script language="javascript" type="text/javascript">
<!--
function myFlexFunction()
{
var content = document.getElementById("textarea1").value;
window.document.title = content;
// 플래쉬 아이디에 내부 매칭 함수 호출함...
ExternalInterfaceExample.myFlexFunction(content);
}
//-->
</script>
[ActionSacript] : 호출당하는 함수
<mx:Script>
<![CDATA[
import flash.external.ExternalInterface; //외부 인터페이스 핵심 클래스
private function init():void
{
trace("init");
ExternalInterface.addCallback("myFlexFunction", callMe); // 외부 함수와 내부 함수 매칭
}
// 실제 호출당하는 함수
public function callMe(name:String):void
{
content.text = name; // 실제 플렉스 내부 컨트롤에 매칭함
}
]]>
</mx:Script>
<mx:Panel x="0" y="0" width="100%" height="100%" layout="absolute" title="ExternalInterface 예제 테스트" fontFamily="굴림">
<mx:TextArea x="10" y="40" width="100%" height="100%" id="content"/>
</mx:Panel>
참고로 화면 캡쳐해서 올림니다...
상단은 플래쉬이고 하단은 html 입니다.
1. 플래쉬에서 2번 + 3번 입력하고 [계산] 버튼 클릭시 4번에 계산된 값이 보여짐.
2. 하단의 html textarea 에서 컨텐츠를 입력하고 [컨테이너에서 플렉스 값 전달] 버튼을 클릭하면
상단의 플렉스 6번 textarea 에 보여짐.

ExternalInterfaceExample.zip

by 따시쿵 | 2008/11/10 14:56 | Flex Builder 3.0 | 트랙백 | 덧글(1)

http를 이용한 파일 가져오기

인터넷 작업을 하더보면 타 사이트의 자바스트립트나 스타일쉬트를 보고 싶을 경우가 종종 있습니다.
그런 경우에는 다음의 스크립트를 이용하면 각 파일별 생성이 되어서 내용을 확인 해 볼수가 있습니다.
다음 예제에서는 23개 파일을 가져오는 예제임...
// urllib 임포트
import urllib
// 가져올 http full name을 스트링으로 리스트에 입력하기
url = ["http://www.adobe.com/ubi/template/identity/adobe/screen.css", "http://www.adobe.com/ubi/template/identity/product.creativesuite/screen.css","http://www.adobe.com/ubi/template/identity/product.creativesuite/screen/pocket.css","http://wwwimages.adobe.com/www.adobe.com/ubi/template/identity/lib/prototype.js","http://wwwimages.adobe.com/www.adobe.com/ubi/template/identity/lib/prototype.js","http://www.adobe.com/ubi/template/identity/adobe.js","http://wwwimages.adobe.com/www.adobe.com/ubi/template/identity/lib/prototype.js","http://wwwimages.adobe.com/www.adobe.com/ubi/template/identity/lib/sifr3-r419/css/sIFR-screen.css","http://wwwimages.adobe.com/www.adobe.com/ubi/template/identity/lib/sifr3-r419/css/sIFR-print.css","http://wwwimages.adobe.com/www.adobe.com/ubi/template/identity/lib/sifr3-r419/js/source/sifr.js","http://www.adobe.com/ubi/template/identity/adobe.js","http://www.adobe.com/ubi/template/identity/adobe/screen/gnav.black.css","http://www.adobe.com/ubi/template/identity/product.creativesuite/xnav.js","http://www.adobe.com/lib/com.adobe/global.js","http://www.adobe.com/lib/com.adobe/template/data/data-rss.css","http://www.adobe.com/lib/spry/Spry_1_6_1_022408/includes_minified/xpath.js","http://www.adobe.com/lib/spry/Spry_1_6_1_022408/includes_minified/SpryData.js","http://www.adobe.com/lib/spry/Spry_1_6_1_022408/includes_minified/SpryHTMLDataSet.js","http://www.adobe.com/lib/spry/Spry_1_6_1_022408/includes_minified/SpryDataSetShell.js","http://www.adobe.com/lib/spry/Spry_1_6_1_022408/includes_minified/SpryPagedView.js","http://www.adobe.com/lib/spry/Spry_1_6_1_022408/includes_minified/SpryDOMUtils.js","http://www.adobe.com/lib/com.adobe/module/DataTableRss/DataTableRss.js","http://www.adobe.com/lib/com.adobe/module/DataTableRss/DataTableRss.xmlDataSourceStaticOverrideByType.js",http://www.adobe.com/lib/com.adobe/template/comm_help/support.product.css]

index = 0
for i in url:
// 가져올 파일을 열기
a = urllib.urlopen(i)
filename = str(index) + ".txt"
// 파일에 저장하기
f = open(filename, "w")
f.write (a.read())
f.close()

index = index + 1

by 따시쿵 | 2008/10/23 14:11 | Python | 트랙백 | 덧글(0)

이미지 사이즈에 맞게 팝업창 띄우면서 조절하는 스크립트

사용법은 OpenImage(s) s에 이미지경로와 이미지명만 넣어주세요...
<img src="작은 썸네일이미지" border="0" omClick="OpenImage('이미지경로/이미지이름');" style="cursor:hand;">
<script language="javascript">
<!--
/***********************************
/ 이미지 사이즈에 맞게 새창띄우기
/***********************************/
function OpenImage(s){
//
// 변수 정의
//
srcImg = new Image();
clientWidth = screen.width;
clientHeight = screen.height;
srcImg.src = s;
//
// 열려는 파일을 이름
//
var srcFileName = srcImg.src.substr(srcImg.src.lastIndexOf("/")+1, srcImg.src.length);
//
// 새창 띄우고 이미지 삽입
//
win = window.open("","","width=15,height=15,scrollbars=no,resizable=no,left="+(clientWidth/2-15)+",top="+(clientHeight/2-15)+"");
win.document.writeln("<html>");
win.document.writeln("<head>");
win.document.writeln("<title>"+document.title+" ["+srcFileName+"]</title>");
win.document.writeln("</head>");
win.document.writeln("<body style='margin:0px;' bgcolor='#333333'>");
win.document.writeln("<table border='0' cellpadding='0' cellspacing='0' style='cursor:hand' omclick='self.close()'>");
win.document.writeln(" <tr>");
win.document.writeln(" <td align='center'><img src="+s+" name='winImg' style='cursor:hand' omclick='self.close()' alt='클릭하면 사라집니다'></td>");
win.document.writeln(" </tr>");
win.document.writeln("</table>");
win.document.writeln("</body>");
win.document.writeln("</html>");
srcImg = win.document.winImg;
//
// 이미지가 모두 로딩될때까지 기다림
//
while(true)
if(srcImg.readyState == "complete")
break;

//
// 새창의 크기 설정
//
var winWidth = srcImg.width+10;
var winHeight = srcImg.height+29;
//
// 새창이 띄워질 위치 설정
//
var left = (clientWidth/2)-(srcImg.width/2);
var top = (clientHeight/2)-(srcImg.height/2);
//
// 이미지의 크기 overflow 확인후 새창의 크기와 위치 재설정
//
if(clientWidth <= srcImg.width){
winWidth = clientWidth;
left = 0;
win.document.body.scroll = "auto";
}
if(clientHeight <= srcImg.height){
winHeight = clientHeight-30;
top = 0;
win.document.body.scroll = "auto";
}
//
// 이미지로딩이 끝났음으로 이미지의 크기를 사용할수 있다.
// 해당 이미지의 사이즈에 맞게 윈도우를 재설정한다.
win.moveTo(left, top);
win.resizeTo(winWidth, winHeight);
}
//-->
</script>

image.js

by 따시쿵 | 2008/10/22 16:56 | Javascript | 트랙백 | 덧글(0)

플렉스 이미지 효과내는 예제 목록들

플렉스 이미지 효과내는 예제 목록들
1. Setting effects with ActionScript in Flex
2. Image Manipulation in Flex
3. Rounding the corners of an Image control in Flex using a mask
http://blog.flexexamples.com/2008/09/09/rounding-the-corners-of-an-image-control-in-flex-using-a-mask/#more-792
4. Setting a complete effect on an Image control in Flex
http://blog.flexexamples.com/2008/06/29/setting-a-complete-effect-on-an-image-control-in-flex/#more-689
5. Preventing an image from automatically loading in an Image control in Flex
http://blog.flexexamples.com/2008/06/29/preventing-an-image-from-automatically-loading-in-an-image-control-in-flex/#more-688
6. Maintaining an image’s aspect ratio on an Image control in Flex
http://blog.flexexamples.com/2008/06/28/maintaining-an-images-aspect-ratio-on-an-image-control-in-flex/#more-687
7. Displaying a hand cursor when mousing over a Flex control
http://blog.flexexamples.com/2007/11/18/displaying-a-hand-cursor-when-mousing-over-a-flex-control/
8. Detecting whether an image loaded successfully in Flex
http://blog.flexexamples.com/2007/11/04/detecting-whether-an-image-loaded-successfully-in-flex/
9. Using the Image control as a pop up
http://blog.flexexamples.com/2007/10/18/using-the-image-control-as-a-pop-up/
10. Flex Quick Starts: Building a simple user interface
http://www.adobe.com/devnet/flex/quickstart/adding_effects/
11. Creating a simple image gallery with the Flex TileList control
http://blog.flexexamples.com/2008/03/08/creating-a-simple-image-gallery-with-the-flex-tilelist-control/
12. Image control -- Flex 2.01
http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=controls_059_18.html
13. Skewing an Image control in Flex
14. Disabling container layout for effects
http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=behaviors_068_29.html
15. Image Gallery Component - ImageRail
http://www.flexer.info/2008/05/29/image-gallery-component-imagerail/
16. ImageRail - Adding Click Event, Styles And HandCursor
http://www.flexer.info/2008/06/05/imagerail-adding-click-event-styles-and-handcursor/
17. Tips:three ways to load an image file in Flex
http://ntt.cc/2008/03/09/tips-three-ways-to-load-an-image-file-in-flex.html
18. Using the AnimateProperty effect
Flex 프로젝트명 : AnimateProperty.mxml
19. Flex CoverFlow performance improvement, Flex Carousel Component, and Vertical CoverFlow
20. 이미지 팁(flash & silverlight)
http://www.shinedraw.com/
21. Creating a simple image gallery with the Flex HorizontalList control (redux)
22. 여러가지 예제
http://blog.naver.com/rubberdam?Redirect=Log&logNo=120052663108
23. Flex Roll Over Image with link Component
24. Adding time delay to mouse over events
25. Posts Tagged ‘scroll image flex’
http://www.infuy.com/blogs/alex/?tag=scroll-image-flex
26. Mouseover and Mouseout example
27. CursorManager - Change Mouse Cursor
28. Free ImageZoomer Flex Component!
31. Roll Over Image/Button Examples

by 따시쿵 | 2008/10/22 14:54 | Flex Builder 3.0 | 트랙백 | 덧글(0)

추적 플래그 종류와 사용법

DBCC TRACEON(1204, -1);
DBCC TRACEON(1205, -1)
DBCC TRACEON(3605, -1)
The 1204 flag returns the types of locks participating in the deadlock encountered. The 1205 flag returns more detailed information regarding the statements being run at the time of the deadlock. The 3605 flag sends the trace information to the error log, which the SQLDiag tool will later output to a text file. The "-1" parameter to the command tells SQL Server to apply the trace flag to all connections to the server.
MSDN에 나오는 추적 풀래그 종류와 설명

by 따시쿵 | 2008/07/21 15:34 | SQL Server2005 | 트랙백 | 덧글(0)

[sys].[sp_readerrorlog] 사용법

테스트는 SQL 2005 sp2 에서 적용함
CREATE PROC [sys].[sp_readerrorlog](
@p1 INT = 0
,
@p2 INT =
NULL,
@p3 VARCHAR(255) =
NULL,
@p4 VARCHAR(255) =
NULL)
AS
BEGIN

IF
(NOT IS_SRVROLEMEMBER(N'securityadmin') = 1
)
BEGIN
RAISERROR
(15003,-1,-1, N'securityadmin'
)
RETURN (1
)
END

IF
(@p2 IS
NULL)
EXEC sys.xp_readerrorlog
@p1
ELSE
EXEC
sys.xp_readerrorlog @p1,@p2,@p3,
@p4
END
This procedure takes four parameters:
  1. Value of error log file you want to read: 0 = current, 1 = Archive #1, 2 = Archive #2, etc...
  2. Log file type: 1 or NULL = error log, 2 = SQL Agent log
  3. Search string 1: String one you want to search for
  4. Search string 2: String two you want to search for to further refine the results
출처 : http://www.mssqltips.com/tip.asp?tip=1476

by 따시쿵 | 2008/07/18 10:44 | SQL Server2005 | 트랙백 | 덧글(0)

How To Return a Result Set from a SQL Server 2005 CLR Stored Procedure

CLR Stored Procedure 를 만들고 결과 셋을 가져오는 방법

by 따시쿵 | 2008/07/17 10:43 | SQL Server2005 | 트랙백 | 덧글(0)

sys.sp_addextendedproperty 를 이용한 Data Dictionary 만들기

Set nocount on

DECLARE @TableName nvarchar(35)

DECLARE Tbls CURSOR
FOR

Select distinct Table_name
FROM INFORMATION_SCHEMA.COLUMNS
--put any exclusions here
--where table_name not like '%old'
order by Table_name

OPEN Tbls

PRINT '<HTML><body>'

FETCH NEXT FROM Tbls
INTO @TableName

WHILE @@FETCH_STATUS = 0
BEGIN

PRINT '</br>'
PRINT '<table border="1">'
Print '<B>' + @TableName + '</B>'
PRINT '</br>'
--Get the Description of the table
--Characters 1-250
Select substring(cast(Value as varchar(1000)),1,250) FROM
sys.extended_properties A
WHERE A.major_id = OBJECT_ID(@TableName)
and name = 'MS_Description' and minor_id = 0

--Characters 251-500
Select substring(cast(Value as varchar(1000)),251, 250) FROM
sys.extended_properties A
WHERE A.major_id = OBJECT_ID(@TableName)
and name = 'MS_Description' and minor_id = 0

PRINT '<tr><b>'
--Set up the Column Headers for the Table
PRINT '<td><b>Column Name</b></td>'
PRINT '<td><b>Description</b></td>'
PRINT '<td><b>InPrimaryKey</b></td>'
PRINT '<td><b>IsForeignKey</b></td>'
PRINT '<td><b>DataType</b></td>'
PRINT '<td><b>Length</b></td>'
PRINT '<td><b>Numeric Precision</b></td>'
PRINT '<td><b>Numeric Scale</b></td>'
PRINT '<td><b>Nullable</b></td>'
PRINT '<td><b>Computed</b></td>'
PRINT '<td><b>Identity</b></td>'
PRINT '<td><b>Default Value</b></td>'

--Get the Table Data
SELECT '</b></tr>',
'<tr>',
'<td>' + CAST(clmns.name AS VARCHAR(35)) + '</td>',
'<td>' + substring(ISNULL(CAST(exprop.value AS VARCHAR(255)),''),1,250),
substring(ISNULL(CAST(exprop.value AS VARCHAR(500)),''),251,250) + '</td>',
'<td>' + CAST(ISNULL(idxcol.index_column_id, 0)AS VARCHAR(20)) + '</td>',
'<td>' + CAST(ISNULL(
(SELECT TOP 1 1
FROM sys.foreign_key_columns AS fkclmn
WHERE fkclmn.parent_column_id = clmns.column_id
AND fkclmn.parent_object_id = clmns.object_id
), 0) AS VARCHAR(20)) + '</td>',
'<td>' + CAST(udt.name AS CHAR(15)) + '</td>' ,
'<td>' + CAST(CAST(CASE WHEN typ.name IN (N'nchar', N'nvarchar') AND clmns.max_length <> -1
THEN clmns.max_length/2
ELSE clmns.max_length END AS INT) AS VARCHAR(20)) + '</td>',
'<td>' + CAST(CAST(clmns.precision AS INT) AS VARCHAR(20)) + '</td>',
'<td>' + CAST(CAST(clmns.scale AS INT) AS VARCHAR(20)) + '</td>',
'<td>' + CAST(clmns.is_nullable AS VARCHAR(20)) + '</td>' ,
'<td>' + CAST(clmns.is_computed AS VARCHAR(20)) + '</td>' ,
'<td>' + CAST(clmns.is_identity AS VARCHAR(20)) + '</td>' ,
'<td>' + isnull(CAST(cnstr.definition AS VARCHAR(20)),'') + '</td>'
FROM sys.tables AS tbl
INNER JOIN sys.all_columns AS clmns
ON clmns.object_id=tbl.object_id
LEFT OUTER JOIN sys.indexes AS idx
ON idx.object_id = clmns.object_id
AND 1 =idx.is_primary_key
LEFT OUTER JOIN sys.index_columns AS idxcol
ON idxcol.index_id = idx.index_id
AND idxcol.column_id = clmns.column_id
AND idxcol.object_id = clmns.object_id
AND 0 = idxcol.is_included_column
LEFT OUTER JOIN sys.types AS udt
ON udt.user_type_id = clmns.user_type_id
LEFT OUTER JOIN sys.types AS typ
ON typ.user_type_id = clmns.system_type_id
AND typ.user_type_id = typ.system_type_id
LEFT JOIN sys.default_constraints AS cnstr
ON cnstr.object_id=clmns.default_object_id
LEFT OUTER JOIN sys.extended_properties exprop
ON exprop.major_id = clmns.object_id
AND exprop.minor_id = clmns.column_id
AND exprop.name = 'MS_Description'
WHERE (tbl.name = @TableName and
exprop.class = 1) --I don't wand to include comments on indexes
ORDER BY clmns.column_id ASC

PRINT '</tr></table>'

FETCH NEXT FROM Tbls
INTO @TableName
END

PRINT '</body></HTML>'

CLOSE Tbls
DEALLOCATE Tbls

by 따시쿵 | 2008/07/16 14:38 | SQL Server2005 | 트랙백 | 덧글(0)

윤년 찾는 사용자 정의 함수

로직 해설 : 입력한 년도에 '0228'을 추가해서 하루를 더한 달이 2월달인지, 아닌지로 윤년을 체크
사용자 정의 함수 :
CREATE FUNCTION dbo.fn_IsLeapYear (@year int)
RETURNS bit
AS
BEGIN
RETURN(select case datepart(mm, dateadd(dd, 1, cast((cast(@year as varchar(4)) + '0228') as datetime)))
when 2 then 1
else 0
end)
END
테스트 SQL 문 :
SELECT dbo.fn_IsLeapYear(1900) as 'IsLeapYear?'
SELECT dbo.fn_IsLeapYear(2000) as 'IsLeapYear?'
SELECT dbo.fn_IsLeapYear(2007) as 'IsLeapYear?'
SELECT dbo.fn_IsLeapYear(2008) as 'IsLeapYear?'
결과값 :

by 따시쿵 | 2008/07/16 09:47 | SQL Server2005 | 트랙백 | 덧글(0)

특정 디비에 있는 모든 트랜잭션 kill 시키기

DECLARE @SQL VARCHAR(8000)
SELECT @SQL=COALESCE(@SQL,'')+'Kill '+CAST(spid AS VARCHAR(10))+ '; '
FROM sys.sysprocesses
WHERE DBID=DB_ID('AdventureWorks')
PRINT @SQL --EXEC(@SQL) Replace the print statement with exec to execute

by 따시쿵 | 2008/07/14 11:50 | SQL Server2005 | 트랙백 | 덧글(0)

튜닝 포인트시 체크 사항

추가 튜닝 포인트
· 잠금 문제 해결
- 모든 SELECT 쿼리에 격리수준 조정(테이블명 with (readuncommitted))
· 높은 컴파일 문제 해결
- Ad Hoc 쿼리를 저장 프로시저로 변경
· tbl_quiz_info_gclass PK 변경
- USER_ID 대한 인덱스 필요
- TestSetCode 대한 인덱스 필요
- 기존 제약조건을 유지하기 위해 UNIQUE 제약조건 필요(PK)
· tbl_quiz_test t.testyy+ t.testmm + t.testdd 해당하는 칼럼 추가
- 1000 페이지 이상 쿼리 대부분의 쿼리에서 칼럼을 연산하여 날짜 비교
- 이를 개선하기 위해 t.testyy+ t.testmm + t.testdd 해당하는 칼럼 추가
- 추가한 칼럼을 클러스터형 인덱스로 만들고, 기존 TestCode 비클러스터형(Non-Clustered) 기본키로 변경
- 반드시 수정되어야
· SELECT 절에 사용자 정의 함수 사용 금지
- 쿼리분석기에서는 사용자 정의 함수에 대한 IO 표시되지 않음
- 반드시 프로필러를 통해 확인해야
· 칼럼에 대한 가공 금지
- LEFT(T1.COUNSEL_DATE,6) = '2007' + '06' (X) à T1.COUNSEL_DATE like '200706%' (O)
- SUBSTRING(X1.RECEIPT_DATE, 1, 6)='2007'+'06'(X) à X1.RECEIPT_DATE like '200706%'(O)
- REPLACE(T2.USER_ID,' ','')='06011078' (X) à AND T2.USER_ID='06011078' (O)
· 데드락 문제에 대한 해결
- 데드락의 원인을 찾기 위해 1204 추적 플래그 설정(DBCC TRACEON(1204,-1))
- 데드락이 발생하면 SQL 에러로그에 기록됨
- 원인 규명 1204 추적 플래그 설정해제(DBCC TRACEOFF(1204))

by 따시쿵 | 2008/07/01 16:50 | SQL Server2005 | 트랙백 | 덧글(0)

JSON (JavaScript Object Notation) 에 대한 정보

JSON과 관련해서 ASP 페이지를 기존으로 설명을 한다.
1. 한국어 공식 홈 페이지
2. ASP 에서 JSON 사용을 하기 위한 파일들
첨부 파일1 : JSON_1_3.asp(구 버전) <== 일부 예제를 구동하기 위해서 필요한 파일
첨부 파일2 : JSON_UTIL.asp(최신 버전)
첨부 파일3 : JSON.asp(최신 버전)
3. 예제
<%
Option Explicit
Response.AddHeader "Pragma", "NO-CACHE"
Response.AddHeader "Expires", "0"
%>
<!--#include virtual="/common/JSON.asp"-->
<!--#include virtual="/common/JSON_1_3.asp"-->
<!--#include virtual="/common/JSON_UTIL.asp"-->
<script language="JavaScript" src="/common/json.js"></script>
<%
Dim rs, clsJson , conDB, sRtn_jsonText
set conDB=Server.CreateObject ("ADODB.Connection")
conDB.Open cstrDBConnectionString
'' 클래스 생성
Set clsJson = new JSON
'' 데이터 가져오기
sql="SELECT * FROM GF_SCHEMA.GF_ITEM_NAME"
Set rs = conDB.Execute(sql)
'' 데이터 json형식으로 변경
sRtn_jsonText = clsJson.toJSON("datalist", rs, false)
'' 리소스들 해제
Set rs = Nothing
Set conDB = Nothing
Set clsJson = Nothing
'' 화면에 출력
response.write (trim(sRtn_jsonText))
'' 디비 레코드셋을 가져오는 함수
Function getRecordset(sql)
set getRecordset = conDB.execute(sql)
End Function
%>
JSON에 대한 정보는 웹에 상당히 많이 나와 있으므로 찾아 보시면 됩니다.

JSON_1_3.asp
JSON_UTIL.asp
JSON.asp

by 따시쿵 | 2008/07/01 14:48 | VBScript | 트랙백 | 덧글(0)

Mass Attack Remove 스크립트

-- QnA 올라오는 글이 많은걸 보면 요즘 Mass Attack 기승인것 같네요~
-- 다음과 같은 코드로 <script ~></script> 제거 할수 있습니다
--
-- 자세한 내용은 아래 사이트를 참고하세요
-- Mass Attack FAQ
-- Posted by: Giorgio in SQL, Security, NoScript
--
-- http://hackademix.net/2008/04/26/mass-attack-faq/
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
EXEC(
'update ['+@T+'] set ['+@C+'] = left(
convert(varchar(8000), ['+@C+']),
len(convert(varchar(8000), ['+@C+'])) - 6 -
patindex(''%tpircs<%'',
reverse(convert(varchar(8000), ['+@C+'])))
)
where ['+@C+'] like ''%<script%</script>'''
);
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor

by 따시쿵 | 2008/05/27 20:59 | SQL Server2005 | 트랙백 | 덧글(0)

안녕하세요 ^.^

안녕하세요.
방명록에 많은 글 남겨 주시고 자료 퍼 가시기 바랍니다.
감사합니다.^.^

by 따시쿵 | 2008/04/24 11:35 | 방명록 | 트랙백 | 덧글(0)

세로 데이타 가로로 출력하는 방법

작업을 하다보면 세로 데이타를 가로 출력을 해야 하는 경우가 종종 있다.
즉, 예를 들어서 각 게임별 사용자 수가 저장되어 있는 데이블에서 가로로 출력을
해야 하는 경우에는 특별한 sql문 사용을 해야 한다.
두가지 방법에 대해서 성명을 한다.
1. 예제 데이타는 아래와 같슴

2.
PIVOT 테이블을 이용하는 방법
SELECT regdate, [A] AS '[A]', [B] AS '[B]', [C] AS '[C]', [D] AS '[D]',
[E] AS '[E]', [F] AS '[F]', [G] AS '[G]', [H] AS '[H]'
FROM
(SELECT GAME_CD, USER_C, REGDATE
FROM GF_SCHEMA.CURRENTUSER_LOG) p
PIVOT
(
SUM (USER_C)
FOR GAME_CD IN
( [A], [B], [C], [D], [E], [F], [G], [H] )
) AS pvt
WHERE REGDATE = '200804221020'
2-1. 결과값


2-2. 예상실행 계획


3.
CASE 문을 이용하는 방법
SELECT REGDATE, SUM(CASE GAME_CD WHEN 'A' THEN USER_C ELSE 0 END) AS [A],
SUM(CASE GAME_CD WHEN 'B' THEN USER_C ELSE 0 END) AS [B],
SUM(CASE GAME_CD WHEN 'C' THEN USER_C ELSE 0 END) AS [C],
SUM(CASE GAME_CD WHEN 'D' THEN USER_C ELSE 0 END) AS [D],
SUM(CASE GAME_CD WHEN 'E' THEN USER_C ELSE 0 END) AS [E],
SUM(CASE GAME_CD WHEN 'F' THEN USER_C ELSE 0 END) AS [F],
SUM(CASE GAME_CD WHEN 'G' THEN USER_C ELSE 0 END) AS [G],
SUM(CASE GAME_CD WHEN 'H' THEN USER_C ELSE 0 END) AS [H]
FROM GF_SCHEMA.CURRENTUSER_LOG
WHERE REGDATE = '200804221020'
GROUP BY REGDATE
3-1. 결과값

3-2. 예상실행 계획

두가지 모두 비슷한 결과를 보이는 것으로 봐서는 편한 것으로 선택해서 사용하면 되겠슴

by 따시쿵 | 2008/04/22 12:21 | SQL Server2005 | 트랙백 | 덧글(0)

T-SQL 문에서 사용 가능한 함수 모음

(1) 행 집합 함수
: 행 집합 함수는 Transact-SQL 문에서 테이블 참조 대신 사용할 수 있는 개체를 반환합니다. 여기서는 온라인 도움말에 설명된 내용만을 간단하게 기재하고 기타 설명은 생략합니다.
  • CONTAINSTABLE : 문자 기반 데이터 형식이 포함된 열에서 특정 단어나 구와 정확히 일치하거나 비슷하게 일치하는 단어를 검색하거나, 서로 근접한 단어 검색, 가중치 검색에서 일치한 0개 이상의 행이 있는 테이블을 반환합니다. CONTAINSTABLE은 일반 테이블 이름처럼 SELECT 문의 FROM 절에서 참조될 수 있습니다.[온라인 도움말 인용]
  • FREETEXTTABLE : 지정된 freetext_string의 텍스트와 의미는 일치하지만 단어는 정확히 일치하지 않는 값의 문자 기반 데이터 형식이 포함된 열에 대해 행이 없거나 하나 이상인 테이블을 반환합니다. FREETEXTTABLE은 일반 테이블 이름처럼 SELECT 문의 FROM 절에서 참조될 수 있습니다. [온라인 도움말 인용]
  • OPENDATASOURCE : 연결된 서버 이름을 사용하지 않고 네 부분으로 된 개체 이름의 일부로 임의 연결 정보를 제공합니다. [온라인 도움말 인용]
  • OPENQUERY : OLE DB 데이터 원본인 주어진 연결된 서버에 대해 지정된 통과 쿼리를 실행합니다. OPENQUERY 함수는 테이블 이름인 것처럼 쿼리의 FROM 절에서 참조할 수 있습니다. 또한 OLE DB 공급자의 기능에 따라 INSERT, UPDATE, DELETE 문의 대상 테이블로도 OPENQUERY 함수를 참조할 수 있습니다. 쿼리는 여러 결과 집합을 반환하지만 OPENQUERY는 첫 번째 것만 반환합니다. [온라인 도움말 인용]
  • OPENROWSET : OLE DB 데이터 원본에서 원격 데이터를 액세스하는 데 필요한 모든 연결 정보를 포함합니다. 이 방법은 OLE DB를 사용하여 원격 데이터에 연결하고 액세스하는 일회성의 임시 방법이며 연결된 서버에서 테이블을 액세스하는 방법의 대체 방법입니다. OPENROWSET 함수는 테이블 이름인 것처럼 쿼리의 FROM 절에서 참조할 수 있습니다. 또한 OLE DB 공급자의 기능에 따라 INSERT, UPDATE, DELETE 문의 대상 테이블로도 OPENROWSET 함수를 참조할 수 있습니다. 쿼리는 여러 결과 집합을 반환하지만 OPENROWSET는 첫 번째 것만 반환합니다. [온라인 도움말 인용]
  • OPENXML : OPENXML은 XML 문서에 대한 행 집합 뷰를 제공합니다. OPENXML이 행 집합 공급자이므로 테이블, 뷰 또는 OPENROWSET 함수 등의 행 집합 공급자가 표시될 수 있는 Transact-SQL 문에 OPENXML을 사용할 수 있습니다. [온라인 도움말 인용]
(2) 집계 함수
: 집계 함수는 값 집합에 대한 계산을 수행하고 단일 값을 반환합니다. COUNT 를 제외한 집계 함수는 Null 값을 무시합니다. 집계 함수는 SELECT 문의 GROUP BY 절과 함께 사용하는 경우가 많습니다.
집계 함수는 다음 경우에서만 식으로 사용할 수 있습니다.
  • SELECT 문의 선택 목록(하위 쿼리 또는 외부 쿼리)
  • COMPUTE 또는 COMPUTE BY 절
  • HAVING 절
Transact-SQL 프로그래밍 언어는 다음과 같은 집계 함수를 제공합니다.
AVG MAX
BINARY_CHECKSUM MIN
CHECKSUM SUM
CHECKSUM_AGG STDEV
COUNT STDEVP
COUNT_BIG VAR
GROUPING VARP
(3) 스칼라 함수
단일 값에 대해 작동하며 단일 값을 반환합니다. 스칼라 함수는 식이 유효한 경우 언제든지 사용할 수 있습니다. 다음은 스칼라 함수를 범주화 한 표입니다.
함수 범주 설명
구성 함수 현재 구성에 대한 정보를 반환합니다.
커서 함수 커서에 대한 정보를 반환합니다.
날짜 및 시간 함수 날짜 및 시간 입력 값에 대한 작업을 수행하며 문자열, 숫자 또는 날짜와 시간 값을 반환합니다.
수치 연산 함수 함수에 매개 변수로 제공되는 입력 값을 기반으로 하여 계산 작업을 수행하고 숫자 값을 반환합니다.
메타데이터 함수 데이터베이스와 데이터베이스 개체에 대한 정보를 반환합니다.
보안 함수 사용자와 역할에 대한 정보를 반환합니다.
문자열 함수 문자열(char 또는 varchar) 입력 값에 대한 작업을 수행하고 문자열이나 숫자 값을 반환합니다.
시스템 함수 Microsoft SQL Server의 값, 개체, 설정에 대한 작업을 수행하고 그에 대한 정보를 반환합니다.
시스템 통계 함수 시스템에 대한 통계 정보를 반환합니다.
텍스트 및 이미지 함수 텍스트 또는 이미지 입력 값이나 열에 대한 작업을 수행하고 그 값에 대한 정보를 반환합니다.
여기서는 각각의 함수들중에서 자주 사용되는 것들을 기준으로 간단히 살펴 보도록 하겠습니다.
1) 구성 함수(Configuration Functions)
: 구성 함수는 서버의 각종 구성에 대한 정보를 파악할 수 있는 내용들이 다수 있습니다. 각각의 함수들에 대한 실행 예제와 각각의 세부 사항은 [온라인 도움말]을 참고 하시기 바랍니다. 간단히 함수의 종류와 역할을 살펴 보면 다음 표와 같습니다.
함수 설명
@@DATEFIRST 매주 첫번째 요일의 값을 반환
@@DBTS 현재 데이터베이스에 대한 timestamp 데이터 형식의 값을 반환
@@LANGID 현재 사용중인 언어의 로컬 언어 식별자(ID) 를 반환
@@LANGUAGE 현재 사용중인 언어의 이름 반환
@@LOCK_TIMEOUT 현재 세션의 현재 잠금 시간 제한 설정을 밀리초 단위로 반환
@@MAX_CONNECTIONS 허용가능한 최대 동시 사용자 연결 수 반환
@@MAX_PRECISION decimal 과 numeric 데이터 형식의 정밀도 수준을 반환
@@NESTLEVEL 현재 저장 프로시져 실행의 중첩 수준을 반환
@@OPTIONS 현재 SET 옵션에 대한 정보를 반환
@@REMSERVER 원격 데이터베이스 서버 이름 반환
@@SERVERNAME 서버의 이름 반환
@@SERVICENAME 서버 인스턴스 이름 반환
@@SPID 현재 사용자 프로세스의 서버 프로세스 식별자를 반환
@@TEXTSIZE 현재 TEXTSIZE 옵션 값 반환
@@VERSION 서버의 날짜, 버전, 프로세서 유형을 반환
2) 커서 함수(Cursor Functions)
: 커서 함수에 대한 내용 또한 간단한 그 역할과 함수의 종류만을 확인하여 보도록 하겠습니다.
함수 설명
@@CURSOR_ROWS 현재 연결에서 마지막으로 열린 커서에 있는 자격을 갖춘 행의 수를 반환
CURSOR_STATUS 저장 프로시저의 호출자가 프로시저에서 주어진 매개 변수에 대해 커서 및 결과 집합을 반환했는지를 결정할 수 있는 스칼라 함수
@@FETCH_STATUS 현재 연결로 열린 모든 커서에 대해 실행된 마지막 FETCH 문의 상태를 반환
3) 날짜 및 시간 함수(Date and Time Functions)
: 함수중에서 가장 자주 쓰이는 함수 중에 하나인 날짜 및 시간에 관련된 함수들은 무척이나 자주 사용되기 때문에 반드시 한번쯤은 관심을 기울여야만 하겠습니다. 간단히 각 함수들의 종류와 설명을 참고 하시고 아래의 각종 예제를 통해서 자주 사용되는 함수들을 실습해 보시기 바랍니다.
함수 설명
DATEADD 지정된 날짜에 시간을 더한다.
DATEDIFF 두 날짜 사이의 차이를 계산
DATENAME 특정 날짜 부분을 나타내는 문자열 반환
DATEPART 지정된 특정 날짜 부분을 나타내는 정수를 반환
DAY 지정한 날짜의 일 부분을 나타내는 정수를 반환
GETDATE 현재 시스템 날짜와 시간을 datetime 값의 Microsoft® SQL Server™ 표준 내부 형식으로 반환
GETUTCDATE 현재 UTC 시간(국제 표준시 또는 그리니치 표준시)을 나타내는 datetime 값을 반환
MONTH 지정된 날짜의 월 부분-+을 나타내는 정수를 반환
YEAR 지정한 날짜의 연도 부분을 표시하는 정수를 반환
4) 수치 연산 함수(Mathematical Functions)
: 수치 연산에 관련된 함수들 또한 매우 자주 사용되는 함수들입니다. 아래의 종류와 설명을 참고 하시고 필요할때 다시금 찾아서 사용하시면 되겠습니다. 특히나 자주 사용되는 함수들은 역시 실습을 위해 설명을 하였으니 실습을 통해서 그 사용법을 확인해 보시기 바랍니다.
함수 설명
ABS 지정한 수식의 절대값을 양수로 반환
ACOS 코사인 값이 지정한 float 식인 각도를 라디안으로 반환(아크코사인)
ASIN 사인 값이 지정한 float 식인 각도를 라디안으로 반환(아크사인)
ATAN 탄젠트 값이 지정한 float 식인 각도를 라디안으로 반환(아크탄젠트)
ATN2 탄젠트 값이 지정한 두 개의 float 식 사이에 속하는 각도를 라디안으로 반환(아크탄젠트)
CEILING 지정한 숫자 식 이상인 최소 정수를 반환
COS 지정한 식에서 지정한 각도의 삼각법 코사인을 라디안 단위로 반환하는 수치 연산 함수
COT 지정한 float 식에서 지정한 각도의 삼각법 코탄젠트를 라디안 단위로 반환하는 수치 연산 함수
DEGREES 지정된 라디안 단위의 각도에 대해 해당하는 각도를 도 단위로 반환
EXP 특정 float 식의 지수 값을 반환
FLOOR 주어진 숫자 식 이하인 최대 정수를 반환
LOG 주어진 float 식의 자연 로그를 반환
LOG10 주어진 float 식의 기수 10 로그를 반환
PI PI의 상수 값을 반환
POWER 주어진 식의 값을 지정된 거듭제곱으로 반환
RADIANS 숫자 식을 도 단위로 입력하면 라디안으로 반환
RAND 0부터 1까지의 임의 float 값을 반환
ROUND 특정 길이나 정밀도로 반올림한 숫자 식을 반환
SIGN 주어진 식의 양수(+1), 영(0) 또는 음수(-1) 기호를 반환
SIN 특정 각도(라디안)의 삼각 사인을 근사 숫자(float) 식으로 반환
SQUARE 특정 식의 제곱을 반환
SQRT 특정 식의 제곱근을 반환
TAN 입력한 식의 탄젠트를 반환
5) 메타데이터 함수(Meta Data Functions)
: 데이터베이스와 데이터베이스 개체에 대한 정보를 반환하는 메타데이터 함수들은 다른 기타 함수들에 비해서 사용빈도가 다소 낮지만 시스템의 튜닝에 있어서 유용한 정보를 제공하는 함수들이 많이 있습니다. 한번쯤은 확인해 보시기 바랍니다.
함수 설명
COL_LENGTH 열의 정의된 길이(바이트)를 반환
COL_NAME 지정한 테이블 ID와 열 ID에 대한 데이터베이스 열의 이름을 반환
COLUMNPROPERTY 열 또는 프로시저 매개 변수에 대한 정보를 반환
DATABASEPROPERTY 주어진 데이터베이스와 속성 이름에 대해 명명된 데이터베이스 속성 값을 반환
DATABASEPROPERTYEX 지정한 데이터베이스에 대해 지정한 데이터베이스 옵션이나 속성의 현재 설정을 반환
DB_ID 데이터베이스 ID 번호를 반환
DB_NAME 데이터베이스 이름을 반환
FILE_ID 현재 데이터베이스의 주어진 논리 파일 이름의 파일 ID 번호를 반환
FILE_NAME 주어진 파일 ID에 대한 논리 파일 이름을 반환
FILEGROUP_ID 주어진 파일 그룹 이름의 파일 그룹 ID를 반환
FILEGROUP_NAME 주어진 파일 그룹 ID에 대한 파일 그룹 이름을 반환
FILEGROUPPROPERTY 파일 그룹과 속성 이름이 주어졌을 때 지정된 파일 그룹 속성 값을 반환
FILEPROPERTY 파일 이름과 속성 이름이 주어졌을 때 지정된 파일 이름 속성 값을 반환하는 예제
fn_listextendedproperty 데이터베이스 개체의 확장 속성 값을 반환
FULLTEXTCATALOGPROPERTY 전체 텍스트 카탈로그 속성에 대한 정보를 반환
FULLTEXTSERVICEPROPERTY 전체 텍스트 서비스 수준 속성에 대한 정보를 반환
INDEX_COL 인덱스된 열 이름을 반환
INDEXKEY_PROPERTY 인덱스 키에 대한 정보를 반환
INDEXPROPERTY 주어진 테이블 ID, 인덱스 이름, 속성 이름에 대해 명명된 인덱스 속성 값을 반환
OBJECT_ID 데이터베이스 개체 ID를 반환
OBJECT_NAME 데이터베이스 개체 이름을 반환
OBJECTPROPERTY 현재 데이터베이스의 개체에 대한 정보를 반환
@@PROCID 현재 프로시저의 저장 프로시저 식별자(ID)를 반환
SQL_VARIANT_PROPERTY sql_variant 값에 대한 기본 데이터 형식 및 기타 정보를 반환
TYPEPROPERTY 데이터 형식에 관한 정보를 반환
6) 보안 함수(Security Functions)
: 사용자와 시스템에 대한 보안적인 내용을 제공하여 주는 함수로 주요한 함수로 데이터베이스내의 사용자의 역할등을 확인할 수 있는 함수등을 확인하시면 되겠습니다.
함수 설명
fn_trace_geteventinfo 추적한 이벤트에 대한 정보를 반환
fn_trace_getfilterinfo 지정한 추적에 적용되는 필터에 대한 정보를 반환
fn_trace_getinfo 지정한 추적이나 기존 추적에 대한 정보를 반환
fn_trace_gettable 추적 파일 정보를 테이블 형식으로 반환
HAS_DBACCESS 사용자가 지정된 데이터베이스를 액세스할 수 있는지에 대한 정보를 반환
IS_MEMBER 현재 사용자가 지정된 Microsoft® Windows NT® 그룹 또는 Microsoft SQL Server™ 역할의 구성원인지 여부를 표시
IS_SRVROLEMEMBER 현재 사용자 로그인이 지정된 서버 역할의 구성원인지 여부를 반환
SUSER_SID 사용자 로그인 이름에 대한 보안 ID(SID)를 반환
SUSER_SNAME 사용자 보안 ID(SID)로부터 로그인 ID 이름을 반환
USER_ID 사용자의 데이터베이스 ID 번호를 반환
USER 기본값이 지정되지 않은 경우에 현재 사용자의 데이터베이스 사용자 이름에 대해 시스템이 제공한 값을 테이블에 삽입할 수 있도록 허용합니다
7) 문자열 함수(String Functions)
: 가장 자주 쓰이는 함수들중에 하나인 문자열 함수는 함수의 종류도 많을 뿐만 아니라 그 사용의 폭 또한 상당히 크가 빈도도 많기 때문에 필수적으로 확인하고 넘어가야만 하는 함수 입니다.각각의 함수의 역할과 사용상의 실예를 통해서 실습을 하사기 바랍니다.
함수 설명
ASCII 첫번째 문자의 ASCII 코드값
CHAR 아스키 코드를 문자로 변환
CHARINDEX 문자열에서 지정한 식의 위치를 반환
DIFFERENCE 두 문자 식에서 SOUNDEX 값의 차이를 정수로 반환
LEFT 왼쪽에서부터 지정된 문자 수 에서 시작하는 문자열의 일부를 반환
LEN 문자열에서 실제 문자열의 개수 반환
LOWER 문자열을 소문자로 변환
LTRIM 문자열의 왼쪽 공백 제거
NCHAR 해당 숫자의 유니코드 문자 반환
PATINDEX 유효한 모든 text 및 character 데이터 형식에서 패턴이 처음으로 지정된 식에서 발생한 시작 위치를 반환하거나 패턴을 찾지 못하는 경우에는 0을 반환
REPLACE 문자열 1 에서 문자열 2 를 문자열 3 으로 치환
QUOTENAME 입력 문자열이 SQL 서버에서 유효한 구분 식별자가 되도록 추가된 구분 기호와 함께 유니코드 문자열을 반환
REPLICATE 지정된 문자열 반복
REVERSE 문자열을 역순으로 반환
RIGHT 문자열의 오른쪽의 일부를 반환
RTRIM 문자열의 오른쪽 공백을 제거
SOUNDEX 문자열의 유사성을 비교하기 위해 SOUNDEX 코드 값을 반환
SPACE 반복된 공백 문자열 반환
STR 숫자열을 문자열로 반환
STUFF 지정한 시작 지점에서 지정한 문자 길이를 삭제한 다음 다른 문자 집합을 삽입
SUBSTRING 문자열에서 지정 위치에서 길이 만큼의 문자열을 반환
UNICODE 해당 문자의 유니 코드를 숫자로 반환
UPPER 문자열을 대문자로 반환
8) 시스템 함수(System Functions)
; 시스템 함수에는 주로 서버에 대한 값, 개체, 설정에 대한 작업을 수행하고 그에 대한 정보를 반환합니다. 이들 함수중에도 상당히 자주 쓰이면 매우 유용한 함수들이 있는데 특히 CAST, CONVERT, ISNULL 등에 대해서는 꼭 확인하고 실습을 통해서 확실히 이해하시기 바랍니다.
함수 설명
APP_NAME 응용 프로그램에 의해 설정된 경우 현재 세션의 응용 프로그램 이름을 반환
CASE expression 조건 목록을 평가하고 가능한 여러 결과 식 중 하나를 반환
CAST and CONVERT 식을 다른 데이터 형식으로 명시적으로 변환합니다. CAST 및 CONVERT는 비슷한 기능을 제공
COALESCE 해당 인수 중에서 Null이 아닌 첫 번째 식을 반환
COLLATIONPROPERTY 지정된 데이터 정렬의 속성을 반환
CURRENT_TIMESTAMP 현재 날짜 및 시간을 반환합니다. 이 함수는 GETDATE()와 동일
CURRENT_USER 현재 사용자를 반환합니다. 이 함수는 USER_NAME()과 동일
DATALENGTH 식을 표시하는 데 사용된 바이트 수를 반환
@@ERROR 최근에 실행된 Transact-SQL 문의 오류 수를 반환
fn_helpcollations Microsoft® SQL Server™ 2000이 지원하는 모든 데이터 정렬 목록을 반환
fn_servershareddrives 클러스터된 서버가 사용하는 공유 드라이브의 이름을 반환
fn_virtualfilestats 로그 파일을 포함하여 데이터베이스 파일에 대한 I/O 통계를 반환
FORMATMESSAGE sysmessages의 기존 메시지에서 메시지를 생성
GETANSINULL 이 세션의 데이터베이스에 대해 기본 Null 허용을 반환
HOST_ID 워크스테이션 ID를 반환
HOST_NAME 워크스테이션 이름을 반환
IDENT_CURRENT 임의의 세션과 범위에서 지정한 테이블에 생성된 마지막 ID 값을 반환
IDENT_INCR ID 열이 있는 테이블이나 뷰에서 ID 열을 만드는 동안 지정된 증분 값(numeric(@@MAXPRECISION,0)으로 반환됨)을 반환
IDENT_SEED ID 열이 있는 테이블이나 뷰에서 ID 열을 만드는 동안 지정된 시드 값(numeric(@@MAXPRECISION,0)으로 반환됨)을 반환하는 예제
@@IDENTITY 마지막으로 삽입된 ID 값을 반환
IDENTITY (Function) ID 열을 새 테이블에 삽입하기 위해 INTO table 절과 함께 SELECT 문에서만 사용 (IDENTITY 함수는 CREATE TABLE과 ALTER TABLE과 함께 사용되는 IDENTITY 속성과 비슷하기는 하지만 동일하지는 않습니다.)
ISDATE 입력 식이 유효한 데이터인지 여부를 확인
ISNULL NULL을 지정된 대체 값으로 반환
ISNUMERIC 식이 유효한 숫자 형식인지 여부를 확인
NEWID uniqueidentifier 형식의 고유 값을 반환
NULLIF 지정된 두 식이 같으면 Null 값을 반환
PARSENAME 개체 이름에서 지정된 부분을 반환(검색 가능한 개체의 부분은 개체 이름, 소유자 이름, 데이터베이스 이름, 서버 이름 등입니다.)
PERMISSIONS 명령문, 개체 또는 현재 사용자의 열 사용 권한이 들어 있는 값을 반환
@@ROWCOUNT 마지막 명령문의 영향을 받은 행 수를 반환
ROWCOUNT_BIG 실행한 마지막 명령문의 영향을 받은 행 수를 반환(이 함수는 ROWCOUNT_BIG의 반환 형식이 bigint라는 점만 제외하고 @@ROWCOUNT처럼 작동합니다.)
SCOPE_IDENTITY 같은 범위에서 IDENTITY 열에 삽입된 마지막 IDENTITY 값을 반환(범위는 저장 프로시저, 트리거, 함수 또는 일괄 처리와 같은 모듈입니다.)
SERVERPROPERTY 서버 인스턴스에 대한 속성 정보를 반환
SESSIONPROPERTY 세션의 SET 옵션 설정을 반환
SESSION_USER 기본값이 지정되지 않은 경우에 현재 세션의 사용자 이름에 대해 시스템이 제공한 값을 테이블에 삽입할 수 있도록 허용
STATS_DATE 지정한 인덱스에 대한 통계가 마지막으로 업데이트된 날짜를 반환
SYSTEM_USER 기본값이 지정되지 않은 경우에 현재 시스템 사용자 이름에 대해 시스템이 제공한 값을 테이블에 삽입할 수 있도록 허용
@@TRANCOUNT 현재 연결에서 사용 중인 트랜잭션 수를 반환
USER_NAME 지정된 ID 번호에서 사용자 데이터베이스 사용자 이름을 반환
9) 시스템 통계 함수(System Statistical Functions)
: 시스템에 관련된 각종 통계 수치에 대한 정보를 보여주는 함수들로 주로 서버의 튜닝에서 사용되는 함수들입니다. 간단히 그 역할과 함수 종류등만을 확인해 보시고 나중에 필요에 따라서 찾아 보시면 되겠습니다.
함수 설명
@@CONNECTIONS Microsoft® SQL Server™가 최근에 시작된 이후 연결 또는 연결을 시도한 수를 반환
@@CPU_BUSY Microsoft® SQL Server™가 최근에 시작된 이후 CPU가 작업으로 보낸 시간을 밀리초(시스템 타이머의 확인을 기반으로) 단위로 반환
fn_virtualfilestats 로그 파일을 포함하여 데이터베이스 파일에 대한 I/O 통계를 반환
@@IDLE Microsoft® SQL Server™가 최근에 시작된 이후 유휴 상태에 있었던 시간을 밀리초(시스템 타이머의 설정을 기반으로) 단위로 반환
@@IO_BUSY Microsoft® SQL Server™가 최근에 시작된 이후 입력과 출력 작업을 수행하면서 보낸 시간을 밀리초(시스템 타이머의 설정을 기반으로) 단위로 반환
@@PACKET_ERRORS Microsoft® SQL Server™가 최근에 시작된 이후 SQL Server 연결에서 발생한 네트워크 패킷 오류 수를 반환
@@PACK_RECEIVED Microsoft® SQL Server™가 최근에 시작된 이후 네트워크에서 읽은 입력 패킷 수를 반환
@@PACK_SENT Microsoft® SQL Server™가 최근에 시작된 이후 네트워크에 쓴 출력 패킷 수를 반환
@@TIMETICKS 눈금 당 마이크로초의 수를 반환
@@TOTAL_ERRORS Microsoft® SQL Server™가 최근에 시작된 이후 발생시킨 디스크 읽기/쓰기 오류의 수를 반환
@@TOTAL_READ Microsoft® SQL Server™가 최근에 시작된 이후 (캐시가 아니라) 디스크를 읽은 횟수를 반환
@@TOTAL_WRITE Microsoft® SQL Server™가 최근에 시작된 이후 디스크에 쓴 횟수를 반환
10) 텍스트 및 이미지 함수
: text, ntext, images 등의 데이터들은 일반 데이터 페이지에 저장되지 않고 별도의 텍스트 및 이미지 페이지에 저장되고 실제 데이터 페이지에서는 이러한 별도 페이지에로의 호인터 값만을 저장하게 됩니다. 실제로 이진 데이터를 저장할 수 있지만 실전에서 이진 파일의 데이터를 직접 데이터 베이스상에 저장하는 경우는 극히 드물다고 할 수 있습니다. 이미지등의 이진파일을 저장함에 있어서 실제 파일을 다른 방법으로 (기타 업로드 방법들) 저장하고 이에 대한 정보만을 데이터베이스에 저장하는 방법을 추천하고 있으며 실제로 이와 같이 사용하는 것이 시스템의 성능향상에도 도움이 됩니다. ' 김바람과 함께 하는 웹마스터 ' 강좌에서는 웹 어플리케이션과 함께 데이터베이스를 활용하여 이러한 이미지 , 동영상 파일등을 저장하고 출력하는 방법에 대하여 웹 프로그래밍 부분에서 다루어 볼 것입니다.
텍스트 및 이미지 함수에 대한 간단한 내용은 아래의 표를 참고 하시기 바랍니다.
함수 설명
PATINDEX 유효한 모든 text 및 character 데이터 형식에서 패턴이 처음으로 지정된 식에서 발생한 시작 위치를 반환하거나 패턴을 찾지 못하는 경우에는 0을 반환
TEXTPTR varbinary 형식의 text, ntext 또는 image 열에 해당하는 텍스트 포인터 값을 반환
TEXTVALID 주어진 텍스트 포인터가 유효한지 여부를 확인하는 text, ntext 또는 image 함수

by 따시쿵 | 2008/04/08 17:04 | SQL Server2005 | 트랙백 | 덧글(0)

ROW_NUMBER(), RANK(), DENSE_RANK() 차이점




ROW_NUMBER(), RANK(), DENSE_RANK() 함수간의 차이점을 기술합니다.
예제 테이블을 만들기 위해서 다음 스크립트를 사용합니다.

Create table dbo.T2(orderdate char(10) not null, totaldue int)
GO
insert into dbo.T2
select '2008-01-02', 10
union all
select '2008-01-03', 100
union all
select '2008-01-04', 101
union all
select '2008-01-05', 11
union all
select '2008-01-06', 200
union all
select '2008-01-07', 100
union all
select '2008-01-08', 11
GO
-- 예제 스크립트 1
select orderdate, totaldue,
row_number() over(order by totaldue desc) as [row_number],
rank() over(order by totaldue desc) as [rank],
dense_rank() over(order by totaldue desc) as [dense_rank]
from dbo.T2
-- 결과

정리 : 세 함수 모두 [결과 집합의 파티션 내에 있는 각 행의 순위를 반환합니다.
요청한 행의 순위는 해당 행 앞에 있는 행의 순위에 1을 더한 값입니다.]
같은 기능을 하고 있지만,
row_number() - 상위 단계보다 하위 단계에서 무조건 + 1
rank() - 상위에 중복같이 있는 경우 하위값은 건너뛰고 + 중복갯수
dense_rank() - 상위에 중복같이 있는 경우 하위값은 + 1
-- 예제 스크립트 2
select orderdate, totaldue,
row_number() over(partition by orderdate order by totaldue desc) as [row_number],
rank() over(partition by orderdate order by totaldue desc) as [rank],
dense_rank() over(partition by orderdate order by totaldue desc) as [dense_rank]
from dbo.T2
-- 결과
정리 : partition by 옵션은 정열을 할 기준 필드를 정하는 역할을 함

by 따시쿵 | 2008/04/07 18:26 | SQL Server2005 | 트랙백 | 덧글(0)

페이징 쿼리 종류별 성능 비교 자료

페이징 쿼리 종류별 성능 비교 자료
페이징 쿼리 종류별로 성능을 비교한 좋은 자료가 있어서 상당부분 인용했습니다.

"ex)"에 들어가는 샘플 쿼리는 바투 락커룸 DB에 파일첨부(TB_AttachFile) 테이블을 대상으로

페이징 쿼리를 작성해 봤습니다.


5번에 표시된 내용이 데이터 건수에 상관없이 실질적으로 가장 빠르지만 우리 시스템에 적용할 수 있는지는

의문이 갑니다.

테이블 별로 인덱스 생성이 필요할 수 있고 중간에 데이터가 삭제되거나 어떤 반응이 생길 때 문제가 될

소지가 있는지도 조사해야 할 것 같습니다.

참고로 웹젠 빌링에서 사용하던 페이징 쿼리는 4번을 이용했었습니다.

그리고 2번에 샘플 쿼리를 보면 TB_AttachFile 테이블에 FileGuid가 None Clustered Index로 걸려 있어서

서브쿼리 내에서도 ORDER BY FileGuid DESC를 해줘야합니다.(즉 ORDER BY 를 2번 해야한다는..)

대부분의 기본키들이 None Clustered Index 라 이 점에 대한 이슈도 있습니다.



1. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]

레코드셋의 AbsolutePage를 이용해서 페이징을 했습니다.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile



2. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]
WHERE [글번호필드] NOT IN (SELECT TOP [제거할 게시물수] [글번호필드] FROM [테이블명])

예전에 태요 사이트에서 보았던 쿼리 구문입니다.. NOT IN 때문에.. 문제시 되었던 쿼리구문이죠.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile
WHERE FileGuid NOT IN
(
SELECT TOP 0 FileGuid
FROM TB_AttachFile
ORDER BY FileGuid DESC
)
ORDER BY FileGuid DESC


3. SELECT TOP [불러올 총 게시물수] [출력 필드명] FROM [테이블 명]
WHERE [글번호] IN (SELECT TOP [페이지출력 갯수] [글번호] FROM
(SELECT TOP [불러올 총 게시물수] [글번호] FROM [테이블 명]) AS A ORDER BY [글번호])
ORDER BY [글번호] DESC

이 쿼리 구문은 2번의 쿼리 구문의 문제점을 보완한 구문입니다. NOT IN 대신에 IN을 사용 했습니다.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile
WHERE FileGuid IN
(
SELECT TOP 123 FileGuid -- 총 데이터수 - ( (페이지수 - 1) * 10) // 1페이지 : 123 - 0, 2페이지 : 123 - 10 ...
FROM
(
SELECT FileGuid
FROM TB_AttachFile
)AS A
ORDER BY FileGuid
)
ORDER BY FileGuid DESC


4. SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블 명]
WHERE [글번호] <= (SELECT MIN([글번호])
FROM (SELECT TOP [제거할 게시물수] + 1 [글번호] FROM [테이블명]) AS A)

4번째 쿼리 구문은 IN, NOT IN이 아닌 출력할 마지막 글번호 바로 앞이 글번호를 찾아서 처리를 해주는
쿼리 구문입니다.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile
WHERE FileGuid <=
(
SELECT MIN(FileGuid)
FROM
(
SELECT TOP 11 FileGuid -- (현재페이지수-1) * 10 + 1
FROM TB_AttachFile
ORDER BY FileGuid DESC
)AS A
)
ORDER BY FileGuid DESC


5. SELECT TOP [페이지 출력갯수] [출력 필드명] FROM [테이블명]
WHERE [글번호] <= (SELECT MIN([글번호])
FROM (SELECT TOP [제거할 게시물수] + 1 [글번호]
FROM [테이블명] WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]) AS A
WHERE [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호])
AND [인덱스] = [시작인덱스번호] AND [인덱스] = [끝인덱스번호]

5번재 쿼리는.. 글에 인덱스(가칭)라는 필드를 하나 더 추가 해서.. 글 기본 2000개마다 (가변적입니다)
인덱스를 증가 시켰습니다. 즉 2000개를 하나의 묶음으로 만든것입니다.
그 인덱스를 기준으로 처리를 해주었습니다.

ex)

SELECT TOP 10 FileGuid, FileName, Capacity, RegDate
FROM TB_AttachFile
WHERE FileGuid <=
(
SELECT MIN(FileGuid)
FROM
(
SELECT TOP 11 FileGuid -- (현재페이지수-1) * 10 + 1
FROM TB_AttachFile
WHERE IDX_FileGuid > 350 -- 350은 이전 페이지의 끝 게시물 번호. (350보다 큰 10개를 얻음.)
ORDER BY FileGuid DESC
)AS A
)
ORDER BY FileGuid DESC

결과.

게시물은 100만개를 넣고 테스트를 했습니다
서버정보 : CPU : p4-1.8, RAM : 768Mb, 컴팩 프리자리오 2820AP, 환경 : 윈도우2003 MSSQL2000
처음페이지(1), 마지막 페이지(50000) 처리 시간이 아래와 같습니다.(단위 ms)
첫페이지 실행 끝페이지 실행
1 : 273 11476.56
2 : 289 4406.25
3 : 289 2695.31
4 : 289 1218.75
5 : 7.81 23.44

by 따시쿵 | 2008/04/02 16:34 | SQL Server2005 | 트랙백 | 덧글(0)

SQL Server 관리 팁

복제된 테이블에 열 추가
자동 닫기 및 자동 축소 옵션 방지
SQL Server 2000 Enterprise Edition 사용 이점
대/소문자 구분 비교
SQL Server 7.0에서 SQL Server 2000으로 코드 페이지 변경
데이터베이스 소유자(dbo) 계정을 시스템 관리자(sa)로 변경
포트 번호 검사
SQL Server 통계 수집
SQL Server의 메일 프로필 구성
Autogrowth는 업데이트를 차단합니까?
정렬 순서가 성능에 영향을 줍니까?
NULL이 아닌 모든 값의 고유성 보장
고스트 레코드 정리 및 오류 602
데이터베이스 개체에 대한 권한 부여
수평 분할 병합 게시
Oracle 연결 서버 추가 방법
SQL Server 2000 설치가 32비트 또는 64비트인지 확인하는 방법
시스템 관리자 계정을 사용하여 여러 개발자를 관리하는 방법
SQL Server 계정 잠김을 어떻게 복구합니까?
SQL Server를 사용하여 Microsoft Word 문서 가져오기 및 인덱싱
날짜 오류 조사
로그 파일 증가 및 DBCC DBREINDEX
결과 집합 페이징 관리
다른 드라이브로 트랜잭션 로그 이동
명명된 인스턴스 검색을 위한 UDP 포트 1434 열기
로그 전달 역할 변경 수행
실패한 노드에 SQL Server 다시 설치
트랜잭션 로그 파일에서 트랜잭션 롤백
보조 컴퓨터에서 DTS 작업 실행
SQL Server와 같은 서버에서 바이러스 검색 소프트웨어 실행
SQLAgentCMDExec 권한
SQL Server 프로파일러 및 매개 변수화된 문
인덱스 작성 중 테이블 액세스
한 테이블에서 다른 테이블로 열 업데이트
확장 속성을 사용하여 데이터 사전 만들기
SQL Server 시스템을 PDC로 사용
뷰를 사용하여 데이터에 대한 사용자 액세스 제어
출처 : http://www.microsoft.com/korea/sql/techinfo/tips/administration/default.mspx

by 따시쿵 | 2008/04/02 14:02 | SQL Server2005 | 트랙백 | 덧글(0)

SQL서버 진단을 위한 주요 성능카운터

MS-SQL서버의 성능을 모니터링할수 있는 각 성능카운터에대한 설명입니다.

Processor\%Processor Time : % Processor Time은 프로세서가 비유휴 스레드를 실행하는 데 소비하는 시간의 백분율입니다. 이것은 프로세서가 각 샘플 간격 동안 유휴 스레드를 실행하는 데 소비한 시간을 측정하여 간격 기간에서 그 값을 뺀 것입니다. 각 프로세서에는 유휴 스레드가 있는데 이것은 다른 어떤 스레드도 실행되지 않을 때 사이클을 소비하는 스레드입니다. 이 카운터는 프로세서 동작의 주요 표시기이며 샘플 간격 동안 관찰되는 사용 시간의 평균 백분율을 표시합니다. 이것은 서비스가 비활성인 시간을 모니터링하여 100%에서 그 값을 뺀 것입니다.
즉 쉽게 말해서, 1시간 동안 CPU상태를 관찰하였고, 1시간 중에서 30분간 CPU가 일을 하였다면, %Processor Time은 50% 입니다. 일반적으로 %Processor Time이 80%이상 사용되고 있으면, 관심을 가지고 사용량의 변화를 모니터 하셔야 합니다.

Processor\%Privileged Time : % Privildged Time은 프로세스 스레드가 특권 모드에서 명령을 실행하면서 경과된 시간을 백분율로 표시한 것입니다. Windows 시스템 서비스가 호출되면, 서비스는 시스템 전용 데이터를 액세스하기 위해 흔히 특권 모드에서 실행됩니다. 그러한 데이터는 사용자 모드에서 실행되는 스레드가 액세스하지 못하도록 보호됩니다. 시스템 호출은 페이지 오류 또는 인터럽트가 발생할 때처럼 명시적이거나 암시적입니다. 일부 초기 운영 체제와는 달리 Windows는 사용자 및 특권 모드의 일반적인 보호뿐만 아니라 하위 시스템을 보호하기 위해 프로세스 경계를 사용합니다. 응용 프로그램을 대신하여 Windows에서 수행한 일부 작업은 프로세스의 특권 시간 및 다른 하위시스템 프로세스에서도 나타납니다. 쉽게 말해서, 운영체제가 사용한 시간의 백분율 값입니다.

Memory\Available Bytes : Available Bytes는 컴퓨터에서 실행되는 프로세스에 사용할 수 있는 실제 메모리의 양(바이트)입니다. 이것은 0으로 채워 있거나 비어 있거나 대기 중인 메모리 목록에 있는 공간을 합해 계산합니다. 빈 메모리는 사용할 준비가 된 메모리이고, 0으로 채워진 메모리는 다음 프로세스가 이전 프로세스에서 사용된 데이터를 보지 못하도록 0으로 채운 메모리 페이지로 구성되며, 대기 메모리는 프로세스의 작업 집합(실제 메모리)에서 제거되어 디스크로 라우트되었지만 다시 호출되어 사용될 수 있는 메모리를 말합니다. 이 카운터는 최근에 관찰된 값만 표시하며 평균값은 아닙니다. 사용 가능한 여유 메모리는 많이 있으면 좋겠지만, 그렇지 않다면, 최소한 5Mbyte이상은 남아 있어야 합니다.

Memory\Page Faults/sec : Page Faults/sec는 프로세스가 사용하는 메모리 공간(Working Set)에 존재하지 않는 코드나, 데이터를 요청할 경우에 발생합니다. 이 때 요청된 코드나 데이터를 다른 메모리 공간에서 찾으면 Soft Page Fault라고 하며, 디스크에서 찾게되면 Hard Page Fault라고 합니다. Page Faults/sec은 초당 발생한 Soft Page Fault와 Hard Page Fault의 합입니다.
Soft Page Fault값은 Page Faults/sec값에서 Pages/sec값을 빼면 됩니다.
따라서, Page Faults/sec의 값은 작을수록 좋다고 말 할 수 있겠으며, 상황에 따라서 그 임계치는 다르므로, 평상시에 모니터하여 적정 값을 파악해 두셔야 합니다.

Memory\Pages/sec : Pages/sec는 하드 페이지 부재를 해결하기 위해 디스크에서 읽거나 디스크로 쓴 페이지의 비율입니다. 이것은 Memory\\Pages Input/sec과 Memory\\Pages Output/sec의 합입니다. 메모리 공간이 부족하게 되면, 디스크의 페이징 파일로 메모리의 내용을 옮겨서 메모리의 여유공간을 확보하여 사용하게 되며, 또 필요시 페이징 파일에서 데이터를 메모리로 로드하여 처리하는 과정을 반복하게 되므로 성능이 저하되게 됩니다.
Pages/sec 카운터 값이 20이상 지속되면 메모리 이상을 의심해야 합니다.

PhysicalDisk\%Disk Read Time : 디스크가 읽기 작업을 수행한 시간의 백분율입니다.

PhysicalDisk\%Disk Write Time : 디스크가 쓰기 작업을 수행한 시간의 백분율입니다.

PhysicalDisk\%Disk Time : 디스크가 읽기 및 쓰기 작업을 수행한 시간의 백분율이며, 이 값은 Disk Read Time과 Disk Write Time의 합입니다.

PhysicalDisk\Avg. Disk Queue Length : 디스크의 읽기 및 쓰기 작업을 위해 대기중인 실제 디스크 큐 길이 입니다. 이 값은 디스크당 2를 초과하게 되면, 디스크 쪽 부하를 점검해야 합니다.

PhysicalDisk\Current Disk Queue Length : 현재 시점의 디스크 읽기 및 쓰기 작업을 위해 대기중인 디스크 큐 길이 입니다. 이 값 역시 2를 초과하면, 디스크 쪽 부하를 점검해야 합니다.

Network Interface\Current Bandwidth : 네트워크 인터페이스의 현재 대역폭입니다. 사용하는 네트워크 어댑터 카드의 지원 가능 대역이 100Mbps인 경우에 Current Bandwidth값이 10Mbps라면 네트워크 어댑터 카드의 속성 세팅이 잘 못 되었을 가능성이 큽니다.

Network Interface\Packets Outbound Errors : 이 항목은 오류로 인해서 외부로 반출할 수 없는 패킷의 수를 나타냅니다.

Network Interface\Packets Received Errors : 이 항목은 상위 계층의 프로토콜로 전달되지 못하도록 하는 오류를 포함하고 있는 외부로부터 유입되는 패킷의 수를 나타냅니다.

Server\Bytes Total/sec : 이 항목은 초당 서버가 네트워크에서 주고 받은 바이트 수 입니다. 동일 네트워크에 존재 하는 서버들의 각각의 Bytes Total/sec 합이 네트워크 대역폭보다 크다면, 네트워크 분리를 고려하셔야 합니다.

SQLServer:Buffer Manager\Buffer cache hit ratio : SQL서버가 데이터를 디스크에서 읽지 않고 버퍼 풀에서 찾은 페이지 비율입니다. 이 값은 90% 이상 유지되어야 하며, 대부분의 시스템에서 98% 정도 유지 됩니다. 이 값이 90보다 낮다면 버퍼 공간이 부족하다고 판단할 수 있습니다.

SQLServer:Buffer Manager\Page life expectancy : 이 항목은 페이지가 참조되지 않고 얼마나 오랫동안 버퍼에 존재할 수 있는가를 초 단위로 나타냅니다. 이 값이 300초 이하이면, 성능향상을 위해 SQL서버에 추가적인 버퍼 공간이 필요하다고 볼 수 있습니다.

SQLServer:Buffer Manager\Page reads/sec : 모든 데이터베이스에 대해서 발생한 물리적 데이터 페이지의 초당 읽기 수를 나타냅니다. 물리적 I/O는 상대적으로 비용이 많이 발생하므로, 더 큰 데이터 캐시를 사용하거나, 인덱스 및 쿼리를 효율적으로 작성하거나, 데이터베이스 모델링을 다시하여 물리적 I/O비용을 줄여야 합니다.

SQLServer:Buffer Manager\Stolen Page : 윈도우 시스템이 SQL서버가 아닌 다른 응용 프로그램의 요구를 충족시키기 위하여 얼마나 많은 페이지들이 SQL Server 데이터 캐시로부터 제거되었는지를 나타낸다. min Server memory를 지정하여 SQL서버가 지정한 만큼의 SQL서버 전용으로 메모리를 할당하게 할 수 있지만, 그 만큼 다른 프로그램이 적은 메모리로 운영되게 되므로 페이징이 발생하게 됩니다. 따라서 메모리 증설을 고려해야 합니다.

SQLServer:Databases\Log Flushes/sec : 초당 발생한 로그 플러시 수를 나타냅니다. 하나의 로그플러시는 하나의 트랜잭션이 커밋되어 로그 파일에 기록되는 것을 의미 합니다.

SQLServer:Databases\Transactions/sec : 선택한 데이터 베이스에서 발생한 초당 발생하는 트랜잭션 수를 나타냅니다.

SQLServer:General Statistics\User Connections : 시스템에 연결된 사용자 수를 나타냅니다.

SQL Server:Latches\Average Latch Wait Time(ms) : 요청된 래치에 대한 평균 래치 대기 시간(ms)

SQL Server:Latches\Latch Waits/sec : 즉시 서비스 될 수 없고 자원 해제를 위해 대기해야 하는 래치 요청 수

SQL Server: Locks\Average Wait Time(ms) : 리소스에 잠금을 걸기 위해 대기하였던 평균 시간(ms)을 나타냅니
다.

SQL Server: Locks\Lock Timeouts/sec : 리소스에 잠금을 얻기 위해 대기하면서 타임 아웃된 잠금 요청 횟수를 나타냅니다.

SQL Server: Locks\Lock Waits/sec : 즉시 충족시킬 수 없고 잠금을 허가하기 위해서 호출자가 기다려야 하는 잠금 요청 수

SQL Server: Locks\Number of Deadlocks/sec : 교착 상태를 일으킨 잠금 요청 수

SQL Server: Memory Manager\Memory Grants Pending : 작업 영역 메모리 허가를 위해 대기하고 있는 현재의 프로세스 수

SQL Server: Memory Manager\Target Server Memory(KB) : SQL Server가 사용할 수 있는 전체 메모리 양

SQL Server: Memory Manager\Total Server Memory(KB) : SQL Server가 사용하고 있는 전체 메모리 양

SQL Server: SQL Statistics\Batch Requests/sec : 초당 요청 받은 SQL 배치 요청 수

SQL Server: SQL Statistics\SQL Compilations/sec : 초당 SQL Server가 SQL문을 컴파일 한 수

SQL Server: SQL Statistics\Re-Compilations/sec : 초당 SQL Server가 SQL문을 재 컴파일 한 수

by 따시쿵 | 2008/04/02 13:43 | SQL Server | 트랙백 | 덧글(0)

일괄적으로 순차적으로 데이타 입력하기

CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);

DECLARE @max AS INT, @rc AS INT;
SET @max = 1000000;
SET @rc = 1;
INSERT INTO Nums VALUES(1);

WHILE @rc * 2 <= @max
BEGIN
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
END
INSERT INTO dbo.Nums
SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
GO
-- 결과 확인하기
SELECT * FROM DBO.NUMS

by 따시쿵 | 2008/03/31 16:11 | SQL Server2005 | 트랙백 | 덧글(0)

base64 암호화/복호화 소스

첨부 파일 참조

base64.asp

by 따시쿵 | 2008/03/28 16:35 | VBScript | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶