SQL Server db lock 확인 방법

Posted by Alvin You
2013. 9. 24. 22:47 SQL Server

AX Client에서 해당 프로그램을 실행시켰는데, 해당 프로그램이 아무런 응답없이 멈춰있다면 SQL Server DB Lock을 의심해 볼 수도 있습니다.

현재 진행중인 프로젝트가 DB Transaction이 많아, Stored Procedure를 호출해서 구성되는 화면이 많다보니 종종 화면이 멈춘듯한 느낌이 받을때가 많습니다.

이럴 경우 확인 방법은 sp_who2 라는 SQL 명령어를 통해서 blkBy 칼럼을 통해 확인할 수 있습니다.

image

실행중인 SQL문장을 보고 싶다면 아래 내용을 통해 확인이 가능합니다.

DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = 70

SELECT TEXT
FROM sys.dm_exec_sql_text(@sqltext)
GO

image

당연히 Lock 이 걸린 프로세스를 Kill 명령어를 통해서 종료시키면, 해당 lock은 풀립니다.

Create Dynamic Table in the X++

Posted by Alvin You
2013. 9. 24. 00:08 Dynamics AX/Development

AX상에서 테이블 생성을 Manual로 일일이 작업하는 동료를 보며, SQL처럼 스크립트 같은걸 만들어 놓고 동일 작업이 필요할 경우 작업할 수 있는 방법은 없을지 찾다가 발견한 솔루션입니다.

이 내용을 통해서, 많은 X++ Developer들의 개발 생산성이 향상되길 빌며…

static void newTableCreate(Args _args)
{
TreeNode treeNode;
AOTTableFieldList fieldList;
#AOT
;
treeNode = TreeNode::findNode(#TablesPath);

treeNode.AOTadd("KOR_SalesTable");
SqlDataDictionary::synchronize();

fieldList = treeNode.AOTfindChild('KOR_Table').AOTfindChild('fields');
fieldList.addString('KOR_Field1');
fieldList.addString('KOR_Field2);

SqlDataDictionary::synchronize();
print "Table Created";
pause;
}

Query Object의 내용을 문자열로 Export

Posted by Alvin You
2013. 9. 24. 00:07 Dynamics AX/Development

AX 개발시에 Query Object를 만든 후 해당 내용을 다시 문자열로 Export 받아 코드 레벨의 Query Object 생성시 재사용할 수 있는 방법은 없을까 방법을 찾다가 아래와 같은 방법이 있음을 알아냈다.

◈ Query Object

image

◈위 내용을 문자열로 Export 받은 내용

Query Proc_PurchSummary object 2320c548: SELECT * FROM VendPurchOrderJour(VendPurchOrderJour_1) JOIN * FROM PurchLineAllVersions(PurchLineAllVersions_1) ON VendPurchOrderJour.RecId = PurchLineAllVersions.PurchTableVersionRecId JOIN * FROM VendTable(VendTable_1) ON PurchLineAllVersions.VendAccount = VendTable.AccountNum JOIN * FROM DirPartyTable(DirPartyTable_1) ON VendTable.Party = DirPartyTable.RecId JOIN * FROM InventDim(InventDim_1) ON PurchLineAllVersions.InventDimId = InventDim.inventDimId JOIN * FROM InventLocation(InventLocation_1) ON InventDim.InventLocationId = InventLocation.InventLocationId JOIN * FROM PurchTable(PurchTable_1) ON VendPurchOrderJour.PurchId = PurchTable.PurchId AND ((DocumentState=40)) JOIN * FROM HcmWorker(HcmWorker_1) ON PurchTable.WorkerPurchPlacer = HcmWorker.RecId JOIN * FROM DirPerson(DirPerson_1) ON HcmWorker.Person = DirPerson.RecId

◈Export 받는 방법

static void Job1(Args _args) // X++ job.
{
Query q = new Query(queryStr(Proc_PurchSummary));
QueryRun qr = new QueryRun(q);
info(q.toString());

}