Q. 제가 A라는 테이블을 하나 만들었습니다. name이란 칼럼이 있는데요,
이 칼럼엔 '홍길동', '이순신'과 같은 세 글자 이름이 들어가도록 하려고 합니다.
그래서 name 칼럼의 데이터 타입 길이는 6 Byte로 지정했습니다. 그런데 insert가 되지 않습니다.
그래서 데이터 타입 길이를 9 Byte로 해 주었더니 인제야 insert가 됩니다. 아무래도 한글 한 글자를 3 Byte로 인식하는 것 같은데, 왜 이런 걸까요?

A. 간단합니다. 오라클 설치할 때 문자 집합을 어떻게 설정했느냐에 따라 한글을 인식하는 Byte 길이가 달라집니다. KO16KSC5601(한글 완성형), KO16MSWIN949는 한글 한 글자를 2 Byte로 인식합니다. 하지만, UTF8/AL32UTF8의 경우 한글 한 글자의 길이를 3 Byte로 인식합니다. UTF8/AL32UTF8의 장점은 한글 정렬(order by)이 가능하지만, 3 Byte 길이를 소모합니다.

SQL PLUS 접속하신 후,
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE '%CHARACTERSET%';

명령어를 실행시켜 주십시오. 현재 사용 중인 문자 집합을 확인할 수 있습니다.

Oracle Developer 연결을 위해 testdb 사용자 계정을 만들고 Connection을 하려고 했지만,
위처럼 에러 메시지가 [테스트]를 하면서 발생했다.
이 에러는 SID가 잘못 입력되었기 때문이며, SID는 DB 인스턴스 이름이기 때문에 내가 명명한 DB 인스턴스 이름을 SID 칸에 입력해 줘야 한다.

SID 이름은 다음과 같은 방법으로 알 수 있다.
https://localhost:1158/em/ 으로 접속하면 화면 상단에 데이터베이스 인스턴스:XXX가 있다.
여기서 XXX가 SID이다. (아래 이미지에선 sagelord가 SID가 된다.)



또는,
SQL PLUS 프로그램을 실행시킨 후,
SQL> select instance from v$thread;
명령어를 실행하면, 현재 명명된 DB 인스턴스 이름을 확인할 수 있다.


 


  1. 2016.12.24 18:12 신고

A_TBL이라는 테이블이 있습니다. 이 테이블에는 con, con2, ... 등의 컬럼이 있는데, 그 중 con이라는 컬럼 안에는 '<table><tr><td><font>...</table>'처럼 HTML 태그가 들어 있습니다. 컬럼의 HTML 태그만 제외하고 SELECT 되도록 udf_StripHTML 사용자 함수를 생성해 보겠습니다.

CREATE FUNCTION
[dbo].[udf_StripHTML]
(@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE
@Start INT
DECLARE
@End INT
DECLARE
@Length INT
SET
@Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
WHILE @Start > 0
AND @End > 0
AND @Length > 0
BEGIN
SET
@HTMLText = STUFF(@HTMLText,@Start,@Length,'')
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
END
RETURN
LTRIM(RTRIM(@HTMLText))
END
GO

사용예제: html 파싱이 필요한 컬럼을 udf_StripHTML(...) 괄호 안에 기입

select writeid, writernm, deptnm, canm, title,
dbo.udf_StripHTML(con), dbo.udf_StripHTML(con2),
dbo.udf_StripHTML(pre), dbo.udf_StripHTML(mid),
dbo.udf_StripHTML(res), dbo.udf_StripHTML(self1),
dbo.udf_StripHTML(self2), pointssum, workdate
from A_TBL order by workdate asc

→ HTML 코드만 쏙 빠진 채 오리지널 데이터만 SELECT 될 것입니다.
SQL 2000 버전에서는 사용 불가. 2005, 2008 버전에서만 사용 가능.

 

연 이틀 동안 ORACLE --> MS-SQL로 갈아타겠다고 온갖 개고생을 떨었는데 설치는

계속 오류나서 중도 포기했고. 애초에 MS-SQL 기본으로 작성된 쿼리가 오라클에서 안 돌아가는 통에

이런 삽질을 시작한 건데. 결국 아무 소득도 없다.

소스 코드 분석을 해야 하는데,

기본이 되는 DB 설치부터 애 먹고 있으니 이틀 동안 그야말로 대판 쌩 고생 떨고 아무 소득도 없다는.

MySQL은 또 왜 계속 설치 오류가 뜨는 건지.

누구는 지식인으로, 또는 구글로 잘도 오류 해결한다드만.

이건 대체 뭐 어쩌라고. 알려준대로 해도 다 안돼! 내가 배운 컴퓨터 관련 지식은 전부 다 헛것이었나.

아 젠장.
OLEDB 연동을 위해 tnsnames.ora 파일 위치를 찾느라 조금 헤맸다.
설치 경로에 따라 다르겠지만 일반적으로 다음과 같다.

C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN
환경 : Oracle 10g, Oracle SQL Developer

예를 들어 DSN(데이터 소스 네임)이 board이고,

유저 아이디가 admin, 패스워드가 admin 이라면, ASP에서 아래와 같이 DB를 연동한다.

set conn = Server.CreateObject("ADODB.Connection")

conn.Open "Provider=OraOLEDB.Oracle;Data Source=board;User ID=admin;Password=admin;Persist Security Info=True;"

★ 잠깐? 프로바이더는 어떤 DB를 사용하는가에 따르다.

현재 쓰고 있는 DB에 맞게 프로바이더를 뽑아 내고 싶다면, 일단 바탕화면에서 [새로만들기]로 임의의 "텍스트"파일을 만들고,

확장자를 ".udl"로 바꿔준 다음에 해당 파일에 오른쪽 마우스 클릭, [속성]에 들어간다.

[공급자] 탭을 선택하면 리스트가 주욱 뜨는데 이곳에서 원하는 프로바이더를 [선택]한다. 그리고, [다음]을 누르고

[연결]탭으로 이동한다. 알맞은 데이터 소스 네임과 아이디, 패스워드를 입력하고 [연결테스트]를 실시한 후 올바르게 연결되었

다면 "성공" 메시지 창이 뜰 것이다. [확인] 누르고 [속성]창은 닫는다. 그리고 해당 파일을 메모장으로 열면 원했던 "프로바이더" 문

을 뽑아낼 수 있다. ^^

이미 기존에 톰캣 8080 포트를 사용 중이었으나,
오라클 10g를 깔고 나서 8080포트는 오라클이 선점해 버렸다.

대략 이런 상태….



그래서 오라클 DB 포트를 변경하고자 한다.
명령 프롬프트를 열고 sys 계정으로 sqlplus에 접속한다.

C:\>sqlplus
사용자명 입력, 암호 입력

SQL> select dbms_xdb.gethttpport from dual;
현재 오라클이 사용 중인 포트를 확인할 수 있다.



자, 이제 8080포트에서 8000포트로 변경하도록 하자.

SQL> begin
    2   dbms_xdb.sethttpport('8000');
    3   end;
    4   /


포트 번호 변경이 성공적으로 완수되었다고 메시지가 뜬다.

SQL>select dbms_xdb.gethttpport from dual;

포트 번호가 8080에서 8000으로 변경된 걸 확인할 수 있다.




  1. 사자 2013.11.17 23:35 신고

    감사합니다.
    덕분에 포트변경 잘 했어요.

+ Recent posts