로컬 테스트시 오류 발생
원인유추
  1. 권한문제
  2. 타임존 인식문제
 
  1. 은 아니었고 왜냐면 툴(workbench)로 잘 접속된다. telnet 해봐도 연결 잘되고
 
검색하다보니,  아래 글을 발견
타임존을 아시아/서울로 설정하니 해결됨.
 
 
mysql-connector-java 5.1.X 버전 이후로 KST 를 인식못하는 오류가 있다.
 
 
또는, 기존 운영중인 서버라면 아래와 같이 Asia/Seoul 로 설정해 준다.

 

타임존을 UTC 또는 Asia/Seoul 로 지정해야 정상적으로 연결된다.또는 커넥터를 낮은 버전으로 해도 된다.
반응형

대문자로 만들어놓은 테이블명이 무슨이유인지 .. 모르겠지만 소문자로 변경되었을 떄

대문자로 다시 변경하는 방법

대/소문자 구분이 없는경우이므로 대/소문자를 동일하게 인식한다.

 

테이블명 : TB_MEMBERS

sql > rename tb_members to TB_MEMBERS

이런식으로하면 오류가 발생한다. 동일한 이름으로 인식하므로.. 

따라서 아래처럼 해야한다.

sql > rename tb_members to tb_members_temp

sql> rename tb_members_temp to TB_MEMBERS

 

 

sql> rename tablename to tempName;
sql> rename tempName to TABLENAME;

 

반응형

mysql 설치하고 한글 깨짐 발생

mysql >  status; 해보면 캐릭터셋이 저 모양이다.

 

설치 폴더(C:\Program Files\MySQL\MySQL Server 5.7)에 my.ini 파일을 찾아서 수정하면 된다고 하는데..

근데.. 파일이 없다. 한참 찾았다. 그래도 안보인다. OTL

만들어도 봤다.... 안된다.

아~ 놔 @,.@

 

파일은 여기 있었다.

C:\ProgramData\MySQL\MySQL Server 5.7

 

근데 저 폴더가 안보인다. 

눈을 씻고 찾아봐도 안보인다.

근데 저 경로를 입력하면 보인다. 

 

보기탭에서 숨긴 항목 체크해주면 보인다.

한참 찾았네..

 

이제 설정을 바꿔줘야지 my.ini를 열고

뭐가 잔뜩 써있다.

 

그 중 주석으로 되어있는 기본 문자셋서버 문자셋utf8로 변경하면 된다.

앞에 # 은 주석이라는 의미 # 을 지우고 뒤에 utf8 이라고 적는다.

 

#default-character-set=
default-character-set=utf8


#character-set-server=
character-set-server=utf8

 

서비스 열고 

Mysql57 서비스를 재시작한다.

 

 

변경되었는지 확인해본다.

 

이제 한글 잘 된다.

 

my.ini 변경하면서 

Mysql57 서비스 시작중 오류 1503 발생으로 삽질을 좀 했는데..

결국 원인은 my.ini 에 오타때문이었다... 

 

반응형

집계 쿼리 (SUM, AVG, MIN, MAX, COUNT .. 등) 를 하다보면 

"경고: 집계 또는 다른 SET 작업에 의해 Null 값이 제거되었습니다. " 

이런 경고 메시지가 나오는 경우가 있다.

원인은  .. 

집계 데이터에 Null 이 존재하는 경우이다.

이런 경우 Null을 제거하고 집계했다는 메시지인 듯하다.

따라서 결과는 잘 나온다.

 

테스트 ... 


-- 테이블 생성
create table pjs_test
(
seqno int,
price int
)

-- 데이터 입력
insert into pjs_test 
select 1, null
union all select 1, 100

-- 집계 쿼리
select sum(price) from pjs_test

 

-- 결과

 

반응형


간혹, DB가 손상되는 경우가 있다. 


하지만 이런 경우에도 DB 백업시 Checksum 옵션을 사용하지 않으면 정상 백업이 가능하다.

심지어 CheckSum 옵션을 사용했는데도 불구하고 정상 백업되는 경우가 있다. 


이런 일을 방지하고자 한다면, 

우선 dbcc checkdb 로 오류 검사를 한후 

오류가 없는경우 Database Backup 을 하면 된다.



SET @sql = 'DBCC CHECKDB (' + QuoteName(@name) + ') WITH ... options ...' EXEC sp_executesql @sql IF @@ERROR <> 0 BEGIN .. Error Handler ... END ... Continue with backup ...


dbcc checkdb로 해당 DB를 체크한 후, 오류 발생시 @@ERROR가 0이 아니므로 가능한 코드겠다




* 참고 

@@ERROR : https://technet.microsoft.com/ko-kr/library/ms190193(v=sql.105).aspx

* 원문

http://forums.sqlteam.com/t/only-create-backup-if-dbcc-checkdb-is-ok/9459/2


반응형

DB 에러 로그를 확인해보면.. 서비스를 재시작하지도 않았는데..


시도때도 없이 database를 시작하고 있다.

찾아봤더니.. AUTO_CLOSE 옵션 때문이라고함.

기본 ON으로 되어있어.. 자꾸 재시작하는 것~

이것 때문에 IO 부하가 생기고 Performance도 떨어짐

가끔 프로그램에서 DB 연결이 끊어지는 오류가 발생하기도 한다.


해결방법은


ALTER DATABASE [데이터베이스명] SET AUTO_CLOSE OFF


AUTO_CLOSE 를 OFF 하면 된다고.. 함.



* 참고

https://msdn.microsoft.com/en-us/library/ms190249.aspx

https://msdn.microsoft.com/ko-kr/library/bb402929.aspx

http://blog.sqlauthority.com/2016/09/22/sql-server-set-auto_close-database-option-off-better-performance/

반응형

 var query = from s in context.Books
                            select new
                            {

BookName = s.Name,

BookNo = s.BookNo

};    



위의 Linq 구문을 실행하면 아래 그림과 같은 에러가 발생한다.



원인은 BookNo 의 Type 때문이다.  BookNo의 Type은  Nullable<int> 이다.


해결 방법은 아래와 같이 BookNo 의 Type을 Cast 해준다.


var query = from s in context.Books
                            select new
                            {

BookName = s.Name,

BookNo = (int?) s.BookNo

};    

반응형

 

1. -- DB분리 ( DB가 사용중 일 경우 분리 안됨. 모든 연결을 끊고 한다.)
    use master
    exec sp_detach_db [데이터베이스명], 'true'

 

 

2. -- 파일 이동
     mdf, ldf 파일을 이동한다.

 

 

3. -- DB 붙이기

exec sp_attach_db [데이터베이스명], 'MDF파일 물리 경로', 'LDF파일 물리 경로'

 

       3.1. -- mdf만 붙이기
            exec sp_attach_single_file_db [데이터베이스명], 'MDF파일 물리 경로'

 

3.2. -- 붙인DB 가 (읽기전용)인경우
     옮긴 디렉터리 권한을 수정한 후 DB를 다시 분리(sp_detach_db) 후 붙인(sp_attach_db)다.

 

반응형

-- ON DELETE CASCADE 제약조건 실습..

 

-- 부모 테이블

CREATE TABLE TAB_A (

idx     int identity(1,1) primary key,

value     varchar(10)

)

 

-- 서브 테이블

CREATE TABLE TAB_A_SUB (

seq     int identity(1,1) primary key,

value    varchar(10),

idx        int

)

 

-- FK 설정

ALTER TABLE  [dbo].[TAB_A_SUB]  WITH CHECK ADD  CONSTRAINT [FK_TAB_A_idx] FOREIGN KEY([idx])

REFERENCES [dbo].[TAB_A] ([idx])

-- 데이터 삽입

INSERT INTO TAB_A (value) VALUES('aaa');

INSERT INTO TAB_A_SUB(value, idx) VALUES ('ttt', 1);

 

-- 삭제

DELETE [TAB_A] WHERE idx = 1

 

-- FK 제약조건때문에 삭제가 되지 않는다.

-- 삭제하려면 서브 테이블의 데이터 부터 지워야한다.

-- 그러나 ON DELETE CASCADE 제약조건을 서브 테이블에 부여해주면 부모테이블 삭제시 서브 테이블의 데이터도 함께 삭제 된다.

 

 

-- ON DELETE CASCADE 제약조건

ALTER TABLE [dbo].[TAB_A_SUB] ADD CONSTRAINT [FK_cascade_idx] FOREIGN KEY ([idx])
   REFERENCES [dbo].[TAB_A]([idx]) ON DELETE CASCADE

 

-- 삭제

DELETE [TAB_A] WHERE idx = 1

 

 

 

 

 

 

반응형

 

MSSQL 에서 천단위 컴마를 찍고 싶을 때

 

SELECT CONVERT(VARCHAR(50), CAST(20000 AS MONEY), 1)

 

결과는  20,000.00

 

MONEY 타입은 소숫점 둘째자리까지 표현됨.

소숫점을 없애고 싶으면 REPLACE 하면됨

 

SELECT  REPLACE(CONVERT(VARCHAR(50), CAST(20000 AS MONEY), 1) , '.00', '')

 

결과는 20,000

 

 

 

MSSQL의 CAST AND CONVERT 도움말 중

money and smallmoney Styles

When expression is money or smallmoney, style can be one of the values shown in the following table. Other values are processed as 0.

Value

Output

0 (default)

No commas every three digits to the left of the decimal point, and two digits to the right of the decimal point; for example, 4235.98.

1

Commas every three digits to the left of the decimal point, and two digits to the right of the decimal point; for example, 3,510.92.

2

No commas every three digits to the left of the decimal point, and four digits to the right of the decimal point; for example, 4235.9819.

126

Equivalent to style 2 when converting to char(n) or varchar(n)

 

 

 

 

참고  : http://msdn.microsoft.com/en-us/library/ms187928.aspx

반응형

+ Recent posts