ORA-01000: maximum open cursors exceeded
ORA-01000: 최대 열기 커서 수를 초과했습니다

--sys나 system 유저로 접속하여 현재 설정된 커서 개수를 확인 한다.
show parameter open_cursors 

--현재 사용중인 섹션의 커서 (100개 초과) 확인
select a.sid, s.process, s.machine, s.module, s.action, count(*) as cnt             
from V$OPEN_CURSOR a, V$SESSION s
where s.sid = a.sid
group by a.sid, s.process, s.machine, s.module, s.action
having count(*) > 100
order by count(*) desc;

--특정 SID 기준 조회
select * from V$OPEN_CURSOR where sid = 4;

--커서 개수 재설정
alter system set open_cursors = 4000 scope=both;

 

출처 : https://jack-of-all-trades.tistory.com/398

오라클 에러 정보 (ORA-01000) - maximum open cursors exceeded.pdf
0.11MB

--//Oracle 11.2.0 for Windows 버전 기준
--//SYSDBA로 접속 ex) C:\>SQLPLUS "/as sysdba"
--//이하 SQL-Plus : SQL>

@"C:\oracle\product\11.2.0\dbhome_1\sqlplus\admin\plustrce.sql"

grant plustrace to [사용자];

--//=======================================

conn [사용자]/[패스워드];
@"C:\oracle\product\11.2.0\dbhome_1\rdbms\admin\utlxplan.sql"

--//PLAN 확인
set linesize 120;
set autot on;
select * from tab where rownum=1;

 

======================================================

 

AUTOTRACE 주요 명령어

명령 수행 결과 실행 계획 실행 통계 plustrace 권한 여부
set autotrace on O O O O
set autotrace on explain O O X X
set autotrace on statistics O X O O
set autotrace traceonly X O O O
set autotrace traceonly explain X O X X
set autotrace traceonly statistics X X O O

참조 : https://coding-factory.tistory.com/745

 문자열 값(통화, 자리수 구분)을 숫자타입으로 변경

※ 자세한 설명은 생략 (정규식은 10g 이상 가능)

 

SELECT TO_NUMBER( REGEXP_REPLACE('$-1,234,567.89', '[^0-9.-]', '') ) NUM FROM DUAL

 

오라클의 여러행을 하나의 컬럼으로 합치는 쿼리를 메모하고져 글을 남깁니다.

자세한 설명은 하지 않겠습니다.

(XMLAGG 및 정규식은 10g부터 사용 가능)

  • WM_CONCAT
SELECT
    WM_CONCAT(job) AS WM_JOBS
  FROM emp

 

  • LISTAGG
SELECT
    LISTAGG(job, ',') WITHIN GROUP(ORDER BY job) AS AGG_JOBS
FROM emp

 

  • LISTAGG (deptno 기준)
SELECT
    LISTAGG(job, ',') WITHIN GROUP(ORDER BY job) OVER(PARTITION BY deptno) AS AGG_JOBS2
FROM emp

 

  • LISTAGG (중복제거)
SELECT
    LISTAGG(job, ',') WITHIN GROUP(ORDER BY job) AS AGG_JOBS
    , REGEXP_REPLACE( LISTAGG(job, ',') WITHIN GROUP(ORDER BY job), '([^,]+)(,\1)*(,|$)', '\1\3') AS AGG_JOBS3
FROM emp

 

  • XMLAGG, XMLELEMENT (CLOB타입 - WM_CONCAT, LISTAGG : VARCHAR2라 최대 4000byte)
SELECT
    XMLAGG(XMLELEMENT(A, A.job || ',') ORDER BY A.job).EXTRACT('//text()').GETCLOBVAL() AS CLOB_JOBS
FROM emp A

 

  • XMLAGG, XMLELEMENT (CLOB타입, 중복제거, 시작/끝 구분자 삭제)
WITH A AS
(
SELECT
    XMLAGG(XMLELEMENT(A, A.job || ',') ORDER BY A.job).EXTRACT('//text()').GETCLOBVAL() AS CLOB_JOBS1
    , XMLAGG(XMLELEMENT(A, ',' || A.job ) ORDER BY A.job).EXTRACT('//text()').GETCLOBVAL() AS CLOB_JOBS2
FROM emp A
)
SELECT 
    SUBSTR(A.CLOB_JOBS1, 1, LENGTH(A.CLOB_JOBS1) - 1) AS SUB_JOBS1
    , SUBSTR(A.CLOB_JOBS2, 2) AS SUB_JOBS2
    , SUBSTR(REGEXP_REPLACE ( A.CLOB_JOBS2, '([^,]+)(,\1)*(,|$)', '\1\3'), 2) AS SUB_JOB3
FROM A

 

  • 통합 (LISTAGG -PARTITION 제외)
WITH A AS
(
SELECT
    WM_CONCAT(job) AS WM_JOBS
    , LISTAGG(job, ',') WITHIN GROUP(ORDER BY job) AS AGG_JOBS
    , REGEXP_REPLACE( LISTAGG(job, ',') WITHIN GROUP(ORDER BY job), '([^,]+)(,\1)*(,|$)', '\1\3') AS AGG_JOBS3
    , XMLAGG(XMLELEMENT(A, A.job || ',') ORDER BY A.job).EXTRACT('//text()').GETCLOBVAL() AS CLOB_JOBS1
    , XMLAGG(XMLELEMENT(A, ',' || A.job ) ORDER BY A.job).EXTRACT('//text()').GETCLOBVAL() AS CLOB_JOBS2
FROM emp A
)
SELECT
    A.*
    , SUBSTR(A.CLOB_JOBS1, 1, LENGTH(A.CLOB_JOBS1) - 1) AS SUB_JOBS1
    , SUBSTR(A.CLOB_JOBS2, 2) AS SUB_JOBS2
    , REGEXP_REPLACE( REGEXP_REPLACE ( A.CLOB_JOBS1, '([^,]+)(,\1)*(,|$)', '\1\3'), '(,)$', '') AS SUB_JOB3
    , REGEXP_REPLACE( REGEXP_REPLACE ( A.CLOB_JOBS2, '([^,]+)(,\1)*(,|$)', '\1\3'), '^(,)', '') AS SUB_JOB4
FROM A

 

※ ORA-01489 문자열 연결의 결과가 너무 깁니다.

 : 오류 발생시 XMLAGG를 이용하여 CLOB 사용.

ORA-12541 : TNS 리스너가 없습니다.

갑자기 "ORA-12541"이라는 오류가 발생하였다.

기존에 접속자는 이상이 없는데, 신규로 접속할려고 하니 위와 같은 오류를 발생시킨다.

 

클라이언트인 내 컴퓨터도 꺼보고, 서버도 리스타트 해보고 신규 접속을 할려고하니,

서버를 리부팅해서 그런지 모두 접속이 되지 않는다.

 

서버에서 "C:\>lsnrctl status"를 실행시켜 보니......멍청히 있다.

 

그래서 구글링을 해본 결과, 간혹 "listener.log" 파일이 4GB를 넘으면 접속이 안된다는 글을 본다.

그래서 위치를 찾는다.

 

난 윈도우버전을 이용하므로 윈도우 버전으로 위치를 기입하겠다.

"{드라이브명}:\{ORACLE 설치 ROOT 폴더}\diag\tnslsnr\{서버명}\listener\trace\listener.log"

ex) 폴더 위치 : D:\oracle\diag\tnslsnr\TESTSVR\listener\trace\

 

  1. 오라클 스톱 그런거 귀찮고 "lsnrctl stop"을 날려도 함흥 차사이니 그냥 실행명령 "servcies.msc" 또는 제어판 "서비스"를 실행하여 서비스를 제어하는 Dialog를 실행한다.
    (혹시 모르니 오라클 서비스는 먼저 정지 시켜놓고 하자~)

  2. 이름 중 "OracleOraDb11g_home1TNSListener"를 찾아서 서비스를 중지 시킨다.



  3. 설정 폴더로 이동하여 기존 4GB가 넘은 "listener.log"의 이름을 변경 또는 삭제한다.
    (신규 파일은 안만들어도 나중에 lsnrctl이 정상 가동 되면서 시스템이 알아서 새로 만든다.)



  4. 다시 시작하고 그런거 귀찮고 서비스가 꼬일질 모르니 이번 참에 서버를 한번 리부팅해준다.

  5. 모든 서비스가 정상적으로 접속되는지 확인한다.

 

※ 오라클 버전 11.2.0 x64bit 기준


2012/09/26 - [DBMS] - 순진한 트리(문서) - 재귀쿼리 방법론 에서 언급된 재귀적호출 중 MS-SQL을 이용한 MSDN자료 입니다.





원문 : http://msdn.microsoft.com/ko-kr/library/ms186243(v=sql.105).aspx







CTE(공통 테이블 식)를 사용하면 자기 자신을 참조하는 재귀적 CTE를 만들 수 있으므로 상당히 유용합니다. 재귀적 CTE는 최초 CTE가 반복적으로 실행되어 전체 결과 집합을 얻을 때까지 데이터의 하위 집합을 반환하는 CTE입니다.

재귀적 CTE를 참조하는 쿼리를 재귀 쿼리라고 합니다. 재귀 쿼리의 일반적인 용도는 계층적 데이터를 반환하는 것입니다. 예를 들어 직원을 조직도에 표시하는 경우 또는 부모 제품에 하나 이상의 구성 요소가 있고 이러한 구성 요소가 하위 구성 요소를 가지거나 다른 부모의 구성 요소일 수도 있는 제품 구성 정보(BOM) 시나리오에 데이터를 표시하는 경우가 있습니다.

재귀적 CTE는 SELECT, INSERT, UPDATE, DELETE 또는 CREATE VIEW 문 내에서 재귀 쿼리를 실행하는 데 필요한 코드를 상당히 단순화할 수 있습니다. 이전 버전의 SQL Server에서 재귀 쿼리를 실행하려면 일반적으로 임시 테이블, 커서 및 논리를 사용하여 재귀 단계의 흐름을 제어해야 합니다. 공통 테이블 식에 대한 자세한 내용은 공통 테이블 식 사용을 참조하십시오.

Transact-SQL의 재귀적 CTE 구조는 다른 프로그래밍 언어의 재귀 루틴과 비슷합니다. 다른 언어의 재귀 루틴은 스칼라 값을 반환하지만 재귀적 CTE는 여러 행을 반환할 수 있습니다.

재귀적 CTE는 다음 세 요소로 구성됩니다.

  1. 루틴의 호출

    재귀적 CTE의 첫 번째 호출은 UNION ALL, UNION, EXCEPT 또는 INTERSECT 연산자로 조인된 하나 이상의 CTE_query_definitions로 구성됩니다. 이러한 쿼리 정의는 CTE 구조의 기본 결과 집합을 형성하기 때문에 앵커 멤버라고 합니다.

    CTE_query_definitions는 CTE 자체를 참조하지 않는 경우 앵커 멤버로 간주됩니다. 모든 앵커 멤버 쿼리 정의를 첫 번째 재귀 멤버 정의 앞에 배치하고 UNION ALL 연산자를 사용하여 마지막 앵커 멤버를 첫 번째 재귀 멤버와 조인해야 합니다.

  2. 루틴의 재귀 호출

    재귀 호출에는 CTE 자체를 참조하는 UNION ALL 연산자로 조인된 하나 이상의 CTE_query_definitions가 포함됩니다. 이러한 쿼리 정의를 재귀 멤버라고 합니다.

  3. 종료 확인

    종료 확인은 암시적으로 수행됩니다. 이전 호출에서 반환되는 행이 없을 때 재귀가 중지됩니다.

참고 참고

잘못 구성된 재귀적 CTE로 인해 무한 루프가 발생할 수 있습니다. 예를 들어 재귀 멤버 쿼리 정의가 부모 열과 자식 열 모두에 대해 동일한 값을 반환하면 무한 루프가 생성된 것입니다. 재귀 쿼리의 결과를 테스트할 때 INSERT, UPDATE, DELETE 또는 SELECT 문의 OPTION 절에서 MAXRECURSION 힌트 및 0과 32,767 사이의 값을 사용하여 특정 문에 허용되는 재귀 수준의 수를 제한할 수 있습니다. 자세한 내용은 쿼리 힌트(Transact-SQL)WITH common_table_expression(Transact-SQL)을 참조하십시오.

의사 코드 및 의미 체계

재귀적 CTE 구조에는 앵커 멤버와 재귀 멤버가 적어도 하나씩 포함되어야 합니다. 다음 의사 코드에서는 단일 앵커 멤버와 단일 재귀 멤버가 포함된 간단한 재귀적 CTE의 구성 요소를 보여 줍니다.

WITH cte_name ( column_name [,...n] )

AS

(

CTE_query_definition –- Anchor member is defined.

UNION ALL

CTE_query_definition –- Recursive member is defined referencing cte_name.

)

-- Statement using the CTE

SELECT *

FROM cte_name

재귀 실행의 의미 체계는 다음과 같습니다.

  1. CTE 식을 앵커 멤버와 재귀 멤버로 분할합니다.

  2. 앵커 멤버를 실행하여 첫 번째 호출 또는 기본 결과 집합(T0)을 만듭니다.

  3. Ti는 입력으로 사용하고 Ti+1은 출력으로 사용하여 재귀 멤버를 실행합니다.

  4. 빈 집합이 반환될 때까지 3단계를 반복합니다.

  5. 결과 집합을 반환합니다. 이것은 T0에서 Tn까지의 UNION ALL입니다.

다음 예에서는 Adventure Works Cycles 회사에서 직급이 가장 높은 직원부터 시작되는 계층적 직원 목록을 반환하여 재귀적 CTE 구조의 의미 체계를 보여 줍니다. 이 예 다음에는 코드 실행 연습이 있습니다.

Transact-SQL
-- Create an Employee table.
CREATE TABLE dbo.MyEmployees
(
	EmployeeID smallint NOT NULL,
	FirstName nvarchar(30)  NOT NULL,
	LastName  nvarchar(40) NOT NULL,
	Title nvarchar(50) NOT NULL,
	DeptID smallint NOT NULL,
	ManagerID int NULL,
 CONSTRAINT PK_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID ASC) 
);
-- Populate the table with values.
INSERT INTO dbo.MyEmployees VALUES 
 (1, N'Ken', N'Sánchez', N'Chief Executive Officer',16,NULL)
,(273, N'Brian', N'Welcker', N'Vice President of Sales',3,1)
,(274, N'Stephen', N'Jiang', N'North American Sales Manager',3,273)
,(275, N'Michael', N'Blythe', N'Sales Representative',3,274)
,(276, N'Linda', N'Mitchell', N'Sales Representative',3,274)
,(285, N'Syed', N'Abbas', N'Pacific Sales Manager',3,273)
,(286, N'Lynn', N'Tsoflias', N'Sales Representative',3,285)
,(16,  N'David',N'Bradley', N'Marketing Manager', 4, 273)
,(23,  N'Mary', N'Gibson', N'Marketing Specialist', 4, 16);


Transact-SQL
USE AdventureWorks2008R2;
GO
WITH DirectReports (ManagerID, EmployeeID, Title, DeptID, Level)
AS
(
-- Anchor member definition
    SELECT e.ManagerID, e.EmployeeID, e.Title, edh.DepartmentID, 
        0 AS Level
    FROM dbo.MyEmployees AS e
    INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
        ON e.EmployeeID = edh.BusinessEntityID AND edh.EndDate IS NULL
    WHERE ManagerID IS NULL
    UNION ALL
-- Recursive member definition
    SELECT e.ManagerID, e.EmployeeID, e.Title, edh.DepartmentID,
        Level + 1
    FROM dbo.MyEmployees AS e
    INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
        ON e.EmployeeID = edh.BusinessEntityID AND edh.EndDate IS NULL
    INNER JOIN DirectReports AS d
        ON e.ManagerID = d.EmployeeID
)
-- Statement that executes the CTE
SELECT ManagerID, EmployeeID, Title, DeptID, Level
FROM DirectReports
INNER JOIN HumanResources.Department AS dp
    ON DirectReports.DeptID = dp.DepartmentID
WHERE dp.GroupName = N'Sales and Marketing' OR Level = 0;
GO


코드 연습 예

  1. 재귀적 CTE인 DirectReports는 앵커 멤버와 재귀 멤버를 하나씩 정의합니다.

  2. 앵커 멤버가 기본 결과 집합 T0을 반환합니다. 이 직원은 회사에서 직급이 가장 높습니다. 즉, 상급 관리자가 없습니다.

    다음은 앵커 멤버에서 반환하는 결과 집합입니다.

    ManagerID EmployeeID Title                         Level
    --------- ---------- ----------------------------- ------
    NULL      1          Chief Executive Officer        0
    
  3. 재귀 멤버는 앵커 멤버 결과 집합에 있는 직원의 직속 하급자를 반환합니다. 이것은 Employee 테이블과 DirectReports CTE 간의 조인 작업을 통해 수행됩니다. 재귀 호출을 설정하는 것은 바로 CTE 자신에 대한 이 참조입니다. 입력(Ti)으로 사용된 CTE DirectReports 의 직원을 기준으로 조인(MyEmployees.ManagerID = DirectReports.EmployeeID)은 (Ti)를 관리자로 둔 직원을 출력(Ti+1)으로 반환합니다. 따라서 재귀 멤버의 첫 번째 반복은 다음 결과 집합을 반환합니다.

    ManagerID EmployeeID Title                         Level
    --------- ---------- ----------------------------- ------
    1         273        Vice President of Sales       1
    
  4. 재귀 멤버가 반복적으로 활성화됩니다. 재귀 멤버의 두 번째 반복에서 3단계의 단일 행 결과 집합(EmployeeID273 포함)이 입력 값으로 사용되어 다음 결과 집합을 반환합니다.

    ManagerID EmployeeID Title                         Level
    --------- ---------- ----------------------------- ------
    273       16         Marketing Manager             2
    273       274        North American Sales Manager  2
    273       285        Pacific Sales Manager         2
    

    재귀 멤버의 세 번째 반복에서 위의 결과 집합이 입력 값으로 사용되어 다음 결과 집합을 반환합니다.

    ManagerID EmployeeID Title                         Level
    --------- ---------- ----------------------------- ------
    16        23         Marketing Specialist          3
    274       275        Sales Representative          3
    274       276        Sales Representative          3
    285       286        Sales Representative          3
    
  5. 실행 중인 쿼리가 반환하는 최종 결과 집합은 앵커 멤버와 재귀 멤버가 생성한 모든 결과 집합의 합집합입니다.

    다음은 이 예에서 반환되는 전체 결과 집합입니다.

    ManagerID EmployeeID Title                         Level
    --------- ---------- ----------------------------- ------
    NULL      1          Chief Executive Officer       0
    1         273        Vice President of Sales       1
    273       16         Marketing Manager             2
    273       274        North American Sales Manager  2
    273       285        Pacific Sales Manager         2
    16        23         Marketing Specialist          3
    274       275        Sales Representative          3
    274       276        Sales Representative          3
    285       286        Sales Representative          3
    


순진한트리(계층쿼리).pdf



참고하기 좋은듯....


MSDN 참고 자료 : 공통 테이블 식을 사용하는 재귀 쿼리 (http://msdn.microsoft.com/ko-kr/library/ms186243(v=sql.90).aspx)



 

해당 실행 파일에 본 첨부파일을 풀어 주면 클라이언트 없이도 배포 가능합니다.

별도로  TNS_ADMIN 경로를 환경설정에서 해줘도 되나, 10g Client 버전부터는 TNS를 이용안하고 설정 가능합니다.

실행파일과 같은 경로에 배포하시면 쉽게 사용 가능합니다.

DataGridView를 이용하였습니다.

OracleConnection oraConn = new OracleConnection();
oraConn.ConnectionString = string.Format("USER ID={0};PASSWORD={1};DATA SOURCE={2};PERSIST SECURITY INFO=false", "{오라클UserID}", "{오라클UserPassword}", "{Oracle Host Name(Domain) or Oracle Host IP}:{Oracle Service Port}/{Oracle Service Name(SID)");
//기본포트 1521를 쓸경우 ":{Oracle Service Port}" 생략 가능
oraConn.Open();
string SQL = "SELECT * FROM TAB";
OracleCommand oraCmd = new OracleCommand(SQL, oraConn);
OracleDataAdapter oraAdapter = new OracleDataAdapter(oraCmd);
DataTable dt = new DataTable();
oraAdapter.Fill(dt);
dataGridView1.DataSource = dt;

ODP.NET 버전은 11.2.0.3.0 32bit 버전을 이용하였습니다.

Oracle.DataAccess.dll 파일 버전은 2.112.3.0 입니다.

 .NET 2.0 기준 DLL파일입니다.

.NET 4.0으로 프로젝트 세팅을 하셔도 참조시 Oracle.DataAccess.dll버전을 2.x대를 추가하면 .NET 4.0에서도 사용 가능합니다.

(최대 파일당 10M라서 분할하여 올립니다.)

================================================================================================================

ODP.NET(v2).zip

 

ODP.NET(v2).z01

 

ODP.NET(v2).z02

 

ODP.NET(v2).z03

 

ODP.NET(v2).z04

 

 

추가로 Oracle.DataAccess.dll 4.112.3.0 버전도 올립니다.

 

Oracle.DataAccess(v4).zip

출처 : http://www.oracleclub.com/article/55741

설명은 안 하겠습니다.

 

WITH t AS
( 
SELECT XMLTYPE('
<ROOT>
<META use="report">
<META-NAME>Type1</META-NAME>
<META-VALUE>REQ1</META-VALUE>
</META>
<META use="report">
<META-NAME>Type2</META-NAME> 
<META-VALUE>REQ3</META-VALUE> 
</META>
<META use="report">
<META-NAME>Type3</META-NAME>
<META-VALUE>REQ4</META-VALUE>
</META>
</ROOT>
') v 
FROM dual 
) 
SELECT ExtractValue(Value(p), '/META/META-VALUE') "META-VALUE"
  FROM t 
     , TABLE(XMLSequence(Extract(v, '/ROOT/META[@use="report"]'))) p 
 WHERE ExtractValue(Value(p), '/META/META-NAME') = 'Type1'
; 
 

 MDAC(Microsoft Data Access Components) 버전 체크 툴

 

각 버전에 맞게 잘 사용하시기 바랍니다.

 

 참고 : http://kikiwaka.egloos.com/2378649

 

 출처 : http://www.microsoft.com/downloads/details.aspx?FamilyID=8f0a8df6-4a21-4b43-bf53-14332ef092c9&DisplayLang=en#filelist

이 글은 스프링노트에서 작성되었습니다.



ORA-01991 에러 발생시#


발생조건#

 OraData\{SID}폴더만 복사해서 복구할경우


장애내용#

Startup 시 ORA-01991: invalid password file '...PWD{SID}.ora' 이러면서 해당 파일 경로가 나타남.

해결 방법#

>orapwd file={경로}\PWD{SID}.ora password={패스워드}


기타 참고사항#

관리자 모드 접근 방법#

ORACLE_SID 지정#

Windows

>SET ORACLE_SID={SID}

or

UNIX

>export ORACLE_SID={SID}

관리자 모드#

>SQLPLUS "/as sysdba"
or
-----------------------------------------------
>SQLPLUS /nolog
SQL>conn sys/{패스워드} as sysdba
----------------------------------------------
or
-----------------------------------------------
>SQLPLUS /nolog
SQL>conn as sysdba
사용자명 입력 : sys/{패스워드}


이 글은 스프링노트에서 작성되었습니다.

'DBMS > Oracle' 카테고리의 다른 글

ODP.NET 설치 안하고 클라이언트 배포  (0) 2012.07.13
Oracle XML 쿼리  (0) 2012.06.11
정렬 조건 부여  (0) 2008.07.16
오라클 접속 포트 고정시키기  (0) 2008.07.16
로그마이너  (0) 2008.07.16

 

MS-SQL 2005 관련 관리 툴들의 메뉴 한글 깨짐 현상#

 

설치환경#

OS : Microsoft Windows 2008 Standard Server with ServicePack 1 한글 x86 64Bit

DBMS : Microsoft SQL Server 2008 Standard 한글 x86 64Bit

H/W : HP DL380 G5

OS 설치 방법 : HP SmartStart v8.00으로 설치

 

오류사항#

 SQL Server 2005 설치 후 관리 툴인 Microsoft Server Management Studio와 SQL Server Business Intelligence Development Studio를 실행 시 한글 메뉴들의 깨짐 현상

SQLManagement_Error.jpg VisualStudio_Font_Error.jpg

 

장애 발생 요인#

 HP서버 구매시 OS설치 용도로 제공되는 HP SmartStart v8.0으로 설치시 초기 설치 모드는 한글이 지원되지 않아 영어로 설치한후 설치 완료후 한글로 설치를 마무리를 하는데 여기서 장애 발생 요인이 생긴다.

Windows2008Error_UTF8Charset_Eng.jpg

 

해결 방법#

 [시작]-[제어판]-[국가 및 언어 옵션]-<관리자 옵션>에서 "유니코드를 지원하지 않는 프로그램용 언어" 설정을 한국어(대한민국)으로 변경

Windows2008Modify_UTF8Charset_Eng2Kor.jpg 

 

 

결과#

해당 관리 툴들을 실행시켜보면 메뉴들이 정상적으로 보임(화면 캡쳐 이미지 첨부 생략)

 

 

이 글은 스프링노트에서 작성되었습니다.

 

MS-SQL 2008 설치시 Microsoft Windows 유니코드 언어 설정#

 

설치환경#

OS : Microsoft Windows 2008 Standard Server with ServicePack 1 한글 x86 64Bit

DBMS : Microsoft SQL Server 2008 Standard 한글 x86 64Bit

H/W : HP DL380 G5

OS 설치 방법 : HP SmartStart v8.00으로 설치

 

오류사항#

SQL Server 2008 설치시 설치 지원 규칙 체크중 성능 카운터 레지스트리 하이브 일관성 검사 실패

 

 MSSQL2008SetupError_PerfMonCounterNotCorruptedCheck.jpg

 MSSQL2008SetupErrorReport_PerfMonCounterNotCorruptedCheck.jpg

 

장애 발생 요인#

 HP서버 구매시 OS설치 용도로 제공되는 HP SmartStart v8.0으로 설치시 초기 설치 모드는 한글이 지원되지 않아 영어로 설치한후 설치 완료후 한글로 설치를 마무리를 하는데 여기서 장애 발생 요인이 생긴다.

MSSQL2008SetupError_UTF8Charset_Eng.jpg

 

해결 방법#

 [시작]-[제어판]-[국가 및 언어 옵션]-<관리자 옵션>에서 "유니코드를 지원하지 않는 프로그램용 언어" 설정을 한국어(대한민국)으로 변경

 MSSQL2008SetupModify_UTF8Charset_Eng2Kor.jpg

 

결과#

 MSSQL2008SetupResult_PerfMonCounterNotCorruptedCheck.jpg

이 글은 스프링노트에서 작성되었습니다.

아래 표처럼 테이블A과 테이블B의 C1의 값이 같을경우 테이블A의 C2값을 테이블B의 C2에 그대로 넣을 경우

구분 테이블A 테이블B
 C1 A A
 C2 StringValue NULL

UPDATE {테이블A} a,{테이블B} b SET b.C2 = a.C2 WHERE a.C1 = b.C1


이용 방법은 이외에도 무지 많을 것입니다.


※MySQL 4.0.4(?) 이상 버전에서 지원

이 글은 스프링노트에서 작성되었습니다.

DBMS(OLE DB 공급자)별 Ado 데이터 연결 Provider

  •  Microsoft Jet 4.0 OLE DB Provider
    - Provider : Microsoft.Jet.OLEDB.4.0
  • Microsoft OLE DB Provider for ODBC Drivers
    - Provider : MSDASQL
  •  Microsoft OLE DB Provider for Oracle
    - Provider : MSDAORA
  •  Microsoft OLE DB Provider for SQL Server
    - Provider : SQLOLEDB
  •  Oracle Provider for OLE DB
    - Provider : OraOLEDB.Oracle

     

ex)

Provider={Provider};

User ID={UserID};

Password={UserPassword};

Data Source={Source or Database Host Name or Database Host IP};

Initial Catalog={Database Name};

Persist Security Info={True or False};

 

※ MS-SQL 2005 Express : Provider=SQLNCLI;Server=localhost\SQLExpress;Database=데이터베이스이름;UID=사용자아이디;PWD=비밀번호;

 

※ 내가 현재 쓰고 있는것만 넣었음... 추후 더 넣겠음

 

기타참조

이 글은 스프링노트에서 작성되었습니다.

+ Recent posts