분류 전체보기
- 롯데이라 산리오 인형세트 헬로키티 구매 2018.10.20
- OUTPUT : inset, update 시 적용된 칼럼값 구하기 2012.09.10
- 로그파일 축소 2012.07.22
- 리눅스) shutdown 2012.02.07
- 리눅스) umount : device is busy 2012.02.07
- 리눅스) 읽기전용 파일 시스템 2012.02.07
- with(updlock) 케이스별 테스트 2012.01.26
- MSSQL identity 테스트 2012.01.20
- (펌) MSSQL Identity 자동 증가함수 2012.01.20
- gettimeofday timeval 빼고 더하기 2011.12.28
롯데이라 산리오 인형세트 헬로키티 구매
OUTPUT : inset, update 시 적용된 칼럼값 구하기
select * from t_order_no
-- t_order_no
1
update t_order_no
set t_order_no=2
output inserted.t_order_no new
, deleted.t_order_no before
-- new old
2 1
'MSSQL' 카테고리의 다른 글
로그파일 축소 (0) | 2012.07.22 |
---|---|
with(updlock) 케이스별 테스트 (0) | 2012.01.26 |
MSSQL identity 테스트 (0) | 2012.01.20 |
(펌) MSSQL Identity 자동 증가함수 (0) | 2012.01.20 |
(펌) T_SQL 같은 그룹의 데이터를 붙여서 출력하기 (0) | 2011.12.27 |
로그파일 축소
--1. 로그 파일 크기 확인(모든 데이터베이스에서 트랜잭션 로그 공간의 사용에 관한 통계를 제공)
DBCC SQLPERF(LOGSPACE)
--2. 로그 데이터 지우기
BACKUP LOG dfo01 WITH NO_LOG
--3. 로그 파일 크기 줄이기
DBCC SHRINKFILE(dfo01_Log, 10)
--4. 로그 파일 크기 확인
DBCC SQLPERF(LOGSPACE)
'MSSQL' 카테고리의 다른 글
OUTPUT : inset, update 시 적용된 칼럼값 구하기 (0) | 2012.09.10 |
---|---|
with(updlock) 케이스별 테스트 (0) | 2012.01.26 |
MSSQL identity 테스트 (0) | 2012.01.20 |
(펌) MSSQL Identity 자동 증가함수 (0) | 2012.01.20 |
(펌) T_SQL 같은 그룹의 데이터를 붙여서 출력하기 (0) | 2011.12.27 |
리눅스) shutdown
# shutdown -k now : 시스템 종료 경고만 출력
# shutdown now : 유지보수(싱글유저)모드로 들어감
* runlevel
0 : 시스템 종료
1 : 유지보수(싱글유저)모드
6 : 시스템 재시작
시스템을 종료하기 위해서는 runlevel 0으로 들어가야 함.
shutdown 시 -h 옵션을 주지 않으면 기본값으로 runlevel 1(유지보수모드)로 전환됨
---------------------------
--시스템 종료
---------------------------
# shutdown -h now
# init 0
# poweroff
# halt
---------------------------
-- 시스템 재시작
---------------------------
# shutdown -r now
# init 6
# reboot
'도우미' 카테고리의 다른 글
gettimeofday timeval 빼고 더하기 (0) | 2011.12.28 |
---|---|
(펌) 네트워크 함수의 Blocking/Non Blocking I/O 동작 (0) | 2011.12.22 |
yum을 사용하여 rpm패키지 다운로드 하는 방법 (0) | 2011.12.22 |
사업자 업종코드 별 경비율 (0) | 2011.11.17 |
Linux Disk Label 변경 방법(e2label 사용, /etc/fstab 편집) (0) | 2011.11.16 |
리눅스) umount : device is busy
OS : CentOS 5.7
1. 사건 개요
테스트서버 부팅 중 GRUB 로딩 에러 발생.
SATA 케이블 변경 후 부팅 성공.
2. 파일시스템 점검을 위해 umount 시도
[root@test02 ~]# umount /dev/mapper/VolGroup01-LogVol00
umount: /: device is busy
umount: /: device is busy
3. /etc/inittab 파일 수정 후 single user mode 로 재부팅
id:1:initdefault:
4. umount 를 위한 조치
1) 해당 디렉토리 사용자 또는 프로세스 확인
[root@test02 ~]# fuser -cu /dev/mapper/VolGroup01-LogVol00
2) 강제로 죽이기
[root@test02 ~]# fuser -ck /dev/mapper/VolGroup01-LogVol00
3) umount 재시도
[root@test02 ~]# umount /dev/mapper/VolGroup01-LogVol00
5. 파일시스템 체크
[root@test02 ~]# e2fsck -fv /dev/mapper/VolGroup01-LogVol00
6. /etc/inittab 파일 원복
id:5:initdefault:
'STS' 카테고리의 다른 글
리눅스) 읽기전용 파일 시스템 (0) | 2012.02.07 |
---|---|
ar 사용법 : archive 파일 생성 (0) | 2011.01.07 |
리눅스) 읽기전용 파일 시스템
OS : CentOS 5.7
1. 사건 개요
테스트서버 점검 중 로그가 쌓이지 않음을 발견.
파일을 작성하거나 수정할 수 없음.
vi 에서 [읽기전용 파일 시스템]이란 문구를 발견
2. 점검
1) 파티션 확인
[root@test01 ~]# df -kh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
448G 55G 370G 13% /
/dev/sda1 99M 25M 70M 26% /boot
tmpfs 1014M 0 1014M 0% /dev/shm
2) readonly 확인
[root@test01 ~]# hdparm /dev/mapper/VolGroup00-LogVol00
/dev/mapper/VolGroup00-LogVol00:
IO_support = 0 (default 16-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 0/0/0, sectors = 968294400, start = 0
3) 배드블럭 검사
[root@test01 ~]# badblocks -v /dev/mapper/VolGroup00-LogVol00
Checking blocks 0 to 484147200
Checking for bad blocks (read-only test): done
Pass completed, 0 bad blocks found.
3. 문제해결
1) 리부팅
[root@test01 ~]# shutdown -r now
Broadcast message from root (pts/1) (Tue Feb 7 10:11:36 2012):
The system is going down for reboot NOW!
2) 파일시스템 체크 중 수동으로 파일시스템을 체크하라는 메시지 출현
3) e2fsck -cfv /dev/mapper/VolGroup00-LogVol00
4. e2fsck 옵션
Emergency help:
-p Automatic repair (no questions)
-n Make no changes to the filesystem
-y Assume "yes" to all questions
-c Check for bad blocks
-f Force checking even if filesystem is marked clean
-v Be verbose
-b superblock Use alternative superblock
-B blocksize Force blocksize when looking for superblock
-l bad_blocks_file Add to badblocks list
-L bad_blocks_file Set badblocks list
-p : 질문 없이 자동으로 넘어 간다(화면에 않뿌려줌)
-n : 치료가 아닌 검사 용이다.
-y : 질문이 나오면 무조건 YES 한당.
-c : 배드 섹터가 있는지 확인 해 준당
-f : 파일 시스템에 문제 없어도 강제로 검사(바보같은 옵션인듯)
-v : 메세지를 자세히 나오게 한다
-l bad_blocks_file 배드 섹터 있는 자룔르 파일로 만든당
'STS' 카테고리의 다른 글
리눅스) umount : device is busy (0) | 2012.02.07 |
---|---|
ar 사용법 : archive 파일 생성 (0) | 2011.01.07 |
with(updlock) 케이스별 테스트
with(updlock) 케이스별 테스트
BEGIN TRANSACTION 과 함께 사용하여야 함.
FU_CALCSET
-------------------------------------------------
key_no | name | status
-------------------------------------------------
1 aaa 1
2 bbb 1
3 ccc 1
4 ddd 1
----------------------------------------------------------------------
-- case 1 : 세션1 검색결과set의 모든 row에 updlock이 걸린다.
-- 다건 vs 단건
----------------------------------------------------------------------
-- 세션1
BEGIN TRANSACTION;
select * from FU_CALCSET with(updlock) where status = '1';
sleep(30);
cursor.update();
-- 세션2-1
select * from FU_CALCSET where key_no = 1;
sleep(5);
cursor.update();
===>
실패 : 세션1의 지연시간동안 세션1 검색결과set의 모든 레코드를 update 할 수 없음.
-- 세션2-2
select * from FU_CALCSET with(updlock) where key_no = 2;
===>
실패 : 세션1의 지연시간동안 lock 걸림.
-- 세션2-3
BEGIN TRANSACTION;
select * from FU_CALCSET with(updlock) where key_no = 3;
===>
실패 : 세션1의 지연시간동안 lock 걸림.
----------------------------------------------------------------------
-- case 2 : BEGIN TRANSCATION 없이 사용한 updlock은 작동안함.
-- 다건 vs 단건
----------------------------------------------------------------------
-- 세션1
select * from FU_CALCSET with(updlock) where status = '1';
sleep(30);
cursor.update();
-- 세션2-1
select * from FU_CALCSET where key_no = 1;
sleep(5);
cursor.update();
===> 성공
-- 세션2-2
select * from FU_CALCSET with(updlock) where key_no = 2;
sleep(5);
cursor.update();
===> 성공
-- 세션2-3
BEGIN TRANSACTION;
select * from FU_CALCSET with(updlock) where key_no = 3;
sleep(5);
cursor.update();
COMMIT TRANSACTION;
===> 성공
----------------------------------------------------------------------
-- case 3 : 단건 vs 다건
----------------------------------------------------------------------
-- 세션1
BEGIN TRANSACTION;
select * from FU_CALCSET with(updlock) where key_no = 3;
sleep(25);
cursor.update();
-- 세션2-1
select * from FU_CALCSET where status = '1';
sleep(5);
cursor.update();
===>
실패 : 3번 레코드를 업데이트 할때 세션1의 지연시간만큼 lock걸림
-- 세션2-2
select * from FU_CALCSET with(updlock) where status = '1';
===>
실패 : 세션1의 지연시간동안 lock 걸림.
3번 레코드의 status가 '1'이기 때문에 검색결과set에 포함된다.
'MSSQL' 카테고리의 다른 글
OUTPUT : inset, update 시 적용된 칼럼값 구하기 (0) | 2012.09.10 |
---|---|
로그파일 축소 (0) | 2012.07.22 |
MSSQL identity 테스트 (0) | 2012.01.20 |
(펌) MSSQL Identity 자동 증가함수 (0) | 2012.01.20 |
(펌) T_SQL 같은 그룹의 데이터를 붙여서 출력하기 (0) | 2011.12.27 |
MSSQL identity 테스트
create table testdb
( a int identity(1,1)
, b varchar(10) default 'test')
-- 데이터가 없을때 idval 값은 1
select * from testdb
select idval = IDENT_CURRENT('testdb')
select isnull(max(a),0) from testdb
-- no data
-- 1
-- 0
insert into testdb default values select @@identity
-- 1
select * from testdb
-- 1 test
select idval = IDENT_CURRENT('testdb')
-- 1
select isnull(max(a),0) from testdb
-- 1
insert into testdb default values select @@identity
-- 2
select * from testdb
-- 1 test
-- 2 test
select idval = IDENT_CURRENT('testdb')
-- 2
select isnull(max(a),0) from testdb
-- 2
insert into testdb values (3,'111')
-- 메시지 8101, 수준 16, 상태 1, 줄 1
-- 테이블 'testdb'에 있는 ID 열의 명시적 값은 열 목록이 사용되고 IDENTITY_INSERT가 ON일 때만 지정할 수 있습니다.
set identity_insert testtable on;
insert into testtable (col1, col2) select coll1, coll2 from testtable2
--insert할 컬럼을 정확히 명시해야 함
set identity_insert testtable off;
--------------------------------------------------------
@@IDENTITY는 싱글쓰레드에서만 사용해야하는 이유
--------------------------------------------------------
@@IDENTITY와 SCOPE_IDENTITY는 현재 세션의 테이블에서 생성된 마지막 ID 값을 반환합니다. 그러나, SCOPE_IDENTITY는 현재 범위 내에서만 값을 반환합니다. @@IDENTITY는 특정 범위로 제한되지 않습니다.
IDENT_CURRENT는 범위와 세션으로 제한되지 않고, 지정된 테이블로 제한됩니다. IDENT_CURRENT는 임의의 세션과 범위에 있는 특정 테이블에 생성된 ID 값을 반환합니다. 자세한 내용은 IDENT_CURRENT를 참조하십시오.
위의 설명과 같이 @@IDENTITY는 멀티스레드에서 사용할때 엉뚱한 값을 가지고 있을 가능성이 높다.
되도록 IDENT_CURRENT(‘테이블명’) 을 사용하자.
'MSSQL' 카테고리의 다른 글
로그파일 축소 (0) | 2012.07.22 |
---|---|
with(updlock) 케이스별 테스트 (0) | 2012.01.26 |
(펌) MSSQL Identity 자동 증가함수 (0) | 2012.01.20 |
(펌) T_SQL 같은 그룹의 데이터를 붙여서 출력하기 (0) | 2011.12.27 |
T-SQL) group by 결과를 가로로 출력 (0) | 2011.12.27 |
(펌) MSSQL Identity 자동 증가함수
Identity
:오라클의 시퀀스와 비슷한 기능
------------------------------------------------------------------------
#1 기본 사용법
사용예)
<?xml:namespace prefix = p /><?xml:namespace prefix = p />
name varchar(256) NULL
#2 인서트시 증가된 값 얻어오기
인서트한 identity 불러오기 위해서는 보통 다시한번 select를 해주게 된다
사용예)
insert into test(name) values('James') select @@Identity as 'id' (밑줄은 별칭이므로 아무거라도 상관 없다.)
-------------------------------------------------------------------------
#3 증가값을 임의로 정해보자
:Identity를 선언한 경우에는 인서트 시 ,Identity선언 컬럼의 값을 임의로 지정할 수 없다
ex) insert into test(no,name) values(1000,'James')
테이블 생성 시 디폴트 값으로 임의의 번호로 지정하고 싶거나,
삭제된 번호를 채워 넣고 싶을 때 유용한 방법이다.
-SET IDENTITY_INSERT [테이블명] ON;
증가값을 수동 지정
-SET IDENTITY_INSERT [테이블명] OFF;
증가값을 자동 지정 (보통 우리가 사용하는 상태 )
-DBCC CHECKIDENT ('[테이블명]', RESEED, 0);
시작값을 임의 지정
사용예)
SET IDENTITY_INSERT test ON; -- Identity 증가값을 수동지정
insert test(no,name) values(99999,'admin') --수동입력 가능
SET IDENTITY_INSERT product_lank OFF; --Identity 증가값을 자동지정
--※ 증가값이 최초 1-->99999 변경되어짐
즉,다음 인서트 값 Identity는 100000 됨
DBCC CHECKIDENT ('product_lank', RESEED, 0); -- 시작값을 0으로 지정, 다음 증가값은 1이됨.
[출처] [MSSQL] Identity 자동 증가함수 (IT in Success) |작성자 미호리
'MSSQL' 카테고리의 다른 글
with(updlock) 케이스별 테스트 (0) | 2012.01.26 |
---|---|
MSSQL identity 테스트 (0) | 2012.01.20 |
(펌) T_SQL 같은 그룹의 데이터를 붙여서 출력하기 (0) | 2011.12.27 |
T-SQL) group by 결과를 가로로 출력 (0) | 2011.12.27 |
(펌) MSSQL Server 백업 / 복구 시나리오 (0) | 2011.10.20 |
gettimeofday timeval 빼고 더하기
sys/time.h에 있는 매크로 이용
# define timeradd(a, b, result) \ do { \ (result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \ (result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \ if ((result)->tv_usec >= 1000000) \ { \ ++(result)->tv_sec; \ (result)->tv_usec -= 1000000; \ } \ } while (0)
# define timersub(a, b, result) \ do { \ (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ if ((result)->tv_usec < 0) { \ --(result)->tv_sec; \ (result)->tv_usec += 1000000; \ } \ } while (0)
'도우미' 카테고리의 다른 글
리눅스) shutdown (0) | 2012.02.07 |
---|---|
(펌) 네트워크 함수의 Blocking/Non Blocking I/O 동작 (0) | 2011.12.22 |
yum을 사용하여 rpm패키지 다운로드 하는 방법 (0) | 2011.12.22 |
사업자 업종코드 별 경비율 (0) | 2011.11.17 |
Linux Disk Label 변경 방법(e2label 사용, /etc/fstab 편집) (0) | 2011.11.16 |