'오류 21002 SQL-DMO]'ncash' 사용자가 이미 있습니다.'

 

해결책 :

기존 Database에 있었던 사용자 계정을 만들 때 발생하는 오류이다.
sa로 로긴한 후 아래 문장을 해당 데이터베이스에서 실행한다.

 

SP_CHANGE_USERS_LOGIN 'UPDATE_ONE', 'aaa', 'aaa'

ORACLE VARCHAR2 --> CLOB 로 바꾸는 방법....

 

-- 옮기기위한 테이블과 옮길 테이블 그리고 중간 단계를 거칠 테이블을 생성한다.

테이블 정보

TEST_TBL  :  ( 옮기기 위한 테이블) 원본

    USERID   VARCHAR2(20) ,

    CONTENT  VARCHAR2(40000)


TEST_TBL_LONG  :  (CLOB로 바꾸기 위하여 중간에 거치는 테이블)

    USERID  VARCHAR(20),

    CONTENT  LONG


TEST_TML_CLOB  :  (마지막으로 바꿀 테이블)

    USERID  VARCHAR(20),

    CONTENT  CLOB


예를 들어 위와 같은 테이블을 만들어 테스트를 해볼수 있다.


일반 VARCHAR2 에서 CLOB로 바로 옮길수는 없다. LONG 형에서 CLOB로 옮길수는 있다.

바로TO_LOB를 쓰면 LONG 에서 CLOB로 바꿀수 있다.


단 , 여기서 바꾸거나, 바뀌는 모든 테이블이 모두 같은 수의 컬럼과 순서를 가지고 있다.


1. 바꾸고 싶은 원본 테이블을 LONG 으로 바꾸어 주어야 한다.

INSERT INTO TEST_TBL_LONG
    SELECT USERID , CONTENT FROM TEST_TBL
 
 
2. LONG으로 바꾼 테이블을 CLOB로 바꾼다. 이때 TO_LOB를 사용한다.
INSERT INTO TEST_TBL_LONG
   SELECT USERID ,TO_LOB(CONTENT) FROM TEST_TBL_LONG


이렇게 하면 비교적 손쉽게 VARCHAR2 를 CLOB로 바꿀수 있다.



사용자 암호변경 : ALTER USER scott IDENTIFIED BY lion;

 

[백업/복구]

* 사용자 모드

 

백업

exp userid=system/암호owner=DEP_DB file='C:\scottuser.dmp'

 

복구

imp userid=system/암호 file='C:\scott.dmp' fromuser=백업시 사용자 touser=복구시 사용자

/*
Create User ID Identified by PWD
default tablespace users
temporary tablespace temp
quota unlimited on users
quota unlimited on temp;
*/
grant connect, resource to ID

show tables;                                             테이블 출력

show databases;                                       데이터베이스 출력

 

set password for root=password('비번');       암호 변경


데몬 적용

flush privileges


정보보기

status


백업

mysqldump -u [user_name] -p [db_name] > [파일명]


mysql 5.0 이상일 경우 procedure 포함 명령어 다음

--routines


복구

mysql -u [user_name] -p [db_name] < 파일명

소유자 변경
sp_changeobjectowner '소유자.테이블명', '소유자아이디'

 


데이타베이스 이름 변경
sp_renamedb '이전이름', '새로운 이름'



[테이블 소유주 권한 한방에 바꾸기]
DECLARE @TABLE_NAME VARCHAR (50)
DECLARE @TABLE_OWNER VARCHAR (50)
DECLARE TCURSOR CURSOR
 
FOR SELECT TABLE_NAME, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME <> 'dtproperties'
FOR READ ONLY
 
OPEN TCURSOR FETCH NEXT FROM TCURSOR INTO @TABLE_NAME, @TABLE_OWNER
WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC ('SP_CHANGEOBJECTOWNER ''[' + @TABLE_OWNER + '].[' + @TABLE_NAME + ']'', ''well''')
    FETCH NEXT FROM TCURSOR INTO @TABLE_NAME, @TABLE_OWNER
END
CLOSE TCURSOR
DEALLOCATE TCURSOR

백업 하기
BACKUP DATABASE mydb TO DISK='d:\sql_back\back_SQL11' WITH INIT

 

 

MDF,LDF 복구
EXEC sp_attach_db @dbname = N'데이터베이스 이름', 
   @filename1 = N'파일 경로.mdf', 
   @filename2 = N'파일 경로.ldf'

백업 파일 복구

-- 다른 데이터베이스에서 실행
restore database mydb from disk = 'C:\a.bak'
WITH REPLACE          --: 덮어 씌우기

백업파일 유효성 검사
restore verifyonly from disk= ''

다른곳에서 생성된소유자로 백업된 데이터베이스 다른곳에서 복원했을때 소유자 수정

exec SP_CHANGE_USERS_LOGIN 'UPDATE_ONE', 'mrlandnet', 'mrlandnet'

+ Recent posts