Sybase

게시글 보기
작성자 유건데이타 등록일 2015-05-14
제목 기본내용정리
시스템 관리자 암호 설정

Sybase 소프트웨어를 설치하면 “sa”라는 Sybase 시스템 관리자 계정이 작성됩니다.
“sa”로 로그인한 사용자는 master를 포함한 Adaptive Server의 모든 데이터베이스를 전체 권한으로 사용할 수
있습니다.

새로 설치를 한 직후에는 “sa” 계정에 암호가 없습니다. 암호의 초기 디폴트값은 NULL이며 프로덕션 환경에서 Sybase 시스템 관리자는 디폴트 이외의 암호를 사용해야 합니다.
보안을 최대한 강화하려면 문자와 숫자를 조합하여 길이가 적어도 6자 이상인 암호를 설정하는 것이 좋습니다.
Sybase 시스템 관리자는 새로운 Adaptive Server에 “sa”로 로그인한 후 sp_password를 사용하여 암호를
설정해야 합니다.


%SYBASE%\%SYBASE_OCS%\bin\isql -Usa -P -Sserver-name
1> sp_password null, new_password
2> go


여기서 null은 디폴트 암호이고 new_password는 “sa” 계정에 지정하는 암호입니다.


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

서버 실행 여부 확인

Sybase 서버를 설치하여 구성하고 나면 이 서버가 실행 중이어야 합니다.
서버가 실행되고 있는지 확인하려면 다음과 같이 합니다.

- Windows 작업 관리자에서 [시작 | 설정 | 제어판 | 서비스]를 선택합니다.
- 서비스 목록을 스크롤하여 Sybase Adaptive Server Server_servername을 찾습니다.
여기에서 servername은 서버의 이름입니다.
서버가 시작되었는지 여부가 [상태] 열에 표시됩니다. 서버가 시작되지 않았으면 서버를 선택한 다음
[시작]을 클릭합니다.

서버에 연결할 수 있는지 확인

빠른 테스트를 수행하려면 isql을 사용합니다. SYBASE.csh를 준비합니다.
그런 다음 isql을 사용하여 서버에 연결합니다.

- 명령 프롬프트에서 다음을 입력합니다.

isql -Usa -Ppassword -Sserver_name

여기에서 server_name은 Adaptive Server 이름입니다.
로그인이 성공하면 명령 프롬프트가 나타납니다.

- Adaptive Server 버전 번호를 표시하려면 다음을 입력합니다.

1> select @@version
2> go

Adaptive Server의 버전 번호가 표시됩니다. 출력에서 Adaptive Server의 버전이 12.5.1로 표시되어야 합니다.

또는 dsedit를 시작합니다.

- Windows 작업 표시줄에서 [시작 | 프로그램 | Sybase | dsedit]를 선택합니다.
- [확인]을 클릭하여 [디렉토리 서비스] 창을 엽니다.
- servername(테스트하려는 서버의 이름)을 선택합니다.
- [서버 옵션] 드롭 다운 메뉴에서 [핑]을 선택합니다.
- 성공적으로 연결되면 연결에 성공했다는 메시지가 나타납니다.

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

1. 데이타베이스 띄우기
1) 데이타베이스 프로세스 상황보기
$showserver
2) 띄우기
$cd $SYBASE/install/
$startserver -f RUN_POSCO

2. 데이타베이스 내리기
1) 들어가기
$ isql -Usa -P
> shutdown

3. 환경 변경하기
1) 메모리 변경하기
> sp_configure 'total memory', 25600 (크기 계산 : 50 *512 => 1M(=512 page)
> go
Parameter Name Default Memory Used Config Value Run Value
-------------- ------- ----------- ------------ ---------
total memory 750 51200 25600 25600

2) 지금 사용중인 프로세서 정보들을 보기
> sp_who
> go
spid status loginame hostname blk dbname cmd
---- ------ --------- -------- --- ------ ---
1 running sa pos 0 master SELECT
2 sleeping NULL 0 master NETWORK HANDLER
3 sleeping NULL 0 master DEADLOCK TUNE
4 sleeping NULL 0 master MIRROR HANDLER
5 sleeping NULL 0 master HOUSEKEEPER
6 sleeping NULL 0 master CHECKPOINT SLEEP
3) 사용자 동시접속자 수 설정
> sp_configure 'user_conn', 25600 (크기 계산 : 50*512 => 1M(512page)
> go
Parameter Name Default Memory Used Config Value Run Value
-------------- ------- ----------- ------------ ---------
number of user connections 25 1876 25 25

4) 최대 접속
> sp_configure 'max online'

5) 디바이스 상황 확인
> sp_configure 'device'

6) 생성된 계정확인
> sp_helpuser
> go
Users_name ID_in_db Group_name Login_name Default_db
--------------- -------- -------------- -------------- -----------
dbo 1 public sa master
guest 2 public NULL NULL
probe 3 public probe master

7) 데이타베이스 상황 보기
> sp_helpdb
> go
name db_size owner dbid created status
----- --------- ----- ---- ------------ ---------
POSCO 100.0 MB sa 5 Jan 27, 2000 select into/bulkcopy, trunc log on chkpt
master 5.0 MB sa 1 Jan 01, 1900 no options set
model 2.0 MB sa 3 Jan 01, 1900 no options set
pubs2 2.0 MB sa 6 Jan 27, 2000 no options set
sybsystemprocs 20.0 MB sa 4 Jan 27, 2000 trunc log on chkpt
tempdb 2.0 MB sa 2 Jan 27, 2000 select into/bulkcopy

(1 row affected)
(return status = 0)

4. 데이타 베이스 생성하기
1) 데이타 디바이스 생성하기
> disk init
> name='POSCO_DEV',(이름)
> physname='/cel/sybase/DBDEVICE',(저장디렉토리)
> vdevno=2, (디바이스번호)
> size=40960 (페이지 번호, 1page=2k, 40960page=80M)

2) 로그 디바이스 생성하기
> disk init
> name='POSCO_LOG', (이름)
> physname='/cel/sybase/DBDEVICE', (저장디렉토리)
> vdevno=3, (디바이스 번호)
> size=10240 (페이지 번호, 1page=2k, 10240page=20M)

3) 데이타베이스 생성하기
> create database POSCO on POSCO_DEV=80
> log on POSCO_LOG=20

4) 해당 데이타베이스에 들어가기
> use POSCO
5) 프로시져 만들기
> create proc 이름
> as
> ...........
> return

5. 백업 & 복구
1) 우선 백업 프로세스 띄우기
$ startdevice -f RUN_SYB_BACKUP
2) 덤프 받기
> dump database master to '화일명' => 화일로 받을 때
'dev/rmt/0' => 디바이스로 받을 때
3) 체크 옵션을 두어서 일정시간이 되면 작동하도록
> sp_dboption POSCO, 'trunc log on ckpt', true => 설정
> checkpoint => 바로 checkpoint 작동하도록 함,
commit된 데이타를 물리적으로 저장하고 비움
> sp_configure 'recovery' => 설정상황을 보여줌.

4) 백업 프로세스 내리기
> shundown SYB_BACKUP

6. 기타 사용법
1) GO 40 (앞에 수행한 명령을 40회 반복하여 처리하기)
2) sp_help (시스템 관련 Object 표시)
3) 트랙젝션 걸기
> begin tran
> ..........
> end tran

7. TIPS
1) insert aaa values('aaa') => into 사용안해도
2) varchar의 max 255임, 따라서 그 이상은 text type을 사용하여야 함.
3) bcp로만 data copy됨
4) 로그가 꽉찬 경우
> dump tran 디바이스명 width no_log
5) dump tran 디바이스명 with truncate_only

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

Sybase 기본 교육


1. 소개

1) 기본적으로 생성되는 데이터베이스(4개외에는 따로 생성한 디비들)
- master : 서버 전체에 대한 오브젝들의 정보를 가지고 있는 디비
- model : 이후 생성될 사용자데이타베이스의 모델이 되는 디비
- sybsystemprocs : 스토어프로시져가 쌓이는 디비
- tempdb : 임시공간으로 활용하는 곳
2) pubs2 : 샘플 데이터베이스를 생성하는 스크립터
- UNIX : $SYBASE_HOME/scripts/installpubs2
- NT : $SYBASE_HOME/scripts/instpbs2.sql
3) T-sql
- isql -U로그인아이디 -P패스워드 -s서버 -i스크립터명 -o결과저장화일명
- 표준 ansi-sql에 위배되는지 검사하기
set fipsflagger on/off (검사하기/안하기)
예) select type, avg(price) from titles => 사이베이스는 그냥 반복해서 평균뿌림.
On하면 에러메세지 나오고 내용출력
- isql안에서 유닉스명령을 수행하려면 : !!
예) 1> !!isql -Usa -P -iaaa.sql : aaa.sql 스크립터문을 수행.
- 디비 이동시 : 꼭 go를 밑에 넣어주어야 함.
> use 디비명
> go
- 이전 입력글을 에디팅하여 다시 수행시 :
> vi
- 주석문
> -- sample test 또는 /* 주석 */
4) SQL Advantage client
- 설정 : dedit를 이용하여 서버이름을 정하고 IP주소와 포트를 지정해줌
- 연결 : 접속시 위에서 설정한 서버이름을 선택하고 아이디와 패스워드입력.

2. 테이블 생성 및 수정, 관리

1) 테이블 생성(DDL)
- 250개의 칼럼 지정 가능
- 정수타입 : tinyint, smallint, int, numeric(p,s), decimal(p,s)
예) 123456.789 : numeric(8,2) => 123456.79,
numeric(10) => 123457, numeric(8,-2) => 123500
numeric(8,3) => 에러, numeric(7,2) => 에러
- 실수타입 : float(p), double precision, real
- money타입 : money, smallmoney
- 날짜타입 : datetime, smalldatetime
- 문자타입 : char(n), nchar(n), varchar(n), nvarchar(n), text
예) nchar는 national character로 언어별 문자수를 크기지정
한글버젼의 경우 char(5)=5bytes, nchar(5)=10bytes
cf) select @@ncharsize : 현재 버전의 문자크기 구하기
cf) char,varchar는 max 255, text는 max 2G
- binary타입 : bit, binary(n), varbinary(n), image(2G까지)
- 새로운 타입 지정 ( sp_addtype / sp_droptype )
예) sp_addtype typ_ch_pub_id, "char(4)", null
""를 넣은 이유는 ()가 있기때문
예) sp_droptype typ_ch_pub_id
예) sp_rename typ_ch_pub_id, new_typ_ch_pub_id
이미 typ_ch_pub_id라는 타입을 쓰고 있어도 변경 가능.
- Identity : 시스템이 unique한 식별자로 자동 증가하는 칼럼의 유형
(1) numeric타입 칼럼만 가능
(2) drop 되어야 다시 시작(delete 소용없음)
(3) 한 테이블에 꼭 하나만들어가고 갱신이 안됨.
(4) 입력시 지정할 수 없으나 필요에 따라 지정가능
예) set identity_insert 테이블명 on/off
- 칼러이름 변경시
예) sp_rename "aaa.a" , aa : 중간에 ""는 사이에 . 이 있기 때문
- default : 기본 값은 지정. Pk는 디폴트 지정 안됨.
예) 수정시 / 새로 지정시
> alter table publishers
> replace city default "Springfield"
- null 지정 : sybase는 기본적으로 not null. 따라서 null은 꼭 기술해주어야 함.
2) 테이블 권한 부여/박탈
- grant [select/insert/update/delete/reference/all] on 테이블명 to 유저
예) grant select on emp to cel, kimds (to public : 누구에게나)
- revoke [select/insert/update/delete/reference/all] on 테이블명 from 유저
예) revoke select on emp from cel, kimds (from public : 누구에게나)
3) 테이블 수정 (칼럼 추가는 되는데 삭제는 안됨)
- 수정
> alter table publishers add address varchar(40) null, country varchar(40) null
- 삭제 : 임시테이블에 넣어놓고 삭제후 다시 입력하기
> select * into ccc_backup from ccc (ccc에 데이터가 없어도 ccc_backup생성됨)
> drop table ccc
> create table ccc ......
> insert ccc select a,b,c from ccc_backup
4) 데이터 수정 : sybase에서 있는 기능만 설명
- 두 테이블을 조인하여 수정 가능. 단, 한 테이블의 내용만 수정가능
> update titles set price=price * $0.90
> from titles t, publishers p
> where t.pub_id=p.pub_id and p_state="CA"
- 오라클의 decode와 유사한 case 구문 : 단 값중에 하나라도 null아닌 값이 있어야함.
case [필드명]
when 조건1 then 값1
when 조건2 then 값2
else 값3
end
예) update titles set price=
case when type="business" then price*$1.3
else price
end
5) 데이터 삭제 : sybase에서 있는 기능만 설명
- 롤백이 가능한 삭제
> delete titles from titles t, publishers p
> where t_pub_id=p.pub_id and p.state="CA"
- 롤백이 안되는 삭제 ( select into도 롤백안됨 )
> truncate table publishers
6) 데이터 조회
- 조회
> select type, avg(price) from titles
> where type not in ("mod_cook","trad_cook")
> group by type
> having avg(price) > $12.00
> order by type
- view 조회 : 수정시 뷰가 항목들이 한 테이블안에 존재하면 수정도 가능
> create view vw_cali_authors
> as
> select au_id, au_lname, au_fname from authors
> where state="CA"
> with check option => state가 꼭 "CA"이어야만 수정/추가됨.

3. 인덱스

1) 인덱스 생성/ 삭제
- create index 인덱스명 on 테이블명(칼럼명1, 칼럼명2)
- drop index 테이블명.인덱스명 ( 꼭 테이블명을 기술해주어야 함 )
2) 인덱스 구분
- clustered index : 인덱스키값을 기준으로 테이블을 저장순서를 정렬하여 기록하는
방식으로 자주 수정이 일어나는 테이블에는 부적절. 기본적으로 한테이블에 하나만 존재하며
PK에 의해 생성되는 인덱스테이블은 기본적으로 해당 방식으로 이루어짐.
- nonclustered index : 실제 데이터 저장순서와는 상관없이 키값과 주소값으로 이루어진
인덱스테이블을 기준으로 b+tree 검색을 하여 데이터 조회. 여러 개 가능.

4. 임시 테이블

1) Shareable Temporary Table : tempdb에 생성하는 테이블. 서버가 reboot하면 사라짐.
- use tempdb하여 create table aaa 하면 됨. 누구나 접근 가능.
2) Session-specific Temporary Table : 해당 session이 살아있는 동안만.
- create table #aaa ( a int null, b char(2) null )
- #뒤에 나오는 테이블명은 13자까지. 만든 유저만 접근 가능.
3) 시스템 테이블들
- select name,type from sysobjects : 만들어진 모든 시스템 오프젝트명과 타입나옴
- 타입 : D(default) R(rule) P(produre) TR(trigger) S (system) U(user table) V(view)

5. Constraint

1) check : 입력값의 조건을 걸어줌 (예: p_id char(4) null check(p_id like "99[0-9][0-9]") )
(주의할 점)
> create table publishers (
> pub_id char(4) not null,
> state char(2) default "OK" null, =>조건 1
> constraint chk_state check ( state in ("CA","OR","WA") ) =>조건 2
> )
> insert into publishers(pub_id) values("9909") => 에러가 남(조건 1,2가 틀림)
2) primary key, unique
3) foreign key : constraint ref_aaa foreign key(칼럼명) references 테이블명(칼럼명)
4) constraint 추가/삭제 : 기존 데이터에 영향을 안미침(단, PK, UNIQUE는 제외-index때문)
> alter table 테이블명 add constraint 조건이름 조건들기술…
> alter table 테이블명 drop constraint 조건이름
5) 사용자 정의 에러메시지
- 만들기 단계 : 메시지 생성-> constraint 걸기
> sp_addmessage 30001(번호), "메시지 내용"
> sp_bindmsg constraint명, 30001(번호)
- 지우기 단계 : 메시지 걸지정지 -> 메시지 지우기
> sp_unbinding constraint명
> sp_dropmessage 30001(번호)

6. Default

1) 생성하여 바인드하기
- create default 디폴트이름 as "값"
> sp_bindefault 디폴트이름, "테이블명.칼럼명"/"사용자정의타입"
: 이미 지정된 필드인 경우 에러남.
2) 언바인드하고 지우기
- sp_unbindefault "테이블명.칼럼명" /"사용자정의타입"
- drop default 디폴트이름

7. rule

1) 생성하여 걸어주기
- create rule 롤명 as 변수(@state) 조건(check, betweenm like….)
- sp_bindrule 롤명, "테이블명.칼럼명" /"사용자정의타입"
2) 풀고 삭제하기
- sp_unbindrule "테이블명.칼럼명" /"사용자정의타입"
- drop rule 롤명
------------------------------------------------------------------------------
Object 생성 삭제 확인 바인트/언바인드
------------------------------------------------------------------------------
사용자정의타입 sp_addtype sp_droptype sp_help /
테이블 create table drop table sp_help /
select into
뷰 create view drop view sp_help /
인덱스 create index drop index sp_help
sp_helpindex
디폴트 create default drop default sp_helptext Sp_bindefault
Sp_unbindefault
룰 create rule drop rule sp_helptext Sp_bindrule
Sp_unbindrule
메시지 sp_addmessage sp_dropmessage Sysusermessage Sp_bindmsg
Sp_unbindmsg
------------------------------------------------------------------------------

8. 함수들

1) 문자열함수
------------------------------------------------------------------------------
함 수 이 름 예 제 설 명
------------------------------------------------------------------------------
upper(칼럼명) Upper("aa'")=AA 대문자로 바꾸기
Lower(칼럼명) Lower("AA")=aa 소문자로 바꾸기
Convert(변경될타입,칼럼명) Convert(char(4),price) 타입을 변경
Substring(문자,시작,길이) Substring("abc",2,1)=b 문자열 잘라내기
Right(문자,길이) Right("abc",2)=ab 왼쪽에서 잘라내기
Charindex(찾는문자,문자) Charindex("b","abc")=2 특정문자위치 찾기
ascii(글자) ascii("T")=84 아스키값구하기
Char(숫자) Char(84)=T 아스키값으로 문자구하기
Ltrim(문자) Ltrim(" abc")=abc 왼쪽의 공백제거하기
Str(숫자,길이,소수점이하자리) Str(45.26, 1)="45.3" 실수를 문자열로변환하기
Soundex(문자) Soundex("green")
------------------------------------------------------------------------------

2) 날짜 함수
--------------------------------------------------------------------------------------
함 수 이 름 예 제 설 명
--------------------------------------------------------------------------------------
Convert(변경될타입,날짜,타입) Convert(char(10),date,111) 날짜를 다른 타입으로 변경
Getdate() 오늘날짜구하기
Datename(날짜타입,날짜) Datename(mm,getdate()) 해당 날짜의 이름값
Datepart(날짜타입,날짜) Datepart(mm,getdate()) 해당 날짜의 숫자값
Dateadd(날짜타입,간격,날짜) Dateadd(dd,3,getdate()) 날짜에 간격만큼 더하기
Datediff(날짜타입,날짜1,날짜2) Datediff(dd,date,getdate()) 날짜1,2의 간격
--------------------------------------------------------------------------------------
Cf) convert의 타입
------------------------------------------------------------------------------
타 입 결 과 타 입 결 과 타 입 결 과
------------------------------------------------------------------------------
1 mm/dd/yy 5 dd-mm-yy 9 mon dd yyyy hh:mm:ss
2 yy.mm.dd 6 dd mon yy 10 mm-dd-yy
3 dd/mm/yy 7 mon dd yy 11 yy/mm/dd
4 dd.mm.yy 8 hh:mm:ss 111 yyyy/mm/dd
------------------------------------------------------------------------------
Cf) 날짜 타입
------------------------------------------------------------------------------
타입 설 명 타 입 설 명 타 입 설 명 타 입 설 명
------------------------------------------------------------------------------
yy 년도 wk 주 dw 년도내주 ss 초
qq 분기 dd 일 hh 시간 ms 1/1000초
mm 달 dy 년도내날짜 mi 분
------------------------------------------------------------------------------

3) 숫자 함수
------------------------------------------------------------------------------
함 수 이 름 예 제 설 명
------------------------------------------------------------------------------
Abs(숫자) Abs(-99)=99 절대값
Ceiling(숫자) Ceiling(123.5)=124 정수로 반올림
floor(숫자) Floor(123.5)=123 정수로 자름
round(숫자,소수점자리수) Round(2.460,2)=2.460 소수점 자리수 표시
exp(실수) Exp(0)=1
rand(정수) Rand(39)=.49234563.. 랜덤함수
log(실수) Log(1)=0 로그
pi() Pi()=3.141592… 파이
Power(숫자,몇승인지) Power(10,3)=1000 제곱승구하기
Sqrt(숫자) Sqrt(100)=10 제곱근구하기
Sin,cos,tan Cos(0)=1 사인,코사인,탄젠트구하기
------------------------------------------------------------------------------

4) 기타 함수
------------------------------------------------------------------------------
함 수 이 름 예 제 설 명
------------------------------------------------------------------------------
Count(칼럼/*) Count(*) 레코드의 개수
Max Max(price) 최대값
Min Min(price) 최소값
Sum Sum(price) 합계
Avg Avg(price) 평균
Isnull(칼럼명,변환할값) Isnull(price,$0.00) 널일경우 값지정하기
Suser_name() 지금 현재 접속한 유저명
------------------------------------------------------------------------------

9. 배치처리

1) 변수선언 : 변수명앞에 @표시
cf) 연산상의 주의점
--------------------------------------------------------------------------------------
Declare @number int, @copy int, @sum int | Declare @number int, @copy int, @sum int
Select @number=10 | Select @number=10, @copy=@number,
Select @copy=@number, | @sum=@number+100
@sum=@number+100 |
| num copy sum
num copy sum | ------- ------ -----------
------- ------ ----------- | 10 10 NULL
10 10 110 |
--------------------------------------------------------------------------------------
2) global 변수
- @@rowcount : 현재 질의의 영향을 받은 레코드 수
- @@error : 가장 최근에 일어난 에러번호
- @@identity : 가장 최근에 일어나 identity의 최대치
- @@version : 현재 DB의 버전
3) 문법
--------------------------------------------------------------------------------------
If... else | If exists(select * from auth where id='kimds')
| Select "데이터가 없어요"
| Else
| begin
| If @@rowcount = 1
| Select "데이터가 하나 있어요"
| Else
| Select "데이터가 여러 개네요.."
| end
--------------------------------------------------------------------------------------
While... | While @price<30
| Begin
| Select @price = @price + $1.00
| If ( select count(*) from titles where price>@price)
| Countinue
| Else
| Break
| end
--------------------------------------------------------------------------------------
Print | Print "table %1 is not owned by user %2",@t_name,@t_user
--------------------------------------------------------------------------------------
raiserror | 변수에 에러지정
| (1) raiserror 70500 "Table %1 not found", @t_name
| (2) sp_addmessage 70500, "Table %1 not found"에러 출력
| (1) raiserror 70500, @t_name
--------------------------------------------------------------------------------------

10. 트랜잭션 처리

1) 기본구성
--------------------------------------------------------------------------------------
bagin tran | 트랜젝션 시작 => 처리1 진행 -> 처리2 진행 =>
처리 1 | 처리3 진행 => 처리3 롤백 => 처리4 진행
save tran 지점1 | (따라서) 처리 1,2,4만 진행되었슴.
처리2 | Cf) select @@trancount
save tran 지점2 | => begin tran이 몇번째 걸려있는지 단계조회
처리3 |
rollback tran 지점2 |
처리4 |
commit tran |
--------------------------------------------------------------------------------------
2) 처리구분
- unchained mode : 사이베이스 기본모드로 하나의 명령이 바로 commit되는 방식
(설정) set chained off : 묶어서 처리하려면 begin tran을 꼭 적어주어야 함.
- chained mode : 여러가지의 처리의 한 단위로 묶어 commit이나 rollback하는 방식
(설정) set chained on : begin tran을 안써도 됨.

11. Locking

1) 구분
- Shared Locks : select하는 동안 걸리는 락으로 읽기만 가능하고 수정은 불가
- Exclusive Locks : 수정하는 동안 걸리는 락으로 읽기/쓰기 다 불가
- Update Locks : 수정을 위해 읽는 동안 걸리는 락으로 읽기만 가능.
단, 수정할 데이터가 없는 경우 바로 락이 풀림.
2) deadlock : 시스템이 그냥 임의적으로 하나의 락을 일방적으로 풀어버림. 따라서
트렌젝션의 손실이 일어날 가능성이 있음
(확인) select @transtate => "3"은 abort가 된 경우, "0"는 진행중인 경우.
3) Lock를 거는 방식
- allpages locking(APL) : 관련 인덱스테이블의 페이지까지 다 lock을 걸기.
해당 방식이 default이므로 안쓰려면 생성시 지정.
Create table (...) lock [allpages/datapages/datarows]
- Datapages locking(DPL) : 인덱스테이블은 안걸고 데이터테이블의 페이지만 걸기.
- Datarows locking(DRL) : 인덱스테이블 안걸고 데이터의 해당 레코드만 락걸기.
- DB의 Default Lock변경 : DBA만 권한 있음.
sp_configure "lock scheme", 0, [allpages/datapages/datarows]
4) Isolation Level : 데이터의 일관성 유지 레벨
- dirty read : 처리1 변경단계의 가짜 데이터를 처리2에서 읽는 경우
- nonrepeatable read : 처리1이 진행중에 처리2가 수행되어 처리1의 값이 중간에 변경
- phanton read : 처리1이 진행중에 처리2에 의해 처리1에서 다른 데이터를 읽는 경우
--------------------------------------------------------------------------------------
dirty read nonrepeatable read phanton read
--------------------------------------------------------------------------------------
Level 0 허용 허용 허용
Level 1 불가 허용 허용
Level 2 불가 불가 허용
Level 3 불가 불가 불가
--------------------------------------------------------------------------------------
- 세팅 : set transaction isolation level [0/1/2/3]
- 확인 : select @@isolation
5) select title from titles holdlock where pub_id="0877" : udpate할때까지 lock걸기.
- 오라클의 for update와 유사

12. Cursors

1) 사용방법
- 선언(declare)
- 열기(open)
- 가져오기(fetch)
- 닫기(close)
- 재선언(deallocate)
2) 예제
--------------------------------------------------------------------------------------
Declare biz_book cursor for select title,title_id from titles where type="business"
For read only
Go (=>꼭 단독배치를)
Declare @title char(80), @title_id char(6)
Open biz_book
Fetch biz_book into @title, @title_id (=> fetch는 항상 forward만 가능)
While @@sqlstatus = 0 (0=>하나성공, 1=>에러, 2=>하나이상남음)
Begin
....
End
Close biz_book
Deallocate cursor biz_book
--------------------------------------------------------------------------------------
3) 하나이상을 fetch해 올 경우 : set cursor rows 레코드갯수 for biz_book
4) set close on endtran on/off : commot/rollback후 커서가 close되면 on, 아니면 off

13. stored procedure

1) 수행단계
- (1) create하면 내용은 syscounts에, query trees는 sysprocedures에 넣어둠
- (2) 수행요청을하면 cach확인후 있으면 해당 query tree대로, 없으면 새로 넣고 처리.
2) 문법 : 프로시져안에서는 뷰,디폴트,룰,다른 프로시져, 트리거 생성 안됨.
create proc 이름 as 내용들 return
--------------------------------------------------------------------------------------
create proc proc_new_price ( @title_id char(6)="000000", @new_price money output )
as
declare @state int

exec @state=proc_datacheck (=> 다른 프로시져 이용하여 결과받기)
select @new_price=price from titles where title_id=@title_id
select @new_price=@new_price*$1.15
return
--------------------------------------------------------------------------------------
3) 에러 : 0=> 성공, 0>error>-99 (시스템에러), 나머지: 사용자정의에러
4) 주의사항 : 프로시져A안에서 다른 프로시져B를 부르는 경우 B안에서 문제가 있어 롤백이 있는 경우
A작업도 같이 롤백됨. 따라서 다른 프로시져부르는 경우 save tran해주기.
5) Select @@nestlevel : 프로시져 몇 단계까지 들어갔는지 표시
6) With recompile : 프로시져는 procedure cach를 사용하기 때문에 관련 테이블이 구조가 변경되면
다시 컴파일을 해주어야 하는데 이것을 해주는 역할
(예)
--------------------------------------------------------------------------------------
생 성 | 수 정
--------------------------------------------------------------------------------------
Create table test ( a int, b int ) | [ 해결방안 ]
create proc pr_test ( @num int ) |
as | (1)생성시 항상 재컴파일하도록
select * from test where a=@num | create proc test(...) with recompile...return
return |
pr_test(1) | (2)수행시 재컴파일하도록(더 낫겟죠)
=>full scan방식으로 조회 | exec pr_test(1) with recompile
========================================== |
Create index test_idx on test(a)Pr_test(1) | (3)해당 테이블을 기준으로 다바꿔
=>index search방식으로 조회가 더 좋은디 | sp_recompile test
--------------------------------------------------------------------------------------

14. Triggers

1) 생성
create trigger 트리거명 on 관련테이블 for 관련DML as 작업내용
(예)
--------------------------------------------------------------------------------------
create trigger trg_I_sales
on salesfor
insert
as
declare @num int

select count(*) from inserted
select @@rowcount=@num
if @num = 0
begin
raiserror 40070, "no data inserted."
Rollback tran
end
--------------------------------------------------------------------------------------
2) 처리방식 : 트리거는 특정 테이블에 insert나 delete나 update가 일어날 때 동시에 처리해주거나
검사해주어야 하는 것을 걸어주는 것으로 처리 적용대상이 되는 레코드들은 inserted,
deleted라는 임시테이블에 저장되어진다.(update는 사실 inserted에도 deleted에도
존재하는 것임) . 트리거는 중간에 문제가 생겨서 이전 프로시져의 트렉젝션까지
롤백하지는 못함.
3) Update 트리거의 경우 if update(테이블PK) 해주어 키가 업데이트가 되었는지 확인가능.
4) Recursive 트리거의 경우 : 무한으로 걸린 경우 16번까지 하다 rollback

15. 시스템 조회명령들

1) sp_help [오브젝트]
- 오브젝트명을 입력하지 않으면 해당 DB의 모든 오브젝트에 대한 정보를,
오브젝트명을 기입한 경우에는 해당 오브젝트의 자세한 정보를 보여줌.
2) sp_syntax 원하는문법
- 해당 문법의 사용 방법을 기술해 줌
3) sp_who [원하는 계정]
- 계정을 안쓰면 전체 계정에 대한 정보를 기술,
계정을 기술하면 해당 계정에 대한 정보를 보여줌.
4) Sp_helpdb [디비명]
- 디비명을 기입한지 않으면 모든 디비정보를, 기입하면 해당 디비의 정보를 보여줌.
5) Sp_rename 오브젝트명, 새로 바꿀 오브젝트명
- 오브젝트명은 변경. 테이블명/칼럼명/타입명/뷰명/인덱스명/constraint
6) sp_helpconstraint 테이블명
- 해당 테이블에 걸려있는 constraint정보를 보여줌
7) sp_depends 테이블명/뷰명/프로시져명
- 테이블명을 적으면 해당 테이블이 reference걸려있는 모든 오브젝트들을,
뷰명 적으면 해당 뷰가 참조하는 테이블명을 보여줌. 프로시져는 관련테이블들 리스트업.
8) sp_helptext 뷰명/디폴트명/롤명/프로시져명
- 작성된 뷰의 질의문을 보여줌
9) sp_helpconstraint 테이블명
- 테이블의 constraint 정보를 보여줌.
10) Sp_lock
- 현재 디비에 걸려있는 락정보를 보여줌
11) sp_cursorinfo 커서명
- 커서에 대한 정보를 보여줌

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

System Procedure


sp_activeroles :
사용자의 로그인에 부여된 현재 롤(role)을 모두 표시합니다.
sp_addalias:
Adaptive Server 사용자가 데이터베이스에서 다른 사용자 이름으로 인식되는 것을 허용합니다.
sp_addauditrecord :
사용자가 사용자 정의 감사 레코드(주석)를 감사 기록에 입력하는 것을 허용합니다.
sp_addaudittable:
감사 기능을 설치한 후 다른 시스템 감사 테이블을 추가합니다.
sp_addengine :
엔진을 기존 엔진 그룹에 추가하거나, 엔진 그룹이 없으면 엔진 그룹을 만들어 엔진을 추가합니다.
sp_addexeclass :
클라이언트 응용 프로그램, 로그인, 내장 프로시저에 바인드할 수 있는 사용자 정의 실행 클래스를 만들거나 업데이트합니다.
sp_addextendedproc :
확장 내장 프로시저(ESP)를 master 데이터베이스에 만듭니다.
sp_addexternlogin :
CIS(Component Integration Services)를 통해 원격 서버와 통신할 때 사용할 대체 로그인 계정과 암호를 만듭니다.
sp_addgroup :
그룹을 데이터베이스에 추가합니다. 그룹은 권한을 부여하거나 취소할 때 집합적 이름으로 사용됩니다.
sp_addlanguage :
대체 언어의 월과 요일의 이름과 날짜 형식을 정의합니다.
sp_addlogin :
새 사용자 계정을 Adaptive Server에 추가합니다.
sp_addmessage :
내장 프로시저 print와 raiserror 호출과 sp_bindmsg에서 사용할 수 있도록 사용자 정의 메시지를 sysusermessages에 추가합니다.
sp_addobjectdef :
로컬 테이블과 외부 저장 위치 사이의 매핑을 지정합니다.
sp_add_qpgroup :
Abstract Plan(AP) 그룹을 추가합니다.
sp_addremotelogin : master.dbo.sysremotelogins에 엔트리를 추가하여 원격 서버 사용자에게 권한을 부여합니다.
sp_add_resource_limit :
질의나 질의 배치, 트랜잭션을 실행할 때 로그인이나 응용 프로그램에서 사용할 수 있는 서버 자원의 양에 대한 제한을 만듭니다.
sp_addsegment :
현재 데이터베이스의 데이터베이스 디바이스에 세그먼트를 정의합니다.
sp_addserver :
원격 서버를 정의하거나 로컬 서버의 이름을 정의합니다.
sp_addthreshold :
데이터베이스 세그먼트에 있는 공간을 모니터하기 위한 임계값을 만듭니다. 세그먼트의 여유 공간이 지정한 수준 아래로 내려가면, Adaptive Server는 연관된 내장 프로시저를 실행합니다.
sp_add_time_range :
이름이 지정된 시간 범위를 Adaptive Server에 추가합니다.
sp_addtype :
사용자 정의한 데이터 유형을 만듭니다.
sp_addumpdevice :
덤프 디바이스를 Adaptive Server에 추가합니다.
sp_adduser :
새 사용자를 현재 데이터베이스에 추가합니다.
sp_altermessage :
특정 시스템 정의 메시지나 사용자 정의 메시지를 Adaptive Server 에러 로그에 기록할 수 있게 하거나 기록할 수 없게 합니다.
sp_audit :
시스템 보안 담당자가 감사 선택 항목을 구성할 수 있게 해줍니다.
sp_autoconnect :
이름이 지정된 사용자가 로그인할 때 자동으로 passthrough 모드로 들어갈 수 있도록, 특정 사용자에게 원격 서버에 대한 passthrough 연결을 정의해 줍니다.
sp_bindcache :
데이터베이스나 테이블, 인덱스, text 객체, image 객체를 데이터 캐시에 바인드합니다.
sp_bindefault :
사용자 정의 디폴트를 열이나 사용자 정의 데이터 유형에 바인드 합니다.
sp_bindexeclass :
실행 클래스를 클라이언트 응용 프로그램이나 로그인,, 내장 프로시저와 연관시킵니다.
sp_bindmsg :
사용자 메시지를 참조 무결성 제약 조건이나 검사 제약 조건에 바인드합니다.
sp_bindrule :
규칙을 열이나 사용자 정의 데이터 유형에 바인드 합니다.
locksp_cacheconfig :
데이터 캐시에 대한 정보를 만들거나 구성, 다시 구성, 삭제, 제공을 합니다.
sp_cachestrategy :
테이블이나 인덱스 text 객체, image 객체에 대한 MRU 캐시 대체 전략과 프리페치(대량 입/출력)를 가능하게 하거나 가능하지 않게 합니다.
sp_changedbowner :
데이터베이스의 소유자를 변경합니다.
sp_changegroup :
사용자 그룹을 변경합니다.
sp_checknames :
7-비트 ASCII 집합에 없는 문자가 이름에 들어 있는지 현재 데이터베이스를 검사합니다.
sp_checkreswords :
Transact-SQL 예약어인 식별자를 검색하여 표시합니다. 서버 이름과 디바이스 이름, 데이터베이스 이름, 세그먼트 이름, 사용자 정의 데이터 유형, 객체 이름, 열 이름, 사용자 이름, 로그인 이름, 원격 로그인 이름을 검사합니다.
sp_checksource :
컴파일된 객체에 소스 텍스트가 있는지 검사합니다.
sp_chgattribute :
테이블이나 인덱스의 추후 공간 할당을 위해 max_rows_per_page 값을 변경합니다.
sp_clearpsexe :
sp_setpsexe에서 설정한 클라이언트 응용 프로그램, 로그인, 내장 프로시저의 실행 속성을 지웁니다.
sp_clearstats :

모든 서버 사용자나 지정한 사용자에 대한 새 계정 기간을 시장합니다. sp_reportstats를 실행하여 이전 기간 동안의 통계를 인쇄합니다.
sp_cmp_all_qplans :

모든 Abstract Plan(AP)을 두 개의 Abstract Plan(AP) 그룹에서 비교합니다.
sp_cmp_qplans : 두 개의 Abstract Plan(AP)을 비교합니다.
sp_commonkey :

두 개의 테이블이나 뷰 사이의 자주 조인되는 common 키 열을 정의합니다.
sp_companion :

Adaptive Server를 고가용성(HA) 시스템의 보조 companion으로 구성하고 companion 서버를 한 failover 모드에서 다른 모드로 이동하는 등의 클러스터 작업을 수행합니다.
sp_configure : 구성 매개변수를 표시하거나 변경합니다.
sp_copy_all_qplans :

한 Abstract Plan(AP) 그룹의 모든 계획을 다른 그룹으로 복사합니다.
sp_copy_qplan :

한 Abstract Plan(AP) Abstract Plan(AP) 그룹으로 복사합니다.
sp_countmetadata :

Adaptive Server의 인덱스, 객체, 데이터베이스 개수를 표시합니다.
sp_cursorinfo :

사용자 세션에서 활성 중인 특정 커서나 모든 커서에 대한 정보를 보고합니다.
locksp_dboption : 데이터베이스 옵션을 표시하거나 변경합니다.
sp_dbremap :

alter database에서 만든 변경 내용을 Adaptive Server에서 인식하게 만듭니다. Adaptive Server 메시지에서 지시한 경우에만 이 프로시저를 실행합니다.
sp_depends :

특정 테이블이나 뷰에 종속된 뷰, 트리거, 프로시저와 특정 뷰, 트리거, 프로시저가 종속되어 있는 테이블이나 뷰와 가타은 데이터베이스 객체 종속 관계에 대한 정보를 표시합니다.
sp_deviceattr :

기존 데이터베이스 디바이스 파일의 dsync 설정을 변경합니다.
sp_diskdefault :

사용자가 데이터베이스 디바이스를 지정하지 않은 경우 데이터베이스 디바이스를 데이터베이스 저장소로 사용할 수 있는지 여부를 지정하거나, create database나 alter database 명령의 default를 지정합니다.
sp_displayaudit : 감사 선택 항목의 상태를 표시합니다.
sp_displaylevel :

sp_configure 출력에 나타나야 할 Adaptive Server 구성 매개변수를 설정하거나 표시합니다.
sp_displaylogin : 로그인 계정에 대한 정보를 표시합니다.
sp_displayroles :

다른 롤(role)에 부여된 모든 롤(role)을 표시하거나 롤(role)의 전체 계층 트리를 표 형식으로 표시합니다.
sp_dropalias :

sp_addalias를 사용하여 설정했던 가명(alias) 사용자 이름을 삭제 합니다.
sp_drop_all_qplans :

모든 Abstract Plan(AP)을 Abstract Plan(AP) 그룹에서 삭제합니다.
sp_dropdevice :

Adaptive Server 데이터베이스 디바이스나 덤프 디바이스를 삭제 합니다.
sp_dropengine :

지정한 엔진 그룹에서 엔진을 삭제하거나 해당 엔진이 그룹의 마지막 엔진인 경우 엔진 그룹을 삭제합니다.
sp_dropexeclass : 사용자 정의 실행 클래스를 삭제합니다.
sp_dropextendedproc : Master database에서 ESP를 삭제합니다.
sp_dropglockpromote :

데이터베이스나 테이블에서 lock 실행 값을 삭제합니다.
sp_dropgroup : 데이터베이스에서 그룹을 삭제합니다.
sp_dropkey :

syskeys 테이블에서 sp_primarykey나 sp_foreignkey, sp_commonkey로 정의한 키를 삭제합니다.
sp_droplanguage :

서버에서 대체 언어를 삭제하고 해당 행을 master.dbo.syslanguages에서 삭제합니다.
sp_droplogin :

사용자 엔트리를 master.dbo.syslogins에서 삭제하여 Adaptive Server 사용자 로그인을 삭제합니다.
sp_dropmessage : 사용자 정의 메시지를 sysusermessages에서 삭제합니다.
sp_drop_qpgroup : Abstract Plan(AP) 그룹을 삭제합니다.
sp_drop_qplan : Abstract Plan(AP)을 삭제합니다.
sp_dropremotelogin : 원격 사용자 로그인을 삭제합니다.
sp_drop_resource_limit :

하나 이상의 자원 제한값을 Adaptive Server에서 삭제합니다.
sp_dropsegment :

데이터베이스에서 세그먼트를 삭제하거나 세그먼트를 특정 데이터베이스 디바이스에서 매핑 해제합니다.
sp_dropserver : 알려진 서버 목록에서 서버를 삭제합니다.
sp_dropthreshold : 세그먼트에서 여유 공간 임계값을 삭제합니다.
sp_drop_time_range :

Adaptive Server에서 사용자 정의 시간 범위를 삭제합니다.
sp_droptype : 사용자 정의 테이터 유형을 삭제합니다.
sp_dropuser : 현재 데이터베이스에서 사용자를 삭제합니다.
sp_dumpoptimize :

데이터베이스 덤프 작업 중에 Backup Server에서 덤프하는 데이터 크기를 지정합니다.
sp_estspace :

테이블과 테이블 인덱스에 필요한 공간의 크기와 인덱스를 만드는데 필요한 시간을 추정합니다.
sp_export_qpgroup :

지정한 사용자와 Abstract Plan(AP) 그룹에 대한 모든 계획을 사용자 테이블로 내보냅니다.
sp_extendsegment :

세그먼트의 범위를 다른 데이터베이스 디바이스로 확장합니다.
sp_familylock :

구문을 병렬로 실행하는 패밀리(조정 프로세스와 작업자 프로세스)에서 보유하는 모든 lock에 대한 정보를 보고합니다.
sp_find_qplan :

질의 텍스트나 계획 텍스트에서 파생된 패턴인, Abstract Plan(AP)을 찾습니다.
sp_flushstats :

메모리내에서 systabstats 시스템 테이블로 통계를 전달합니다.
sp_forceonline_db :

복구로 인해 오프라인으로 전환되었던 데이터베이스의 모든 페이지에 대한 액세스를 제공합니다.
sp_forceonline_page :

복구로 인해 오프라인으로 전환되었던 페이지에 대한 액세스를 제공합니다.
sp_foreignkey : 현재 데이터베이스의 테이블이나 뷰에 외부키를 정의합니다.
sp_freedll :

ESP 실행을 지원하기 위해 XP Server 메모리에 로드되었던 동적 연결 라이브러리(DLL)를 언로드합니다.
sp_getmessage :

print와 raiserror 문의 sysmessages와 sysusermessages에서 저장 메시지 문자열을 검색합니다.
sp_grantlogin :

Windows NT 전용으로 통합 보안 모드나 혼합 모드(Named
Pipes를 사용하여)가 활성화되어 있으면 Adaptive Server 롤(role)이나 default 권한을 Windows NT 사용자 및 그룹에 할당합니다.
sp_ha_admin :

고가용성(HA) 시스템에서 Sybase failover로 구성되어 있는 Adaptive Server에 관리 작업을 수행합니다. sp_ha_admin은 installhavss 스크립트(Windows NT에서는 insthasv)와 함께 설치됩니다.
sp_help :

데이터베이스 객체(sysobjects에 나열되어 있는 모든 객체)에 대한 정보와 Adaptive Server 제공 데이터 유형이나 사용자 정의 데이터 유형에 대한 정보를 보고합니다.
sp_helpartition :

partition 테이블의 각 partition에 대한 첫 페이지와 컨트롤 페이지를 나열합니다.
sp_helpcache :

데이터 캐시에 바운드되어 있는 객체에 대한 정보나 지정한 캐시 크기에 필요한 오버헤드 크기에 대한 정보를 표시합니다.
sp_helpdb :

특정 데이터베이스나 모든 데이터베이스에 대한 정보를 보고합니다.
sp_helpdevice :

특정 디바이스에 대한 정보나 모든 Adaptive Server 데이터베이스 디바이스와 덤프 디바이스에 대한 정보를 보고합니다.
sp_helpextendedproc :

현재 데이터베이스에 등록된 ESP를 관련 DLL 파일과 함께 표시합니다.
sp_helpexternlogin :

CIS(Component Integration Services) 전용으로 외부 로그인 이름에 대한 정보를 보고합니다.
sp_helpgroup :

현재 데이터베이스의 모든 그룹에 대한 정보나 특정 그룹에 대한 정보를 보고합니다.
sp_helpindex : 테이블에 만든 인덱스에 대한 정보를 보고합니다.
sp_helpjava :

데이터베이스에 설치되어 있는 Java 클래스와 관련 JAR에 대한 정보를 표시합니다.
sp_helpjoins :

조인 대상이 될 가능성이 있는 두 개의 테이블이나 뷰의 열을 나열 합니다.
sp_helpkey :

특정 테이블이나 뷰의 Primary 키, 외부키, common 키에 대한 정보나 현재 데이터베이스의 모든 키에 대한 정보를 보고합니다.
sp_helplanguage : 특정 대체 언어나 모든 언어에 대한 정보를 보고합니다.
sp_helplog :

트랜잭션 로그의 첫 페이지가 들어 있는 디바이스의 이름을 보고합니다.
sp_helpobjectdef :

CIS(Component Integration Services) 전용으로 원격 객체 정의에 대한 정보를 보고합니다. 소유자, 객체, 유형, 정의를 표시합니다.
sp_help_qpgroup : Abstract Plan(AP) 그룹에 대한 정보를 보고합니다.
sp_help_qplan : Abstract Plan(AP)에 대한 정보를 보고합니다.
sp_helpremotelogin :

특정 원격 서버의 로그인이나 모든 원격 서버의 로그인에 대한 정보를 보고합니다.
sp_help_resource_limit :

모든 자원 제한값이나 주어진 로그인이나 응용 프로그램에 대한 제한값, 주어진 시간이나 요일에 유효한 제한값, 주어진 범위나 작업의 제한값에 대한 정보를 보고합니다.
sp_helprotect :

데이터베이스 객체, 사용자, 그룹, 롤(role)에 대한 권한을 보고합니다.
sp_helpsegment :

현재 데이터베이스의 모든 세그먼트나 특정 세그먼트에 대한 정보를 보고합니다.
sp_helpserver : 특정 원격 서버나 모든 원격 서버에 대한 정보를 보고합니다.
sp_helpsort :

Adaptive Server의 기본 정렬 순서와 문자 집합을 표시합니다.
sp_helptext :

시스템 프로시저나 트리거, 뷰, 디폴트, 규칙 무결성 검사 제약 조건의 텍스트를 인쇄합니다.
sp_helpthreshold :

현재 데이터베이스의 모든 임계값이나 특정 세그먼트의 모든 임계값과 관련된 세그먼트, 여유 공간 값, 상태, 내장 프로시저를 보고합니다.
sp_helpuser :

현재 데이터베이스의 모든 사용자나 특정 사용자에 대한 정보를 보고합니다.
sp_import_qpgroup :

Abstract Plan(AP)을 사용자 테이블에서 Abstract Plan(AP) 그룹으로 가져옵니다.
sp_indsuspect :

정렬 순서 변경을 한 후 복구 중에 추정으로 표시된 인덱스가 있는지 사용자 테이블에서 검사합니다.
sp_listsuspect_db :

복구 시 손상으로 인해 오프라인 페이지가 들어 있는 데이터베이스를 모두 나열합니다.
sp_listsuspect_page :

복구 시 손상으로 인해 현재 오프라인 페이자가 들어 있는 페이지를 모두 나열합니다.
sp_lock : 현재 lock을 보유하고 있는 프로세스에 대한 정보를 보고합니다.
sp_locklogin :

사용자가 로그인할 수 없게 Adaptive Server 계정을 잠그거나 모든 잠궈진 계정의 목록을 표시합니다.
sp_logdevice :

로그 및 데이터를 같은 디바이스에 가지고 있는 데이터베이스의 트랜잭션 로그를 별개의 데이터베이스 디바이스로 이동합니다.
sp_loginconfig :

Windows NT 전용으로 하나 또는 모든 통합 보안 매개변수의 값을 표시합니다.
sp_logininfo :

Windows NT 전용으로 sp_grantlogin을 사용하여 Windows NT 사용자와 그룹에 부여된 모든 롤(role)을 표시합니다.
sp_logiosize :

Adaptive Server에서 현재 데이터베이스의 트랜잭션 로그에 대한 입/출력을 할 때 사용하는 로그 입/출력 크기를 다른 메모리 풀로 변경합니다.
sp_modifylogin :

Adaptive Server 로그인 계정의 Primary database나 기본 언어, 기본 롤 (role) 사용이나 전체 이름을 수정합니다.
sp_modify_resource_limit :

새 제한값을 지정하거나 제한값이 초과했을 때 취할 조치 또는 둘을 모두 지정하여 자원 제한값을 변경합니다.
sp_modifythreshold :

임계값을 다른 임계값 프로시저와 여유 공간 수준, 세그먼트 이름과 연결하여 수정합니다. sp_modifythreshold를 사용하여 마지막 임계값의 세그먼트 이름이나 여유 공간 크기를 변경 할 수 없습니다.
sp_modify_time_range :

이름이 지정된 시간 범위와 관련된 시작일, 시작 시간, 종료일, 종료 시간 등을 변경합니다.
sp_monitor : Adaptive Server에 대한 통계를 표시합니다.
sp_password :

Adaptive Server 로그인 계정의 암호를 추가하거나 변경합니다.
sp_placeobject :

테이블이나 인덱스의 추후 공간 할당을 특정 세그먼트에 둡니다.
sp_plan_dbccdb :

새 dbccdb와 dbccalt 데이터베이스의 적합한 크기를 권장하고 dbccdb와 dbccalt의 적절한 디바이스를 나열하며 캐시 크기와 대상 데이터베이스의 작업자 프로세스의 적당한 개수를 제안합니다.
sp_poolconfig :

데이터 캐시 내에서 메모리 풀에 대한 정보를 제공하고, 크기를 다시 조정하고, 삭제하며 만듭니다.
sp_primarykey : 테이블이나 뷰에 Primary 키를 정의합니다.
sp_processmail :

Windows NT 전용으로 Adaptive Server 받은 편지함의 메시지를 읽고 처리하고 전송하며 삭제합니다.
sp_procqmode : 내장 프로시저, 뷰, 트리거의 질의 처리 모드를 표시합니다.
sp_procxmode :

내장 프로시저와 관련된 트랜잭션 모드를 표시하거나 변경합니다.
sp_recompile :

이름이 지정된 테이블을 사용하는 각 내장 프로시저와 트리거가 다음에 실행될 때 다시 컴파일되게 합니다.
sp_remap :

4.8 이상과 10.0 이전의 내장 프로시저나 트리거, 규칙, 디폴트, 뷰가 10.0 이상 릴리스와 호환될 수 있도록 다시 매핑합니다. 릴리스 11.0의 업그레이드 절차에서 다시 매핑하는 데 실패한 11.0 이전 릴리스 객체에 대해서는 sp_remap를 사용하십시오.
sp_remoteoption : 원격 로그인 옵션을 표시하거나 변경합니다.
sp_rename :

현재 데이터베이스에 있는 사용자의 구성 객체나 사용자 정의 데이터 유형의 이름을 변경합니다.
sp_renamedb :

데이터베이스 이름을 변경합니다. 시스템 테이터베이스 이름이나 외부 참조 무결성 제약 조건이 있는 테이터베이스의 이름은 변경 할 수 없습니다.
sp_rename_qpgroup : Abstract Plan(AP) 그룹의 이름을 바꿉니다.
sp_reportstats : 시스템 사용량에 대한 통계를 보고합니다.
sp_revokelogin :

Windows NT 전용으로 통합 보안 모드나 혼합모드(Named Pipes를 사용하여)가 활성화되어 있으면 Windows NT 사용자와 그룹에서 Adaptive Server 롤(role)과 기본 권한을 취소합니다.
sp_role :

Adaptive Server 로그인 계정에 시스템 롤(role)을 부여하거나 취소합니다.
sp_serveroption : 원격 서버 옵션을 표시가거나 변경합니다.
sp_setlangalias : 대체 언어의 가명(alias)을 지정하거나 변경합니다.
sp_setpglockpromote :

데이터베이스나 테이블, Adaptive Server의 lock 실행 임계값을 설정하거나 변경합니다.
sp_setpsexe :

활성 클라이언트 응용 프로그램과 로그인, 내장 프로시저의 사용자 정의 실행 속성을 “바로” 설정합니다.
sp_set_qplan :

연관된 질의를 변경하지 않고 기존 계획의 Abstract Plan(AP) 텍스트를 변경합니다.
sp_setsuspect_granularity : 복구 장애 결리 모드를 표시하고 설정합니다.
sp_setsuspect_threshold :

복수 시, 전체 데이터베이스를 오프라인으로 전환하기 전에 Adaptive Server가 지정한 데이터베이스에서 허용할 최대 추정 페이지 개수를 설정합니다.
sp_showcontrolinfo :

엔진 그룹 할당, 바운드 클라이언트 응용 프로그램, 로그인, 내장 프로시저에 대한 정보를 표시합니다.
sp_showexeclass :

지정한 실행 클래스와 연관된 엔진 그룹의 엔진과 실행 크래스 속성을 표시합니다.
sp_showplan :

현재 SQL 문(또는 같은 배치의 이전 구문)의 사용자 연결에 대한 질의 계획을 표시합니다. 질의 계획은 showplan 형식으로 표시됩니다.
sp_showpsexe :

Adaptive Server에서 실행되는 모든 프로세스에 대한 실행 클래스, 현재 우선 순위, 연결을 표시합니다.
sp_spaceused :

현재 데이터베이스의 한 테이블이나 모든 테이블에서 사용하는 예상 행 수, 예상 데이터 페이지 수 및 예상 공간 값을 표시합니다.
sp_syntax :

Transact-SQL 문의 구문, 시스템 프로시저, 유틸리티, 기타 루틴을 Adaptive Server에 있는 제품과 해당 sp_syntax 스크립트에 따라 표시합니다.
sp_sysmon : 성능 정보를 표시합니다.
sp_thresholdaction :

임계값이 다른 프로시저와 연관되어 있지 않은 경우, 로그 세그먼트의 사용 가능한 페이지 개수가 마지막 임계값 아래로 떨어지면 자동으로ㅗ 실행합니다. Sybase에서는 이 프로시저를 제공하지 않습니다.
sp_transactions :

활성 트랜잭션에 대한 정보를 보고합니다.
sp_unbindcache :

데이터베이스나 테이블, 인덱스, text 객체, image 객체를 데이터 캐시에서 바인드 해제합니다.
sp_unbindcache_all :

캐시에 바운드되어 있는 모든 객체를 바인드 해제합니다.
sp_unbindefault :

생성된 디폴트를 열이나 사용자 정의 데이터 유형에서 바인드 해제합니다.
sp_unbindexeclass :

데이터베이스나 테이블, 인덱스, text 객체나 image 객체를 데이터 캐시에서 바인드 해제합니다.
sp_unbindmsg :

사용자 정의 메시지를 제약 조건에서 바인드 해제합니다.
sp_unbindrule :

규직을 열이나 사용자 정의 데이터 유형에서 바인드 해제합니다.
sp_volchanged :

요청한 볼륨 처리를 덤프나 로드 중에 운영자가 수행했다는 것을 Backup Server™에 통보합니다.
sp_who :

모든 현재 Adaptive Server 사용자와 프로세스에 대한 정보, 특정 사용자 또는 프로세스에 대한 정보를 보고합니다.

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

DISK INIT



physical disk(or operating system file)와database device name를

mapping시킨다

예) 'user_data'란logical device 이름으로100MB(51200 Page) 영역확보

※512 = 1MB (alter database 로 붙여줄때 사이즈 동일하게 해야함)

1>disk init name = 'user_data',
2>physname = 'home/sybase/data/data1.dat',
3>vdevno = 2,
4>size = 51200
5>go


Syntax
Raw Partition disk 또는O/S File system을사용할 수있는 영역으로확보하는 작업이다
physical disk(or operating system file)와database device name를mapping시킨다

disk init
name = 'device_name',
physname = 'physical_name',
vdevno = virtual_device_number,
size = number_of_pages

[,contiguous] /* Open VMS only */
name : logical name, ASE에서사용되는 device명
physname : 실제로사용되는 OS의file명 또는raw partition 명
해당 디렉토리에대한 sybase login id의 쓰기권한이 부여되어야한다
파일 시스템을사용할 경우동일 이름의파일이 존재하면안 된다
vdevno : 1 ~ 255
size : page 수(1 page = 2k 이다)

예) 'user_data'란logical device 이름으로100MB(51200 Page) 영역확보
1>disk init name = 'user_data',
2>physname = 'home/sybase/data/data1.dat',
3>vdevno = 2,
4>size = 51200
5>go

raw partition Vs file system ?
4 sybase는안정적 측면에서Raw Partition 사용을권장하고 있다
1) Unix file system을사용한다면system crash 가발생한 경우recovery를 보장하지
못한다
Unix buffering은실제 commit된정보를 disk에직접 write하지않고 지연되므로
그순간에 media failure니 O/S crash가 발생한다면그 데이타는분실할 것이다
2) Raw Partition은Disk buffering(Disk에데이타를 직접write)을 사용하지않으므로
Unix File System 보다는데이타 분실을크게 줄일수 있고, 사용자가 쉽게rm으로 실수
하는경우가 없다. 그러나 관리상문제는 발생할수 있다.
3)raw partition이란UNIX system 에서mount되지 않은disk부분이다

raw partition 을사용하는 경우주의점은?
4 Cylider 0 는사용되지 않게한다
만약cylinder 0를ASE 데이타영역으로 할당했다면partition 정보를갖고 있는'disk
label'에overwrite할 것이고O/S가 Re-startup 되면 Unix는Partition정보가없는 것을
확인하고ASE가 사용하고있는 영역에partition 정보를rewriting하면DB는 corrupt되고
더이상 DB를사용할 수없다

4 ASE의unix login id가raw partition disk에read/write가가능한 owner이어야한다

4 raw partition을사용할 경우그 정보를늘 관리하는것이 좋다

device정보를보는 방법은?
4 sp_helpdevice : Device에대한 유용한정보를 볼수 있다

vdevno를찾는 방법은?

STEP 1) 현재사용되는 vdevno를알아본다
1> use master
2> go
1> select name, low / power(2,24) from sysdevices
2> go
name vdevno
------------------------------ -----------
ahn_dev 11
ahn_dev2 13
for_data 9
for_log 8
master 0
mulli 7
sysprocsdev 1
temp_dev 21

STEP 2) vdevno로사용할수있는최대값을알아본다
1> sp_configure 'number of devices'
2> go
Parameter Name Default Memory Used Config Value Run Value
----------------------------------------------------------------------
number of devices 10 #13 30 30

STEP 3) STEP 2)의Run Value보다1적은 값을최대로 사용하며, STEP 1)에서사용하지 않는것을 찾는다. 만약 없으면STEP 4)를 수행한다

STEP 4) 사용가능한vdevno를 늘려준다
1> sp_configure 'number of devices', 50
2> go
1> shutdown
2> go

Device로허용되는 최대size는?
32 giga

Device가어느 Database에속해있는지볼 수있는가?
1> select d.name 'device명', db_name(u.dbid) 'db명', u.size / 512 'Usage_Meg'
2> from sysdevices d, sysusages u
3> where u.vstart between d.low and d.high
4> order by d.name
5> go
device명 db명 Usage_Mega
------------------------------ ------------------------------ -----------
master master 6
master master 14
master tempdb 2
master model 2
master pubs2 3
master sybsystemdb 2
phd_dev phd 10
phd_dev phd 10
phd_log phd 20
she_dev she 10
she_log she 10

Device가어느 정도사용되는지볼 수있는가?
1> select 'Database device name' = name
2> , 'In use by database' = sum (size / 512)
3> , 'Space initialized' = (high - low + 1)/ 512
4> from sysdevices,sysusages
5> where vstart between low and high
6> and cntrltype = 0
7> group by name
8> go
Database device name In use by database Space initialized
------------------------------ ------------------ -----------------
master 13 30
sysprocsdev 60 60
test_dev 50 50

(3 rows affected)

Error #5123 발생하는경우는?
4 만들려는device의 physname이이미 존재하는경우이다. rm으로 제거해주어야 한다

1> disk init name = 'testdev',size = 512, physname = '/tmp/testdev', vdevno=6
2> go
1> sp_dropdevice testdev
2> go
Device dropped.
(return status = 0)

sp_dropdevice 한뒤, unix인 경우rm으로 os상의제거명령을주어야 한다

1> disk init name = 'testdev',size=512,physname = '/tmp/testdev',vdevno=9
2> go
Msg 5123, Level 16, State 1:
Server 'ASE12A', Line 1:
DISK INIT encountered an error while attempting to open/create the physical
file. Please consult the SQL Server error log (in the SQL Server boot
directory) for more details.




alter database tempdb on device_name = 100
go

100 M 를 의미


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

1. 데이타베이스 띄우기
1) 데이타베이스 프로세스 상황보기
$showserver
2) 띄우기
$cd $SYBASE/install/
$startserver -f RUN_POSCO

2. 데이타베이스 내리기
1) 들어가기
$ isql -Usa -P
> shutdown

3. 환경 변경하기
1) 메모리 변경하기
> sp_configure 'total memory', 25600 (크기 계산 : 50 *512 => 1M(=512 page)
> go
Parameter Name Default Memory Used Config Value Run Value
-------------- ------- ----------- ------------ ---------
total memory 750 51200 25600 25600

2) 지금 사용중인 프로세서 정보들을 보기
> sp_who
> go
spid status loginame hostname blk dbname cmd
---- ------ --------- -------- --- ------ ---
1 running sa pos 0 master SELECT
2 sleeping NULL 0 master NETWORK HANDLER
3 sleeping NULL 0 master DEADLOCK TUNE
4 sleeping NULL 0 master MIRROR HANDLER
5 sleeping NULL 0 master HOUSEKEEPER
6 sleeping NULL 0 master CHECKPOINT SLEEP
3) 사용자 동시접속자 수 설정
> sp_configure 'user_conn', 25600 (크기 계산 : 50*512 => 1M(512page)
> go
Parameter Name Default Memory Used Config Value Run Value
-------------- ------- ----------- ------------ ---------
number of user connections 25 1876 25 25

4) 최대 접속
> sp_configure 'max online'

5) 디바이스 상황 확인
> sp_configure 'device'

6) 생성된 계정확인
> sp_helpuser
> go
Users_name ID_in_db Group_name Login_name Default_db
--------------- -------- -------------- -------------- -----------
dbo 1 public sa master
guest 2 public NULL NULL
probe 3 public probe master

7) 데이타베이스 상황 보기
> sp_helpdb
> go
name db_size owner dbid created status
----- --------- ----- ---- ------------ ---------
POSCO 100.0 MB sa 5 Jan 27, 2000 select into/bulkcopy, trunc log on chkpt
master 5.0 MB sa 1 Jan 01, 1900 no options set
model 2.0 MB sa 3 Jan 01, 1900 no options set
pubs2 2.0 MB sa 6 Jan 27, 2000 no options set
sybsystemprocs 20.0 MB sa 4 Jan 27, 2000 trunc log on chkpt
tempdb 2.0 MB sa 2 Jan 27, 2000 select into/bulkcopy

(1 row affected)
(return status = 0)

4. 데이타 베이스 생성하기
1) 데이타 디바이스 생성하기
> disk init
> name='POSCO_DEV',(이름)
> physname='/cel/sybase/DBDEVICE',(저장디렉토리)
> vdevno=2, (디바이스번호)
> size=40960 (페이지 번호, 1page=2k, 40960page=80M)

2) 로그 디바이스 생성하기
> disk init
> name='POSCO_LOG', (이름)
> physname='/cel/sybase/DBDEVICE', (저장디렉토리)
> vdevno=3, (디바이스 번호)
> size=10240 (페이지 번호, 1page=2k, 10240page=20M)

3) 데이타베이스 생성하기
> create database POSCO on POSCO_DEV=80
> log on POSCO_LOG=20

4) 해당 데이타베이스에 들어가기
> use POSCO
5) 프로시져 만들기
> create proc 이름
> as
> ...........
> return

5. 백업 & 복구
1) 우선 백업 프로세스 띄우기
$ startdevice -f RUN_SYB_BACKUP
2) 덤프 받기
> dump database master to '화일명' => 화일로 받을 때
'dev/rmt/0' => 디바이스로 받을 때
3) 체크 옵션을 두어서 일정시간이 되면 작동하도록
> sp_dboption POSCO, 'trunc log on ckpt', true => 설정
> checkpoint => 바로 checkpoint 작동하도록 함,
commit된 데이타를 물리적으로 저장하고 비움
> sp_configure 'recovery' => 설정상황을 보여줌.

4) 백업 프로세스 내리기
> shundown SYB_BACKUP

6. 기타 사용법
1) GO 40 (앞에 수행한 명령을 40회 반복하여 처리하기)
2) sp_help (시스템 관련 Object 표시)
3) 트랙젝션 걸기
> begin tran
> ..........
> end tran

7. TIPS
1) insert aaa values('aaa') => into 사용안해도
2) varchar의 max 255임, 따라서 그 이상은 text type을 사용하여야 함.
3) bcp로만 data copy됨
4) 로그가 꽉찬 경우
> dump tran 디바이스명 width no_log
5) dump tran 디바이스명 with truncate_only
...
Sybase 교육 내용
일시 : 2005/


버전정보
ASE engine의 서버 - ASE(Adaptive Server Enterprise)
현재 15버전까지 나와있음. 12.5 버전 가장 많이 사용

SQL엔진을 Sybase에서 개발했다가 MS에 기술이전후 ASE로 명칭변경(11.5버전부터)



Client tool
isql - 텍스트형태로 쿼리전달
jisql- GUI환경 (java로 개발)
Sqladvantange - GUI환경 (c로 개발)
Sybase-central - 관리자 작업을 GUI


isql을 이용한 접속 방법
os>isql -U -P -S
옵션은 대소문자 구별함

옵션내용

-U(로그인명)
-P(패스워드)
-S(ASE서버명)
ASE서버명은 ASE를 인스톨시 DBA가 지정한다.
sa는 oracle의 sys,system과 같은 ASE의 가장 강력한 권한의 로그인
client에서 연결된 하나의 connection = session. 같은 로그인명으로 여러번 connect하면 각각의 하나의 ssession이 이루어진다.
ASE는 각각의 session을 unique한 ID로 서버에서 관리한다.




shutdown과 start 방법.
서버엔진 프로세스 확인
OS>showserver

-> dataserver (ASE의 엔진 프로세스. 이거 때 있어야 client에서 connect 할 수 있다.)



start
os>startserver -f run_서버명

shutdown.
is>isql -Usa -P -S
1> shutdown
2>go





DB에서 사용할 수 있는 언어
sql (DDL,DML,DCL)
extension SQL

datatype ex)날짜는 datetime
clustered index
if,while
function 변수 (ex> @abc (oracledms :abc 형식)
system procedure
시스템이 제공하는 stored procedure
sp_ 로 시작. 약 300여개


1>sp_help
2>go
데이터베이스에 어떤 object가 있는지 모여줌.

*Db obejct의 종류
-table
-view
-index
-default,rule
-stored procedure
-trigger

1>sp_help object명
object에 대한 description

1),2),3)를 합쳐서 T-SQL (Transact-SQL)

*ASE서버는 multi-database로 구성되어 있다.
*install하면 default로 5개의 database가 만들어 진다.
master :서버에 대한 환경이나 서버안에 있는 database에 대한 정보. master database가 이상이 있으면 startup이 안 될 수 있다.
model : templet database. system table들을 여기에서 카피해 간다. 깨지면 create database가 안 될 수도 있다.
tempdb: temporary table이 저장되어 있는 DB.
sybsystemdb :분산처리용 database
sysbsystemprocs : 시스템 프로시저가 저장되어 있는 DB

위의 5개는 DBA가 아닌 다른 user가 건드릴 수 없다.

create database a_db 시에

system table(system catalog)이 생긴다.
sys,spt_ 로 시작.

sysobjects
syscolumns
sysindexes

1>select * from a_tab
2>go
에서 테이블명,컬럼명, 인덱스 명이 있는지 system_table에서 체크한다.
create object를 할 때맏 system테이블에서 정보가 만들어진다.

create table #a.tab은 임시테이블. 임시로 tempdb의 디스크영역에 쓴다. session종료되면 자동으로 없어진다.

*Optional DB (default로 생기지는 않음)
pubs2 : sample database
sybsyntax : sp_syntax에 의해서 사용
dbccdb :dbcc checkstorage를 사용하기 위한 DB

생성법
ASE-12.5/scripts
isql-Usa -P -S -i (옵션설치명)
installpubs2
ins_syn_sql
installdbccdb

1>sp_syntax 'crate table'
'sp_help'
(각 언어의 syntax를 보여줌)

*DB의 존재여부확인 sp_helpdb


*로그인 만들기(DBA만 가능)
sp_addlogin a_login, abc123,a.db
a_login:로그인명
abc123:패스워드
a.db: 디폴트 database

1>select db_name() 현재 로그인이 어느 DB에 위치하고 있는지 (sa는 connect시 master에 위치)
default databse: 어떤 로그인 서버에 connect 했을 때 첫번째 위치하게되는 DB
2>use pubs2 (다른 db로 이동)


*isql의 syntax
-U
-P
-S
-i 스크립트실행. os의 prompt상에서 실행.
-D 데이터베이스명
-O 스크립트의 결과를 파일로 저장
-w999 화면의 width정의

1>select..
2>insert ...
3>delete...
4>go

go 할 때마다 서버로 전달이 되므로 한번만 전달된다.
1>select..
2>go..
3>insert..
4>go..

매번 서버로전달..

batch : client에서 server로 전달되는 하나 이상의 query
중간에 에러가 나면 배치의 모든 query가 rollback이 된다.

*PC client에서 서버명 지정:
dsedit(GUI환경)
서버명을 등록을 하면
sybase\ini\sql.ini에 저장


*서버에서 다른 서버의 서버명지정
dscp(text환경)


*isql 편집
1> !! :system
1>vi : 바로 입력한 query를 편집
1>reset : query 취소
1> :r : 스크립트 부름

*서버명 구성 : OS Hotst명+IP+port번호+protocol

*create table a_ab
( a_col numeric(1,) identity
b_col char(10) null,
c_col int not null)
object명이나 column명은 30자까지.

insert의 value뒤의 값들은 single quotation과 double quotation 둘 다 가능.

테이블 생성시 column의 property는 not null이 default로 생성.

identity는
1)테이블당1개
2)numeric(?,0) 1씩 증가하므로 scale은 반드시 0. 삭제시 빈번호는 채워지지 않는다.
3)insert시 포함시킬 수 없음. insert시에 table명 뒤에 column list가 없어도 자동으로 제외됨.
4)start value는 1부터

numeric() -> default로 numeric(18,0)

1> alter table a_tabe
modify a_col numeric(2,0)

* set indentity_inserta_tab on
insert ito a.tab(a_col,b_col,cOl_ values(5,"aaa",50)

* 환경변경
1)서버 : 메모리영역, 동시 connect session수, 동시 lock수, device 수
sp_configure

2)DB : default property 등..

sp_dboption
3)session
set

char(10)
varchar(10)

Data cache 메모리 영역에서 찾고 없으면 disk에서 찾는다.

Disk에 저장되는 물리적인 최소단위= page
page는 header와 offset으로 나누어져 있음.

one page의 size= 2k,8k,16k로 지정가능.
ASE를 인스톨 할 때 한번 지정가능..
result set이 클수록 page size를 크게 해 주는 것이 좋다.

1>select @@maxpagesize
default:2048 (2kb)
이중 header와 offset를 제외한다면 1962

만약 한 row가 24byte라면 1페이지에는 1962/24=81개의 row가 들어갈 수 있다.

@variable -> local variable
@@avariable -> global variable. 시스템에 의해서 생성. 변수를 만들거나 변경할 수 없다. (

@@maxpagesize
@@ncharsize
@@version : 버전



@@spid : 세션의 ID
@@rowcount :바로전의 실행된 쿼리에 의해서 적용된 row수
@@error : 바로전에 수행된 에러번호 (없을 시에는 0)
@@identity : identity 컬럼에 마지막으로 insert된 값


memory 안에서 변경된 page= dirty page
메모리의 dirty페이지를 disk에 write해주는 것은
checkpoint와 housekeepr라는 task가 이 일을 해준다.

CFS=continous Free Space에 새로운 Data가 들어간다.

char(10) abc를 abcdef로 update하면 그 자리에 데이터가 들어간다.
varchar(10) abc를 abcdef로 update로 하면 CFS가 없으므로 새로운 공간으로 이동을 하게 된다.
따라서 공간은 varchar가 많이 줄일 수 있지만, update나 delete가 많은 데이터는 char를 추천.

테이블 명이나 칼럼병 변화
sp_rename "a_tab", "b_tab"

sp_rename "a_tab.a_col", "a_tab.z_col"


* go 5 : 5번 반복실행.

실수(float) datatype은 os에 dependent 하기 때문에 잘 쓰지 않는다.

nchar
nvachar
->2byte를 사용했을 경우 쓸 수 있는 data. nchar(10)은 2byte 한글이 10개 들어갈 수 있다.

1 row는 하나의 페이지에 들어가야 한다. 1 row의 size는 페이지 크기를 넘어갈 수 없다.

text는 text page에 들어가고 실제적인 data page에는 16byte address에 저장된다. text는 여러개의 page에 나누어 저장될 수 있다.

unicode= 모든 문자를 16bit로 표현.
unicode를 지원하는 서버에서는 unichar,univarchar를 활용 할 수 있음.

image
2기가 까지. text와 마찬가지로 data page에는 주소만.

concatnation시 char는 남은 빈공간까지 다 들어간다. char(5)의 "aa" ,"bb"가 있다면 두개의 칼럼을 더한다면 "aa bb "이 된다.

select convert(varchar(1),a_col) + b_col from abc

create table test2
(a_col int null,
b_col int default 0 null,
c_col varchar(20) default getdate() null)

null값이 들어올 시 default 값 지정.

* default 조건의 삭제
alter table [테이블명]
drop consraint [constraint명]



sp_help 테이블명으로 보면 default절에 해당하는 constraint명이 나온다.

* dbo, object owner
dbo는 해당 DB의 모든 object에 대해서 접근할 수 있다.


* select into
테이블간의 copy. 테이블의 생성과 함꼐 data를 copy한다. 단 constraint나 index는 copy 되지 않는다.

다른 DB나 다른사용자의 table보기
select * from pubs2.a_user.titles;
만약 object owner가 dbo라면 user명은 생략가능.
select * from pubs2..titles;

select * into abc_copy from abc;

select into를 사용하기 위해서는 database option이 지정이 되어 있어야 한다.

1>use master
2>go

1>sp_dboption user02_db, "select into". true
2>go

1>use user02_db
2>go

1>checkpoint
2>go

* insert into publishers select ... from

* update set from 에서 조인이 가능.

* delete
delete a_tab
from a_tab, b_tab
where a_tab.a=b_tab.a
and a_ab.a="bb"

*case
when에 없는 값은 null로 된다. where절로 제한을 하거나 else로 명시해 주지 않은 다른 값들일 경우 처리를 해준다.
else type -> 그대로 둔다.

*view
-view의 특징 (virtual table)
1)network traffic을 줄여줄 수 있다.
2)select query를 simple하게 수행
3)부분적인 권한을 부여하기 위해서


create view a_view
as
select
..

-select *를 해도 실제 칼럼 list로 칼럼명이 들어가게 된다. 즉, select * 로 view 생성후 alter table로 새로운 column을 추가해도, view에서는나타나지 않는다.

-sp_depends
해당 object를 사용하는 object를 보여준다.

create view를 할때 syscomments라는 system table에 저장이 된다.
sp_helptext a.view 로 하면 view에 대한 정보를 보여준다.



index
create index a_ind on a_tab(a_col)

root level : index
intermediate level : index page
leaf level : data page가 sort된 순서대로 저장

sp_helpindex: 인덱스 정보만본다.
*index의 종류
composite (index에 사용된 칼럼이 두개 이상)
noncomposite (index에 사용된 칼럼이 하나)

unique (index에 사용한 데이터가 유일성을 가짐)
nonunique

clustered
nonclustered

noncluestred,nonunique가 default

clustered index를 생성하면 index에는 leaf level이 없고 index page는 바로 data page를 가리키게 되고, data page의 data row는 index_page의 순서대로 정렬된다.
테이블당 오직 1개만 만들 수 있다.

nonclustered index는 249개까지 만들 수 있다.

* query plan 보는 방법
set showplan on
set noexec on : select 된 result set을 보여주지 않고 query plan만 보여줌.

2005.03.17 Sybase 교육

* create table #테이블명 : session specific한 temporary table 생성..
같은 로그인이라도 다른 세션에서는 접근할 수없다.
grant도 줄 수 없다.
sp_help로 테이블을 확인할려면 tempdb로 이동해야 한다.
세션종료시 삭제

* create table temdb..테이블명 : shareable한 temporary table 생성. 서버 restart시 삭제.
단 sa로는 tempdb에 만들어도 다른 사용자가 볼 수가 없다.


* 시스템이나 user에 의해 생성된 모든 temporary table은 tempdb에 저장된다.

sp_who : 각각의 session에 대한 status

이 명령어실행시 hostname이 없는 것들 task
task : ASE서버가 쓰는 process


* sysmessages 는 master db에만 유일하게 존재하는 시스템 테이블

* sp_help sysobjects
name id type uid

select
object_id('name')
object_name(id)
db_id('name')
db_name(id)
user_id('name')
user_name(id)

시스템테이블
sysojbects
sysusers



batch에 들어갈 수 없는 명령어.
create default
create rule
create procedure
create trigger
declare cursor
use
위의 명령어 다음에는 바로 go가 와야 하므로 batch에 들어갈 수 없다.

batch안에서 생성된 변수는 batch가 끝나면 소멸된다.

동일한 object를 drop하고 creation 하는 문장을 동시에 한 batch에 넣을 수 없다.

변수사용시 주의점
변수를 할당하는 문장과 그 변수를 다시 사용하는 문장은 분리된 문장으로 나와야 한다.
변수는 배열이 아니므로 select절의 결과로 대입되는 값이 여러개일 경우 마지막 값이 들어간다.
한번 사용한 변수가 값이 초기화되지 않고 다시사용될때, 그변수가 결과값이 없는 select절의 칼럼값이 대입된다하더라도, null값이 나오지 않고 앞에서 정의한값이 나온다.
static sql에서는 컬럼명과 테이블명은 변수로 받을 수 없다.


동적SQL에서 못 쓰는 문장들
exec,excute
transaction control 문장
임시테이블을 생성하는 create 문장
use


*transaction
unchained mode : 작업의 시작을 명시적으로 서버에 알림.
begin tran
commit tran
rollback tran



chained mode : 묵시적으로 쿼리가 시작됨과 동시에 서버에 트랜잭션의 시작을 알림.
commit tran, rollback tran으로

ASE의 default transanction mode는 unchained mode이다.
set chained on

unchained mode에서 begin tran을 명시하지 않은 모든 문장은 auto-commit이 된다.


chained mode

@@tranchained
0- unchained
1- chained

@@transtate
0-진행중
1-commnit
2-error
3-rollback

@@trancount
begin tran을 만날때마다 1씩 증가
commit tran을 만날때마다 1씩감소
roll back을 만나면 0
trancount가 0이면 transanction이 끝난상태

transaction 안에서 go라는 문장은 auto-commit이 아니고 네트워크를 몇번 타느냐만을 결정한다.
chained mode에서는 trancount가 0이 될 수가 없다. 즉 trancount를 조회하는 문장자체도 transaction이기 때문이다.

*data cache에는 data page, index page , log page가 올라간다.
모든 database에는 data 영역과 transaction log 영역이 있다.
transaction log에는 insert,update,delete의 기록이 남는다.

transaction 종료와 동시에 transaction log에 기록.

auto-recovery : ASE의 서버가 data page와 transaction log를 일치화 시키는것.

* DB backup
dump database : data영역과 transaction log를 백업
dump tran :로그영역만 backup

* truncate와 delete from
테이블의 데이터를 전부 다 날릴떄 truncate가 더 빠르다. transaction log에 모든 정보를 남기지 않고 allocation 정보만를 남기기 때문.
begin tran 내에서 truncate를 쓸 수 없다.

select into 도 마찬가지

-lock type
S,X,U
-Lock scheme
APL,DPL,DRL

-LockScope
table,page,row
_Intent Lock
-DeadLock

shared lock이 걸려있는 페이지에 insert,update,delete를 걸면 transaction이 종료할때까지 wait가 걸린다.

eXclusive lock
insert,delete,update 중인 row가 있으면 select는 wait, insert,update,delete도 wait

Update lock
update 중이면 select는 ok insert,update,delete는 wait

APL : All Page Lock Scheme : index page와 data page에 모두 lock를 건다. (Default lock scheme)

DPL : Data Page Lock Scheme

DRL : Data Rows Lock Scheme

select query 위주의 테이블이면 all page lock scheme이 좋고, insert,update,delete가 많다면 DataRow Lock Scheme을 할 수 밖에 없다. 그러나 Data row Lock shceme은
lock를 관리하기 위한 메모리 영역 자원이 많이 든다.

Lock Scope
테이블 전체에 걸수 있는 lock 종류
1)isolation level 3 : 테이블 전체에 S lock
2)select from a_tab hold lock - > S lock
3) lock table -> S lock,X lock

Intent Lock

테이블간에 상이상 락을 잡지 않도록 테이블 lock 상태를 flag로 표시함
sp_lock,
sp_who
으로 확인 가능.

sp_config "lock scheme" : default lock scheme 확인
sp_config "lock scheme" ,0, datarows
또는 create table 이나 alter table에서
lock datarows
lock allpages
의 라인을 추가

* deadlock이 걸릴 경우 ASE에서 deadlocktune이라는 task가 강제로 하나를 rollback시킴.

cbcc checktable(table명)


isolation level
set transaction isolation level 0



dirty read -> 다른 트랜잭션에서 commit 되지 않은 데이터를 읽음
Nonrepeatable read -> 동일한 transaction 내에서 반복되는 쿼리에 다른 값이 나올 수 있다..
Phantom Read ->


@@isolation 변수에서 조회가능. default값은 1


에러메시지 정의
sp_addmessage 20001,"a_tab not found"



메시지 번호는 20000번 이상으로 정의. sysusermessages 테이블에 저장된다.
에러메시지 호출 방법 raiseerror 20001



*syscomments에 procedure에 대한 ddl문이 저장되어 있다.
sysprocedure에 procedure에 대한 query tree를 저장.
매번 parsing을 거치지 않으므로 효율적이다.

sp_helptext 함수명
함수에 대한 ddl
Comment
등록된 코멘트가 없습니다.