관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

[쇼핑몰 홈페이지 제작] 상품과 회원 관리 2 - 데이터베이스 구축 2 : 사용자 계정 생성 및 데이터베이스 수축 본문

웹 · 앱 개발/JSP & Servlet

[쇼핑몰 홈페이지 제작] 상품과 회원 관리 2 - 데이터베이스 구축 2 : 사용자 계정 생성 및 데이터베이스 수축

huenuri 2024. 12. 21. 20:43

데이터베이스를 구축하는 실습을 진행하기로 하자. 명령 프롬프트에서 실행하는 작업인데 많이 어렵기도 하고 코드 오류가 많이 떠서 힘든 작업이었다.


 
 
 
 
 

데이터 베이스 구축하기 이어서

 

[직접 해보기] Nonage Shop 데이터베이스 구축을 위한 사용자 계정 생성하기

 

1. 시스템 계정으로 로그인하기

명령 프롬프트 창을 띄운다. 그런 후에 DBA (Database Administrator)인 시스템 계정으로 로그인한다.

 
하지만 무슨 오류 메시지가 떴다. SP2-0734 에러는 명령어가 SQLPlus 내부에서 실행될 수 없는 경우 발생하는 에러이다. sqlplus / as sysdba는 운영 체제에서 실행해야 한다. SQLPlus가 이미 실행 중이라면, SQL 프롬프트 (SQL>) 안에서 사용할 수 없다.
책에서는 운영체제로 실행한 것 같다. SQL*Plus가 이미 실행된 상태에서는 CONNECT 명령을 사용해서 권한을 변경할 수도 있다.

CONNECT / AS SYSDBA;

 
 
 
 

2. 권한 변경에 대해 알아보기

CONNECT / AS SYSDBA;를 사용하면 SYSDBA 권한으로 데이터베이스에 연결된다. 이 권한은 Oracle 데이터베이스의 최고 관리자 권한으로, 일반적인 DBA보다 더 강력한 작업을 수행할 수 있다.

SYSDBA 권한의 특징

  1. 전체 데이터베이스 관리 가능
    • 데이터베이스 시작 및 종료 (STARTUP, SHUTDOWN)
    • 복구 및 백업 작업 (RMAN, RECOVERY 관련)
    • 시스템 사용자 계정 관리
    • 데이터 파일, 테이블스페이스 관리
  2. SYS 사용자로 동작
    • SYSDBA 권한으로 로그인하면, 내부적으로 SYS 사용자로 연결돼. 따라서 SYS 스키마에서 작업을 수행하게 된다.
  3. 운영 체제 인증 기반
    • sqlplus / as sysdba 또는 CONNECT / AS SYSDBA;는 데이터베이스의 계정 비밀번호를 묻지 않는다. 대신 운영 체제의 인증을 기반으로 동작한다. 이건 데이터베이스 관리자만 사용할 수 있게 보안을 강화한 것이다.

 

주의할 점

  • SYSDBA 권한은 시스템 전반에 영향을 미칠 수 있는 강력한 권한이다. 일반 작업에서는 사용하지 않고 꼭 필요한 경우에만 사용해야 한다.
  • 일반 사용자 계정으로 작업할 때는 CONNECT 사용자명/비밀번호로 접속해서 작업하고, 관리자 권한이 필요할 때만 SYSDBA로 전환하는 게 좋다.

 
 
 
 

3. 시스템 계정으로 다시 로그인하기

 
명령 프롬프트로 이 명령어를 넣어 접속했다.


 
 
 
 

4. 새로운 사용자 계정 생성하기

오라클을 설치할 경우 제공되는 DBA(데이터베이스 administrator) 계정과는 달리 JDBC에서 사용할 테이블을 생성해 놓을 사용자 계정을 생성한다. 사용자 이름은 오라클에 접속할 때 사용할 계정이고, 접속을 성공리에 하려면 사용자 생성할 때 지정한 암호를 입력해야 한다.

CREATE USER 사용자이름 IDENTIFIED BY 비밀번호;

 


 
 
 
 

5. 사용자 계정에 권한 부여하기

생성된 사용자 계정에 권한을 부여한다. 권한은 데이터베이스 생성 및 테이블 생성과 같은 기능을 사용하기 위한 것이다.

GRANT CONNECT, RESOURCE TO 사용자이름;
GRANT CREATE VIEW TO nonage;

 
두 번째 명령어는 특정 사용자(nonage)에게 뷰를 생성할 수 있는 권한을 부여하는 명령이다.
 

 


 
 
 
 
 

[직접 해보기] Nonage Shop 시스템을 위한 데이터베이스 구축하기

 

1. backup.dmp 파일을 C:₩ 아래 복사하기

 
소스 파일에 보면 저자가 만들어놓은 데이터베이스 백업 파일이 있다. 이걸 C 드라이버에 복사한다. 그냥 복사하면 관리하기 어려우므로 파일을 생성하여 하위 폴더에 보관하는 것이 좋다. 책 저자는 그냥 C 드라이버 안에 했다.
 
 

 
여기에 복사해 놓았다.


 
 
 
 

2.  덤프 파일을 임포트하여 데이터베이스 구축하기

내가 지정한 경로를 써서 다음과 같이 명령어를 작성한다.

imp system/1234 fromuser=nonage touser=nonage file=c:/oraclexe/JSP/backup.dmp

 

 
이렇게 썼는데 오류가 떴다. SP2-0734 오류는 SQL*Plus 내부에서 실행할 수 없는 명령어를 입력했을 때 발생한다. imp 명령은 SQL*Plus가 아니라 운영 체제의 명령 프롬프트(CMD)나 터미널에서 실행해야 한다.
 

해결 방법

SQL*Plus에서 나가기 : SQL*Plus 프롬프트를 종료하려면 아래 명령을 입력

exit;

 
 
 
 

3. 데이터베이스 다시 구축하기

 
나가서 명령어를 썼는데 이번에도 오류가 났다. 오류 메시지 "ORA-01017: invalid username/password; logon denied"는 입력한 계정 정보(사용자 이름 또는 비밀번호)가 잘못되었을 때 발생하는 것이다. 책이 있는 코드 그대로 쓰니까 무슨 말인지 몰랐는데(설명이 없어서) 이게 내 아이디와 비밀번호라는 걸 알게 되었다.
 
Oracle 설치 중에 설정했던 system 계정의 비밀번호가 맞는지 확인해야 한다.
 
 
 

 
비밀번호를 맞게 다시 명령어를 입력했더니 임포트는 잘 되었으나 몇 가지 문제가 있었다. 즉 데이터 복구가 완전히 이루어진 것은 아니다. 
 

주요 메시지 분석

1. IMP-00058: ORACLE error 28002 encountered

  • 이 메시지는 현재 사용 중인 system 계정의 비밀번호가 7일 안에 만료될 예정이라는 경고이다.
  • 이는 데이터 복구에 직접적인 영향을 주지는 않지만, 향후 계정 잠금을 방지하려면 비밀번호를 갱신하는 것이 좋다.
ALTER USER system IDENTIFIED BY 새로운비밀번호;

 
 
 
2. IMP-00003: ORACLE error 1435 encountered

  • 이 메시지는 내부적으로 오류가 발생했음을 의미하며, 실제로 데이터가 제대로 복구되지 않았음을 나타냄

 
3. ORA-01435: user does not exist

  • 이 메시지는 NONAGE라는 사용자가 데이터베이스에 존재하지 않아서 복구할 수 없다는 뜻이다.
  • NONAGE 사용자를 먼저 생성한 다음 다시 복구를 시도해야 한다.

 
 

fromuser와 touser의 의미

 
 

  • fromuser=nonage
    • 이 옵션은 백업 파일(여기서는 backup.dmp)이 생성될 때 사용된 사용자 계정을 의미한다.
    • 즉, 데이터를 백업했던 원래의 사용자 계정이 nonage라면 그대로 유지해야 한다.
    • 만약 원래 백업 파일이 다른 사용자 계정에서 생성된 거라면 그 사용자 이름을 넣어야 한다.
  • touser=nonage
    • 이 옵션은 백업 데이터를 복원할 대상 사용자 계정을 의미한다.
    • 방금 생성한 계정 이름을 여기 넣으면 된다.

 
 
 
 
 

4. 코드 다시 수정하기

비밀번호를 다시 써서 코드를 수정했다.

 
이러한 메시지가 뜨면 복구가 잘 된 것이다. 이제 7일 후 만료가 된다는 비밀번호를 변경해 보겠다.


 
 
 
 

5. 비밀번호 변경하기

 
비밀번호가 잘 변경되었다.


 
 
 
 
 

학습을 마치고

데이터베이스를 구축하는 작업은 정말 힘들었다. 1시간 반은 걸린 것 같다. 그래도 첫 단추를 떼었으니 그다음부터는 충분히 잘할 수 있을 거라 생각한다. 
이제 본격적으로 홈페이지 제작 실습을 진행할 수 있을 것 같다.