답변:
지난 몇 년 동안 Oracle과 SQL Server 작업을 바꿨으며 다른 방법으로 글을 쓰지 않았습니다 . 많은 관용적 및 구조적 차이점이 있으며 각 제품을 둘러싼 공급 업체 및 개발자 / DBA 커뮤니티에 따라 다양한 용어가 다르게 사용됩니다.
물리적 아키텍처
SQL Server는 다양한 것을 Oracle과 다르게 구성하며 Oracle에는 직접적인 아날로그가없는 하나 또는 두 가지 주요 개념이 있습니다.
'데이터베이스'는 자체 사용자 권한, 스키마 / 네임 스페이스 및 스토리지가있는 SQL Server의 별도 항목입니다. Sybase에 익숙한 경우 제품의 공통된 기원으로 인해 Sybase의 데이터베이스와 거의 동일하게 작동합니다.
파일 그룹은 데이터베이스에 로컬이지만 테이블 스페이스와 거의 같습니다.
스키마는 SQL Server의 데이터베이스 사용자와 다른 개념이지만 사용자는 기본 스키마를 가질 수 있습니다.
MVCC는 SQL Server에서 약간 다르게 작동합니다. 이전 버전의 잠금이 해제 될 때까지 행의 다른 사본을 유지 보수하는 비교적 최신 기능입니다. SQL Server에는 롤백 세그먼트와 직접적인 관련이 없습니다. SQL Server 데이터베이스에서는 기본적으로 활성화되어 있지 않습니다.
Tempdb는 SQL Server에서 훨씬 더 많이 사용됩니다. 시스템은 임시 테이블 및 중간 조인 결과에이를 사용합니다. 나중에 tempdb에 대한 추가 정보.
테이블 파티셔닝은 Oracle보다 다소 어색합니다. 제공하는 모든 것에서 파티션 키를 생성 한 다음 해당 파티션 기능에 대한 파티션 구성표를 생성하는 파티션 기능을 설정해야합니다. 파티션 구성표는 파티션 구성표에 테이블을 생성한다는 점에서 파일 그룹과 비슷하게 동작합니다.
파티션을 스왑 및 스왑하려면 올바른 구조의 빈 테이블에 대한 제약 조건을 설정해야합니다. 제약 조건은 파티션 키 값이 스왑하려는 파티션에 적합하다는 것을 보장합니다.
구체화 된 뷰를 SQL Server에서 인덱싱 된 뷰라고합니다. 이 GROUP BY
절에는 CUBE
연산자 가 있으며 설명서에는 쿼리 다시 쓰기 기능이 있습니다. 그러나이 기능은 잘 문서화되어 있지 않으며 완전히 성숙하지 않을 수 있습니다. YMMV.
SQL Server는 XA 또는 OLEDB 트랜잭션 프로토콜을 통한 2 단계 커밋을 지원하지만 자율 트랜잭션을 지원하지 않습니다.
클러스터형 인덱스는 테이블의 모든 열이 클러스터형 인덱스에 참여할 필요가 없기 때문에 Oracle의 인덱스 순서 테이블과 약간 다릅니다. IOT가 Oracle에있는 것보다 SQL Server 아키텍처에서 훨씬 더 널리 사용됩니다.
SQL Server는 인덱스 커버링을 지원하지만 조인 인덱스는 없습니다. 비트 맵 인덱스는 팩트 테이블에 충돌하지 않고 교차점을 계산할 수있는 인덱스 교차점 / 별 변환 연산자가 있지만 지원되지 않습니다.
시퀀스는 SQL Server에 비교적 최근에 추가 된 것입니다. 전통적으로 자동 증가 키는 ID 열을 통해 수행됩니다. 를 통해 ID 열에 값을로드 할 수 있습니다 set identity_insert on
.
프로그램 작성
관용 T-SQL은 관용 PL / SQL과 약간의 차이가 있습니다. 패러다임의 차이점 중 일부가 더 깊이 설명 할만큼 충분히 다르게 작동합니다.
T-SQL에는 패키지 개념이 없습니다. 데이터베이스의 모든 저장 프로 시저와 함수는 공통 네임 스페이스에 존재하지만 스키마를 사용하여이를 분리 할 수 있으며 네임 스페이스는 데이터베이스에 로컬입니다.
임시 테이블 사용법에 대해 알아보십시오 SELECT INTO
. 실제로 커서가 필요한 T-SQL 코드를 만나는 경우는 매우 드;니다. 임시 테이블을 사용하면 작업을 설정된 작업으로 수행 할 수있는 단계로 나눌 수 있습니다. SELECT INTO
tempdb의 로그는 최소한으로 기록되며 사용자 데이터베이스의 특정 복구 모드에서도 최소한으로 기록되므로 중간 조인 결과를 유지하는 쿼리 연산자만큼 빠릅니다.
관용적 인 T-SQL은 PL / SQL에서 커서 변수를 볼 수있는 일종의 역할로 임시 테이블을 사용하지만 집합 연산을 훨씬 더 많이 사용합니다. 그러나 임시 테이블은 상당히 불분명 한 코드를 만들 수 있으므로주의해서 사용하십시오.
시스템 데이터 딕셔너리는 이전 버전의 오라클보다 훨씬 더 불분명하지만 SQL Server 2005에서는 훨씬 나아졌습니다. Microsoft에서 제공하는 도구에는 SSMS 탐색기에 내장 된 많은 내성 항목이 있지만 여전히 데이터 사전 주위에. 그것은 구분하지 않는 ALL
, USER
그리고 DBA
불구하고, DB 객체의 전망을 제공합니다.
SSMS에는 쿼리 계획 뷰어가 내장되어 있습니다.
T-SQL 코드의 식별자는 []로 인용 할 수 있으며 인용 된 경우 모든 종류의 쓰레기를 포함 할 수 있습니다. 우리는 열 '직항 / 전송'을 호출 당신을 잡을 경우, 우리는 것입니다 당신의 장을 찢어.
SQL Server에는 창 기능 (2005 IIRC부터)이 있으므로 이제 그룹 내에서 주문, 합계 실행 등을 수행 할 수 있습니다.
CONNECT BY
재귀는 재귀 적 CTE를 통해 수행 될 수 있지만 T-SQL 은와 직접적으로 동일하지 않습니다 .
데이터베이스 내 스키마와 달리 데이터베이스에서 홉하는 코드를 작성해야하는 경우 공용 동의어를 사용하여 오브젝트를 로컬로 별명을 지정하고 코드의 별명을 참조하십시오. 이렇게하면 데이터베이스 이름에 대한 하드 코딩 된 종속성이 방지됩니다.
데이터베이스 이름에 대한 하드 코딩 된 종속성을 피하면 데이터베이스를 통해 동일한 서버에서 여러 환경을 유지 관리하기가 매우 쉽습니다.
사용자 지정 집계 함수와 같은 일부는 CLR sprocs를 통해서만 구현할 수 있습니다. 또한 트랜잭션 컨텍스트에서 벗어나려면 (예 : 롤백 방지 오류 로깅을 위해 자율 트랜잭션을 가짜로 만들기 위해) 현재 트랜잭션 컨텍스트 외부에서 로컬 연결을 만들 수 있으므로 CLR 프로 시저를 사용할 수 있습니다.
보안
로그인은 SQL Server 인스턴스 수준에서 정의되지만 각 로그인은 '데이터베이스 사용자'로서 0 개 이상의 데이터베이스에 매핑됩니다. 권한 캠은 '로그인'(서버) 및 '사용자'(데이터베이스) 모두에 할당되지만 데이터베이스 '역할'에는 일반적으로 사용됩니다. 사용자는 역할에 속하고 권한은 역할에 할당됩니다. SQL Server 2012에는 '서버 역할'이 추가되었습니다.
SQL Server 2012에는 '부분적으로 포함 된 데이터베이스'라는 개념이 도입되어 사용자 및 역할 정보를 해당 데이터베이스에 로컬로 유지할 수 있습니다.
데이터베이스 내에서 사용자와 스키마의 개념은 분리되어 있습니다. 사용자 또는 역할을 스키마에 할당 할 수 있으며 스키마는 데이터베이스 객체를 소유합니다.
Windows 인증은 배후의 로그인 정보를 사용하여 컴퓨터 또는 도메인의 사용자를 SQL Server 로그인으로 인증합니다. 이에 대한 IIRC 지원은 Oracle의 추가 옵션입니다.
특별한 역할 인 'dbo'( '데이터베이스 소유자'의 약자)는 특정 데이터베이스 내에서 일종의 수퍼 유저 권한을 갖습니다. 각 데이터베이스에는 'dbo'역할이 있으며 지정된 데이터베이스에서 'dbo'역할에 사용자를 지정할 수 있습니다.
기본 'dbo'스키마도 있습니다. dbo 스키마가 개체를 소유 할 수 있음-다른 스키마가 명시 적으로 제공되지 않는 한 'dbo'역할 (또는 시스템 전체 관리자 권한)을 가진 사용자가 만든 개체는 기본적으로 'dbo'스키마가 소유합니다.
단일 데이터베이스의 백업으로 보안 정보가 유지되지 않습니다. 백업이 복원되는 서버에서 사용자와 역할을 명시 적으로 구성해야합니다. SQL Server 2012에서는 새로운 '부분적으로 포함 된 데이터베이스'기능을 통해 사용자 및 역할 데이터를 데이터베이스에 로컬로 유지할 수 있습니다.
SQL Server 2005부터는 호출자, 작성자, 소유 스키마 또는 지정된 사용자의 보안 컨텍스트에서 저장 프로 시저를 실행할 수 있습니다.
SQL Server의 뷰에서 기본 테이블에 대한 권한은 뷰를 소유 한 스키마의 권한을 기반으로합니다. 뷰 정의에는 세션에서 정보를 가져 오는 필터가 포함될 수 있지만 기본 테이블에 대한 사용자 권한은 보안에 참여하지 않습니다. Oracle에서, 권한 부여 구성에 따라 기본 테이블에 대한 사용자 권한이보기에 영향을 줄 수 있습니다.
모니터링 및 튜닝
TBA-오라클의 메모리 아키텍처와 SGA 등
백업 및 복구
TBA
압형
Microsoft는 SQL Server에 일련의 주변 도구를 번들로 제공합니다. 공급되는 주요 품목 중 일부는 다음과 같습니다.
SSMS (SQL Server Management Studio) : Oracle의 SQL Developer와 유사한 기능을 수행하며 편집기 및 코드 실행 기능을 제공합니다. 유용한 기능으로는 데이터베이스 개체 브라우저 및 쿼리 계획 뷰어가 있습니다.
SSAS (SQL Server Analysis Services) : 데이터베이스 서버와 다른 OLAP 서버입니다. 클라이언트-서버 통신을 위해 자체 쿼리 언어 (MDX) 및 API (XML / A)를 사용합니다. SQL로 쿼리 할 수 없습니다. SSMS에는 MDX 및 원시 XMLA 쿼리를 편집하고 결과를 표시하는 기능이 있습니다. ASCMD.EXE라는 명령 줄 쿼리 도구도 제공됩니다.
SSRS (SQL Server Reporting Services) : 보고서를 게시하기위한 웹 기반보고 도구입니다. BI Development Studio (BIDS) 또는 Report Builder를 통해 보고서를 작성하고 웹 포털에 게시 할 수 있습니다. SSRS 서버 자체에는 프로그래밍 방식으로 서버를 관리하기위한 웹 서비스 API가 있습니다. SSRS 보고서는 SQL Server뿐만 아니라 다양한 소스의 데이터를 사용할 수 있습니다. SSRS 서버를 프로그래밍 방식으로 관리하기 위해 RS.EXE라는 명령 줄 도구가 제공됩니다.
SSIS (SQL Server Integration Services) : SQL Server와 함께 제공되는 ETL 도구입니다. 구조적으로는 코드 생성 도구가 아니라는 점에서 OWB 또는 ODI와는 상당히 다릅니다. 런타임은 클라이언트 측에 있으며 데이터베이스 서버와 별도의 시스템에있을 수 있습니다. SSIS 패키지는 BIDS로 개발할 수 있으며 DTEXEC.EXE라는 명령 줄 도구를 사용하여 독립적으로 실행할 수 있습니다.
BIDS (BI Development Studio) : 보고서, SSIS 패키지 및 SSAS 큐브를 개발하기위한 비주얼 스튜디오 기반 환경입니다. 다른 VS 기반 개발 툴링 (예 : VS Professional)이 설치된 경우 툴링을 단일 환경 및 공통 프로젝트 그룹으로 통합 할 수 있습니다.
대량 복사 (BCP) : SQL * Loader와 유사한 명령 줄 대량 삽입 / 추출 도구
SQLCMD : SQL * plus와 유사한 명령 줄 쿼리 도구
SQL 프로파일 러 : SQL Server, SSAS 및 제품군의 다른 도구에서 추적 정보를 캡처하고 평가할 수있는 추적 및 프로파일 링 도구입니다.
SQL Server 에이전트 : 한 종류의 다른 종류의주기적인 작업을 실행할 수있는 작업 스케줄링 유틸리티.
TRUNCATE TABLE ...
DML과 함께 실행할 수 있습니다 . T-SQL에서는 다른 작업과 함께 사용하여 결과 집합을 클라이언트에 반환 할 수도 있지만 PL / SQL 에서는의 출력을 테이블 또는 다른 대상으로 보내야 합니다. Oracle에서는 순수 SQL 만 결과 세트를 클라이언트에 리턴 할 수 있습니다. EXECUTE IMMEDIATE
SELECT
SELECT
우리의 주요 제품은 SQL Server와 Oracle 모두에서 작동합니다. 여기에 해결해야 할 다른 차이점이 있으며 명심해야 할 수도 있습니다.
날짜-시간 처리는 매우 다릅니다 : 다른 정밀도, 다른 함수와 함께 작동
빈 문자열은 SQL Server가 아닌 Oracle에서 NULL입니다.
문자 인코딩과 유니 코드 처리는 매우 다릅니다. SQL Server에서는 동일한 데이터베이스에 일반 ( varchar
) 또는 유니 코드 ( nvarchar
) 열을 혼합하여 사용할 수 있으며 Oracle에서는 데이터베이스 수준에서 사용할 인코딩 종류를 결정합니다.