[오라클 DB관리]23.09.11

망구씨·2023년 9월 11일
0

오라클DB관리

목록 보기
5/19
post-thumbnail

복습

💡 오라클 데이터 베이스 구조

오라클 레리엘릭슨(IBM)

          Single instance db ---> multiple instance db
                                      (RAC)
             인스턴스 ( 빠른 속도로 검색하기 위해 )
SQL           ↓ ↑  i/o
           데이터베이스   

✅ 빅데이터가 되다보니 성능이 점점 느려져서 SQL 튜닝이 중요하다는 것을 알고
SQL튜너 직업, 오라클에서도 SQL을 속도를 빠르게 하려고 여러가지 기술들을 만들어냈다.
(Workshop2) -> 하드웨어와 하드웨어를 통제하는 프로그램을 개발해서 만들어낸 소프트웨어. -> 엑사서버db

dba 들은 오라클을 잘 이해하면서 오라클 관리와 튜닝(SQL튜닝, 서버튜닝)을 알아야합니다.

SYSTEM 및 SYSAUX 테이블스페이스

➡️ SYSTEM 및 SYSAUX 테이블스페이스는 데이터베이스 생성
시에 생성되는 필수 테이블스페이스로, 온라인 상태여야 합니다.
➡️ SYSTEM 테이블스페이스는 데이터 딕셔너리 테이블과 같은
핵심 기능을 위해 사용됩니다.
➡️ 보조 테이블스페이스인 SYSAUX는 Enterprise Manager
Repository 등 추가적인 데이터베이스 구성 요소에 사용
됩니다.
➡️ SYSTEM 및 SYSAUX 테이블스페이스는 응용 프로그램의
데이터를 저장하는 데 사용하지 않는 것이 좋습니다.

DBA가 알아야할 SYSTEM 테이블 스페이스와 SYSAUX 테이블 스페이스 관리

✔️ system tablespace : 데이터 사전을 담고있는 테이블 스페이스!

user_xxx - 소유자가 가지고 있는 db objects
all_xxx - 소유자가 가지고 있는 db objects + 다른 소유자가 권한을 부여해서 볼 수 있는 objects
dba_xxx - database에 있는 모든 objects들을 다 볼 수 있다

✅ 오라클을 운영하기 위해서는 사람이나 오라클이나 항상 이 데이터 사전을 조회한다. 그래서 이 데이터 사전이 있는 SYSTEM테이블 스페이스는 항상 온라인 상태여야 합니다.

실습1. system 테이블 스페이스가 online상태인지 확인합니다.

select tablespace_name, status
  from dba_tablespaces;


❗ 시스템 테이블 스페이스는 db 생성할 때 생성됩니다.

✔️ sysaux (system의 보조 테이블 스페이스. auxiliary의 약자!)
이 테이블 스페이스에는 엔터프라이즈 메니저의 레파지토리로 사용이 됩니다.
enterprise manager란, 명령어 없ㅅ이 그냥 버튼 클릭으로 오라클 데이터 베이스를 관리하는 html 페이지 입니다.


🤔 sysaux를 drop해버리면, alert log file에 계속 에러메세지 뜨고 난리남.. 오라클 다시 깔아야하니까 지우지 않도록 주의하기 !

💡 dba를 위한 tip: system tablespace와 sysaux 테이블 스페이스에 emp와 같은 일반 테이블을 저장하면 안된다. 이 공간은 시스템관리를 위한 데이터만 저장되어야 함 ! drop은 되지만, 절대로 emp테이블 같은 일반 테이블을 시스템 테이블 스페이스에 만들지 말기!

문제 SCOTT이 가지고 있는 테이블 리스트를 조회하기 (SYSTEM tablespace에 있는 데이터 사전을 조회하기)

1. scott으로 접속해서 조회한다면

connect scott/tiger
select table_name
  from user_tables;

2. sys로 접속해서 조회한다면

connect / as sysdba
select table_name
  from dba_tables
  where owner='SCOTT';

자동 저장 영역 관리(ASM) -

➡️ 이식 가능한 고성능 클러스터 파일 시스템
➡️ 오라클 데이터베이스 파일을 관리합니다.
➡️ ACFS(ASM 클러스터 파일 시스템)으로 응용 프로그램 파일을 관리합니다.
➡️ 로드가 균형을 이루도록 여러 디스크에 데이터를 분산시킵니다.
➡️ Failure 시 데이터를 Mirroring합니다.
➡️ 저장 영역 관리 문제를 해결합니다.

database (datafile, controlfile, redo log file)
storage (disk) : CD 연상하기


✅ DBA가 TA엔지니어에게 디스크에 대한 raw device 목록을 엑셀로 주세요!

create tablespace ts07
  datafile '/raw/raw1/raw_1_1' size 10G;

database (datafile, controlfile, redo log file)  

✅ 스토리지 관리는 TA가 하고 create tablespace ts07 는 DBA가 했는데, 오라클이 ASM을 지원한 이후에는 스토리지를 ASM으로 구성하고 관리하기때문에 raw device로 구성 안해도 되고 구성을 해도 그냥 큼직하게만 나눠서 ASM 디스크 그룹으로 사용(ASM 스토리지)

💡 storage 3가지

: 리눅스나 윈도우나 똑같이 아래의 3가지 스토리지중 하나로 구성이 가능하다. 그런데 우리의 경우 리눅스는 ASM으로 관리, 윈도우 19c는 FILE SYSTEM으로 관리되고 있다.
1. raw device
2. file system
3. ASM

실습1. 리눅스 테이블 스페이스 이름과 데이터 파일 이름을 확인하기

SQL> select tablespace_name, file_name 
       from dba_data_files;


🤔 +DATA 라는것은?
TA엔지니어가 디스크1, 디스크2 를 꽂으면 오라클이 얘네들 묶어서 +DATA라는 ASM 디스크 그룹을 만든 것이다.
🤔 ASM의 장점 두가지!
장점1. disg failure시 미러링된 디스크로 계속 데이터를 엑세스 할 수 있게 한다. DISK1, DISK2에는 같은 ts01이 들어있다. 이것을 미러링이라고 한다. 하나가 안되면 다른거에서 엑세스 될 수 있도록.
장점2. 어느 한 DISK에 로드가 몰리지 않도록 적절히 로드를 분산한다. 이를 load balancing이라고 한다.

💡 dba를 위한 tip!

위의 2가지 기능이 os에도 있고 db의 ASM에도 있는데 두가지를 같이 설정하면 오히려 성능이 떨어진다. 어느 한쪽만 설정하는것이 바람직 하다 ! 만약 ASM을 사용할거라면 그냥 db쪽에서 ASM의 로드 발란싱과 미러링을 이용하는것이 좋다.

실습1. ASM 디스크 그룹을 확인하기

✔️ 테이블 스페이스 만들기 전에 확인해야할 asm 디스크 그룹명

select * from v$asm_diskgroup;
 or 
select group_number, name from v$asm_diskgroup;  

✔️ TA가 DBA에게 만들어준 ASM DISK 이름을 확인할 때 조회

select disk_number, path from v$asm_disk;  

❗ 위 두 쿼리는 꼭 알고있기

실습2. 데이터 디스크 그룹에 TS02 테이블 스페이스를 생성하기

create tablespace ts02 datafile '+data' size 50m; -- +data는 ASM 디스크 그룹 이름

select tablespace_name, file_name
  from dba_data_files;

✍🏻 참고 : 윈도우의 파일 시스템에 테이블 스페이스 만들때는 아래와 같이 만들어야 했다.

create  tablespace  ts
  datafile  'D:\ORACLE19C\ORADATA\ORCL\ts01.dbf' size  100m; 

문제 ts07이라는 테이블 스페이스를 사이즈 20m로 해서 생성하시오

create tablespace ts07 datafile '+data' size 20m;


우리는 지금 윈도우가 아니라 ASM에서 만들고 있는 것!

ASM 저장 영역 구성요소

+DATA/orcl/datafile/users.259.796857625
+DATA/orcl/datafile/undotbs1.258.796857625
+DATA/orcl/datafile/sysaux.257.796857623
+DATA/orcl/datafile/system.256.796857621
+DATA/orcl/datafile/example.265.796857803
+DATA/orcl/datafile/sysaux.267.1145464529
+DATA/orcl/datafile/users.268.1145464531
+DATA/orcl/datafile/system.269.1145464533
+DATA/orcl/datafile/system.270.1145464597
+DATA/orcl/datafile/ts01.273.1147004025
+DATA/orcl/datafile/ts02.274.1147260329
+DATA/orcl/datafile/ts07.275.1147260665

✅ 오라클의 data file이 ASM data file과 매핑된다.


📖 4장. 오라클 인스턴스 관리

(2,3장은 마지막에!)

오라클 인스턴스 관리 프레임워크(관리툴)

💡Oracle Enterprise Manager를 이용하면 다음 2가지를 쉽게 관리할 수 있다.
1. 리스너
2. 오라클 인스턴스


위 사진이 Oracle Enterprise Manager

Oracle Enterprise Manager를 구동시키는 방법

💡Oracle Enterprise Manager는 현재 db의 상태를 한눈에 확인할 수 있는 좋은 툴이다. db관리, 백업, 튜닝등을 편하게 버튼 클릭으로 할 수 있다.



✅ 링크 열고 예외추가 해주면 이 화면이 나온다 !

아이디 (sys) 비밀번호 (oracle_4U) , sysdba로 선택해서 로그인하면 위와같은 화면이 나온다.
✅ 오른쪽에 호스트CPU봤을 때 연한 막대기가 높게나오면 os문제, 진한 녹색이 높게 나온다면 DB(오라클)문제
✅ 활성 세션도 액티브 세션이 많다면 막 올라갈것.

✅ 바를 클릭하면 어떤 악성 SQL 때문에 느려진건지 볼수가 있다.

✅ 회색 바 같은거 움직이면 과거의 악성 SQL도 확인할 수 있다. 왼쪽 아래에 SQL ID 클릭하면 어떤 악성SQL인지 확인가능

실습1. Oracle Enterprise Manager를 시작 시키세요!

# 오라클 인스턴스가 뭐뭐가 있는지 확인
[orcl:~]$ ps -ef | grep pmon
oracle    5476     1  0 05:06 ?        00:00:06 asm_pmon_+ASM
oracle    5720     1  0 05:10 ?        00:00:07 ora_pmon_orcl # orcl인걸 확인
oracle   21320 14299  0 13:57 pts/1    00:00:00 grep pmon

# 꼭 oracle에서 실행, 위에서 orcl인걸 확인하고 공백없이 =옆에 넣어서 찾는다.
$ export $ORACLE_SID=orcl # 오라클 인스턴스를 orcl로 사용하겠다 라고 지정

# EM을 시작시킨다.
$ emctl start dbconsole

--명령어 3개가 있다.
emctl start dbconsole # em 시작
emctl stop dbconsole # em 정지
emctl status dbconsole # em 상태확인

💡 dba를 위한 tip!

em은 첫 화면에서 서버가 느린 이유가 os의 어떤 다른 프로그램 때문에 느린건지, db의 악성 sql이 있어서 느린건지 한눈에 알려주기 때문에 처음에 DB의 문제점을 진단할 때 아주 유용하다.

sqlplus에서 sql 스크립트 호출하기


실습1. sys 유저로 접속해서 hr 계정의 락을 해제한다.

SQL> alter user hr account unlock;

실습2. hr계정의 패스워드를 hr로 변경하기

SQL> alter user hr identified by hr;

실습3. 다음의 내용으로 script.sql을 생성합니다.

ed script.sql

select * from departments where location_id=1400;
quit;

SQL> @script.sql

실습4. hr계정으로 접속하면서 바로 script.sql이 수행되게 하시오

$sqlplus hr/hr @script.sql 

✅ 접속 명령어 다음에 한칸 떼고 @script.sql을 수행합니다.

💡 dba를 위한 tip!

내가 접속한 세션에 대한 정보를 접속하면서 바로 확인할 때 위의 접속방법을 이용하면 내가 접속한 세션의 정보를 바로 확인할 수 있다.
✔️ 아래의 SQL을 my.sql이라는 이름으로 저장하기

ed my.sql

select s.username, s.sid, s.serial#, p.spid
  from v$session s, v$process p
  where s.paddr = p.addr
  and s.sid in (select distinct sid from v$mystat);
  
@my.sql

✔️ 오라클에 접속할 때 위 스크립트를 수행할 수 있도록 db 모든 유저에게
v$session, v$process, v$mystat를 조회할 수 있는 권한 부여하기

SQL> connect / as sysdba 혹은 scott에서도 가능
grant select any dictionary to public;
SQL> revoke select any dictionary from public; --이거 잘못했음 퍼블릭이면 다빼는거
-- 다른창(푸티)에서 startup force로 디비 내렸다 올렸다. 근데 원래는 이명령어 사용한 거 찾아서 kill 시킨다. 
-- 유저마다 골라서 권한을 빼야한다! 
-- 그리고 퍼블릭으로 주지않고 이렇게 아래처럼 하나씩 준다. 
SQL> grant select on v_$session to public;
SQL> grant select on v_$process to public;
SQL> grant select on v_$mystat to public;


문제. 아래의 스크립트를 my.sql로 저장하고 오라클에 hr로 접속할 때 바로 실행되게 하세요

[orcl:~]$ sqlplus hr/hr @my.sql

✅ 개발자에게 개발자 자신의 sid, serial#, spid를 dba에게 알려달라고 할 때 유용하다.


얘는 참고만 우리이미 사용중이다.


초기화 파라미터 파일

💡 초기화 파라미터는 오라클 인스턴스의 구조 정보와 오라클 관련 각종 환경 셋팅 정보가 들어있는 파일입니다. db를 startup 할 때 parameter file이 읽혀져서 인스턴스가 구성이 된다.

파라미터 파일의 종류가 두가지?
1. spfile : binary file <- 직접 파일을 열어서 볼 수 없다.

parameter file 안에 내용을 수정해야 한다면, alter system 명령어로 수정
  1. pfile : test file <- 직접 파일을 열어서 볼 수 있다.
parameter file 안에 내용을 수정해야 한다면, vi 편집기 명령어로 수정

✅ 당장 관리하기에는 text file인 pfile이 편하지만 나중을 생각하면 spfile로 관리하는것이 훨씬 편하다.

🤔 파라미터 파일을 dba가 알아야 하는 이유?
현업예시) data가 많이 늘어나서 data file을 더 많이 생성해야하는데, database에서 생성할 수 있는 data file의 갯수가 200개가 기본값이다. 200은 아주 작은 숫자이고, 웬만한 우리나라 회사들은 전부 200개가 다 넘어간다. 그래서 이 숫자를 5000개로 변경해야하는데 그러려면 db_files의 파라미터 값을 조정해줘야 한다. (최소 2000개는 해야 현업에서 사용가능)

SQL> show parameter db_files;

실습1. 파라미터 파일이 pfile로 관리되는지 spfile로 관리되고있는지 확인하기

SQL> show parameter spfile;


✅ 값이 보이면 spfile로 관리되고 있는 것 !

실습2. 기존 spfile을 pfile로 생성해서 백업을 하기 !

SQL> create pfile from spfile;
SQL> exit;
$ cd $ORACLE_HOME/dbs
$ ls
$ vi initorcl.ora



✅ 위의 내용에서 설정한 파라미터가 없다면 그 파라미터는 default값으로 설정되어 있는 것입니다!
예를 들어 아까 200개..여서 늘려야 한다고 했던 db_files는 안나온다. 기본값이라서!

실습3. db_files 파라미터 값을 2000개로 늘리고 인스턴스에 반영되게 하기

SQL> alter system set db_files=2000 scope=spfile;

✅ 이 명령어는 파라미터 파일에서만 변경되었고 인스턴스에 반영된 것은 아니다.

SQL> show parameter db_files # <- 현재 인스턴스에 반영된 db_files값을 확인할 수 있다. 

SQL> shutdown immediate
SQL> startup
SQL> show parameter db_files # 디비 내렸다 올려도 아직 200개이다.

✅ 반영이 안되고 계속 200개인 이유는, 우리가 아까 spfile의 내용을 변경하고 db를 올렸는데, 이전에 pfile을 생성한적이 있어서 오라클이 pfile로 인스턴스를 올렸다. spfile에는 db_files가 2000으로 되어있고 pfile에는 200으로 되어있다. 그런데 지금 오라클이 spfile로 인스턴스를 구성한게 아니라 pfile로 인스턴스를 구성했다. 확인하는 방법은 다음과 같다.

SQL> show parameter spfile;

SQL> shutdown immediate 
# spfile로 db가 올라갈 수 있도록 하기
SQL> startup pfile='+DATA/orcl/spfileorcl.ora'
SQL> show parameter spfile;
SQL> show parameter db_files

📌 맨처음에 파라미터 파일 관리 시작할 때 아래 작업을 하지 않았어서 실행했다 !
제일 처음에 파라미터 파일 관리를 시작할 때, spfile이 ASM쪽에 있다면 리눅스의 $ORACLE_HOME/dbs 에서 spfile을 새로 만들고 관리하게 해줘야한다. (asm스토리지에 spfile이 있다면 관리하기가 불편하다) 그 명령어는 아래와 같다 !

# 위치가 어딘지 확인하기
SQL> show parameter spfile
# +DATA/orcl/spfileorcl.ora 여기있다면

# spfile로 pfile을 생성하는데 $ORACLE_HOME/dbs에 initorcl.ora로 생성됩니다. 
SQL> create pfile from spfile;

# $ORACLE_HOME/dbs밑에 pfile로 spfile을 생성하는데 $ORACLE_HOME/dbs에 생성되게 합니다. 
SQL> create spfile from pfile;
# File created.
----여기 아래는 디비 내리고 했음

SQL> startup
ORACLE instance started.

Total System Global Area  481259520 bytes
Fixed Size                  1337352 bytes
Variable Size             343934968 bytes
Database Buffers          130023424 bytes
Redo Buffers                5963776 bytes
Database mounted.
Database opened.

SQL> show parameter spfile;


위와같이 pfile, spfile이 두개가 있는 상태에서 오라클을 내렸다 올리면, 오라클은 무조건 spfile을 먼저 읽는다. 아래처럼 두개가 같이있어야 한다. 백업용을 항상 두기 !!

[orcl:~]$ cd $ORACLE_HOME/dbs
[orcl:dbs]$ ls -lrt
-rw-r----- 1 oracle oinstall  907  9월 11 15:15 initorcl.ora --백업용
-rw-r----- 1 oracle dba      2560  9월 11 16:01 spfileorcl.ora --운영시 사용하는 파라미터

문제 $ORACLE_HOME/dbs 밑에 spfileorcl.ora 파일을 rm으로 지우세요!

[orcl:dbs]$ rm spfileorcl.ora #pfile만 있다.

SQL> show parameter spfile

이제 이상태에서 db를 내렸다올리면 spfile이 없고 pfile 밖에 없으니까, pfile로 인스턴스를 구성했는지 확인해보기

이렇게 아무것도 안나오면 pfile로 올라온것이다! spfile 날렸으니까!!

문제 다시 기존 pfile로 spfile 을 생성하고, 생성되었는지 확인해보기

SQL> create spfile from pfile;


다시 생겼다. 안나가고 SQL> 에서 !ls -rlt라고 하면 된다고 하셨는데 나는 안보여서 푸티로 확인했다.

문제 다시 디비를 내렸다 올리면 spfile 로 인스턴스가 구성되는지 pfile로 인스턴스가 구성되는지 확인하시오

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  481259520 bytes
Fixed Size                  1337352 bytes
Variable Size             343934968 bytes
Database Buffers          130023424 bytes
Redo Buffers                5963776 bytes
Database mounted.
Database opened.
SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/11.2.0
                                                 /dbhome_1/dbs/spfileorcl.ora

scope의 범위지정

alter system set db_files=3000 scope=옵션;
  1. scope=spfile : spfile에만 적용하겠다. (db내렸다 올려야 적용이 된다)
  2. scope=memory : 인스턴스에 바로 적용하겠다. (spfile의 내용은 변경되지 않고, 메모리에만 적용)
  3. scoope=both : 둘다 적용하겠다. 현재 인스턴스와 spfile이 바로 변경된다.

문제 현재 인스턴스에 반영된 db_files의 값을 확인

SQL> show parameter db_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_files                             integer     200

문제 db_files의 값을 3000개로 변경하는데, scope=memory를 써서 현재 인스턴스에 바로 반영되는지 확인하기

alter system set db_files=3000 scope=memory;


✅ 이 파라미터는 spfile에만 반영되고 메모리에 즉시 반영되지 않는 파라미터이다. 즉시 반영되는 파라미터는 어떤것이고 즉시 반영되지 않고 spfile 에만 반영되는 파라미터는 무엇인지 확인하는 방법은 무엇인가??

select name, issys_modifiable
  from v$parameter 
  where name='db_files';


위처럼 issys_modifiable가 FALSE라면 즉시 반영되지 않고, spfile에만 반영되어서 db를 내렸다 올려야지만 반영되는 것이다. 만약 true면 즉시 인스턴스에 반영되는 파라미터 이다.

alter system set db_files=3000 scope=spfile;


⭐ spfilfe의 내용을 변경하려면 무조건 디비 내렸다 올려야한다.

문제 오라클 파라미터중에 중요한 파라미터가 있다. -> processes입니다. 이 파라미터는 오라클에서 생성할 수 있는 프로세서의 갯수를 결정하는 파라미터다! 이 파라미터의 값을 확인하고 두배로 늘리기!

SQL> show parameter processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     0
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     4
processes                            integer     150 # 얘!
select name, issys_modifiable
  from v$parameter 
  where name='processes';

alter system set processes=300 scope=spfile;

문제 현재 spfile을 pfiile로 백업받기

SQL> create pfile from spfile;

문제 현재 spfile의 내용을 확인하기

SQL> select name, value from v$spparameter;

select name, value 
  from v$spparameter
  where value is not null;

문제 현재 pfile의 내용을 확인하기

select name, value 
  from v$parameter
  where value is not null;

💡 spfile, pfile의 내용이 동일해야하는데 갯수가 다르다. 디폴트값이 spfile에 안나와서 달라보임 바꾼 파라미터가 있나 보자

select name, value 
  from v$spparameter
  where value is not null and name='db_files';
  
select name, value 
  from v$parameter
  where value is not null and name='db_files';


두개 에서 다 db_files가 3000이면 된다!

💡 dba를 위한 tip!

처음에 db 설치하고 나서 반드시 변경해줘야 하는 파라미터가 있는데, 오늘 배운것으로는 다음 4가지 입니다.
1. db_files
2. processes
3. memory_max_target -> 500mb로 늘리기
4. memory_target -> 500mb로 늘리기

오늘의 마지막 문제 memory_max_target,memory_target 를 순서대로 500MB로 늘리기

show parameter memory_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_target                        big integer 460M

show parameter memory
# 아래 두개 
memory_max_target                    big integer 460M
memory_target                        big integer 460M

  1. 현재 몇MB인지 확인
SQL> show parameter memory_max_target
  1. spfile인지 아닌지 확인
select name, issys_modifiable
  from v$parameter 
  where name='memory_max_target';

NAME                 ISSYS_MOD
-------------------- ---------
memory_max_target    FALSE #false니까 db올렸다 내려야 하는 spfile!
  1. 변경한후에 db내렸다가 올리기. 그리고 확인
alter system set memory_max_target=500M scope=spfile;
shutdown immediate
startup
show parameter memory_max_target

  1. 현재 몇MB인지 확인
show parameter memory_target
  1. spfile인지 아닌지 확인
select name, issys_modifiable
  from v$parameter 
  where name='memory_target';

  1. 변경한후에 db내렸다가 올리기. 그리고 확인
alter system set memory_target=500M scope=memory;
alter system set memory_target=500M scope=both;
# 위 두개는 디비 내렸다가 올리니까 다시 460M가 되어있었다. 
alter system set memory_target=500M scope=spfile;

SQL> show parameter memory


4. spfile로 pfile 백업받기

create pfile from spfile;

🚨 위 문제 풀면서 주의사항 !!! 🚨

alter system set memory_max_target=500 scope=spfile;

M을 붙여주지 않으면 그냥 바이트다 ! 내가 지금 바꾼건 500 바이트로 바꾼거라서 변경하고 디비 내리니까 memory_target는 메가라서 디비가 안올라왔다. MEMORY_TARGET 값을 MEMORY_MAX_TARGET보다 작게 설정해야함
해결방법은

SQL> exit --나가서
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
[orcl:~]$ cd $ORACLE_HOME/dbs
[orcl:dbs]$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.1.0 Production on Mon Sep 11 17:02:44 2023

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> !ls -rlt
합계 36
-rw-r--r-- 1 oracle oinstall 2851  5월 15  2009 init.ora
drwx------ 2 oracle oinstall 4096 10월 16  2012 peshm_DBUA0_0
-rw-rw---- 1 oracle oinstall 1544 10월 16  2012 hc_DBUA0.dat
drwx------ 2 oracle dba      4096 10월 16  2012 peshm_orcl_0
-rw-r----- 1 oracle dba        24 10월 16  2012 lkORCL
-rw-rw---- 1 oracle dba      1544 10월 16  2012 hc_orcl.dat
-rw-r----- 1 oracle oinstall 1536  9월 11 14:08 orapworcl
-rw-r----- 1 oracle oinstall  921  9월 11 16:37 initorcl.ora
-- ↑ 500 이라고 변경하기 전의 pfile
-rw-r----- 1 oracle dba      2560  9월 11 16:55 spfileorcl.ora 
-- ↑ 500 이라고 변경후의 spfile

SQL> create spfile from pfile; # pfile내용으로 spfile을 새로 만든다! (백업)

File created.

SQL> startup
ORACLE instance started.

Total System Global Area  481259520 bytes
Fixed Size                  1337352 bytes
Variable Size             452986872 bytes
Database Buffers           20971520 bytes
Redo Buffers                5963776 bytes
Database mounted.
Database opened.
SQL>
SQL> show parameter memory_max

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
memory_max_target                    big integer 460M
# 다시 460M로 바뀌어져 있는것을 확인할 수 있다.

그리고 내가 SQL> !ls -rlt가 바로 안되었던 이유는, home/oracle에서 sysdba로 SQL접속해서 그런듯. 위코드 보면 이렇게 해서 접속하니까 !ls -rlt가 보인다.

[orcl:~]$ cd $ORACLE_HOME/dbs
[orcl:dbs]$ sqlplus "/as sysdba"
profile
Slow and steady wins the race.

0개의 댓글