12c Oracle基礎

第01課-Oracle數據庫介紹

文檔位置: Concepts->11.1 Introduction to Physical Storage Structures

什麼是 Oracle 數據庫
1.1 Oracle 介紹
網址,下載
docs.oracle.com

查看系統版本:
[oracle@ouzy ~]$ lsb_release -id
Distributor ID: CentOS
Description: CentOS Linux release 7.6.1810 (Core)

檢查啓動情況
lsnrctl status 查看狀態
lsnrctl start 啓動監聽

sqlplus / as sysdba
SQL> startup 手動啓動數據庫
SQL> select status from v$instance; 查看實例狀態

1.2 Oracle 數據庫
oracle 數據庫是永久存儲在磁盤上的一系列文件的集合,包括:
所在路徑:/u01/app/oracle/oradata/prod
 數據文件
 臨時文件
 控制文件
 Redo 日誌文件,聯機重做日誌文件。
 Undo 文件
https://192.168.230.100:5500/em
在這裏插入圖片描述
1.3 Oracle 實例
oracle 實例是一組內存的集合,用來管理數據庫文件
https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/physical-storage-structures.html#GUID-56DFECE5-FB81-494F-9AB8-25F120A1BDDC
在這裏插入圖片描述

第02課-配置Linux系統參數

下載Oracle軟件:
使用 cksum 檢驗是否損壞
2.1檢查硬件環境:
內存需求
查看:free、cat /proc/meminfo
grep MemTotal /proc/meminfo
grep SwapTotal /proc/meminfo

[root@ouzy ~]# free
              total        used        free      shared  buff/cache   available
Mem:        2895444      821764     1279052       18960      794628     1963788
Swap:       4194300           0     4194300

2.2自動存儲管理(AMM, Automatic Memory Management)
AMM 需要共享內存和文件描述符。
/dev/shm 的值要比 MEMORY_MAX_TARGET 和 MEMORY_TARGET 大。
查看共享內存大小: df -h /dev/shm/
增加共享內存大小:(一般比物理內存小一點)
cat /etc/fstab
mount -o remount /dev/shm
在這裏插入圖片描述
2.3系統架構(看是32位還是64位,以便安裝對應軟件)
uname –m

2.4檢查軟件環境:(版本)
操作系統要求
cat /etc/redhat-release 或 lsb_release –id
CentOS 7.3(本視頻使用)

2.5安裝包需求
等到安裝的時候再檢查

2.6創建用戶和組
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle

2.7配置內核參數
touch /etc/sysctl.d/97-oracledatabase-sysctl.conf

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152(物理內存*90%/4096)
kernel.shmmax = 536870912(物理內存*90%)
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

sysctl --system(立即生效)
sysctl -a|grep shmmax
sysctl -a|grep shmall

2.8 配置資源限制
/etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 3145728
oracle hard stack 3145728

2.9創建目錄

mkdir -p /u01/app/oracle/product/12.2.0.1/db_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01

2.10設置環境變量

export ORACLE_SID=prod
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/db_1
export PATH=$PATH:$ORACLE_HOME/bin

2.11修改/etc/hosts 文件
在文件最後添加如下設置:
192.168.230.100 ouzy ouzy

2.12關閉 selinux
/etc/selinux/config
SELINUX=disabled

關閉防火牆
systemctl stop firewalld.service
systemctl disable firewalld.service

1.13關閉透明大頁
cat /sys/kernel/mm/transparent_hugepage/enabled
[always]代表啓用
[never]代表禁用
vi /etc/default/grub
GRUB_CMDLINE_LINUX=“crashkernel=auto rhgb quiet
transparent_hugepage=never”

重新加載:grub2-mkconfig -o /boot/grub2/grub.cfg

重啓系統
cat /proc/cmdline
在這裏插入圖片描述

第03課-虛擬機環境說明

Root:Oracle123
oracle 密碼:Oracle123
sys 密碼:Oracle123
虛擬機 IP:192.168.230.100

第04課-Linux系統上安裝Oracle12c

執行/database目錄下的runInstaller
./runInstaller

第05課-使用DBCA安裝數據庫使用 DBCA 安裝數據庫

1 使用 netca 創建監聽器
在這裏插入圖片描述

2 使用 dbca 創建數據庫
在這裏插入圖片描述
安裝完數據庫取消密碼過期問題:
alter profile default limit password_life_time unlimited;
alter profile default limit failed_login_attempts unlimited;

取消段延遲特性:
alter system set deferred_segment_creation=false scope=both;

設置大小寫忽略(12c 已經廢棄這個參數,但是兼容):
alter system set sec_case_sensitive_logon=false scope=both;
注意事項:12c不設置大小寫忽略,否則導致普通用戶無法登陸。

第06課-實例和監聽的啓動關閉

6.1 實例的啓動關閉
sqlplus / as sysdba
startup 啓動
shutdown immediate 乾淨關閉
select status from v$instance 查看實例狀態

6.2 監聽啓動關閉
lsnrctl status 查看狀態
lsnrctl start 啓動監聽
lsnrctl stop 關閉監聽
alter system register; 手工註冊監聽(sqlplus下執行)

注意:
如果監聽關閉了,原有已經連接的客戶端不會斷開。

第07課-EM Express的啓動關閉

EM Express 的啓動關閉
在 Oracle 12c 的版本中,引入了簡化的 EM 版本,這一版本被稱爲:
EM Database Express 12c。 Express 版本的 EM 對之前的 EM 做出了大
量的簡化,使之更加輕量級。12c 不再支持 database control。
在這裏插入圖片描述
1 EM Express 啓動關閉
企業管理器 Enterprise Manager Database Express(Oracle 12c)
使用 EM Express:

打開 em:
exec dbms_xdb_config.sethttpsport(5500); – https
exec dbms_xdb_config.sethttpport(5505); – http

關閉 em:
exec dbms_xdb_config.sethttpsport(0); – https
exec dbms_xdb_config.sethttpport(0); – http

查看 em 端口:
select dbms_xdb_config.gethttpsport from dual; – https
select dbms_xdb_config.gethttpport from dual; – http

使用瀏覽器連接到 EMS Express:
https://192.168.230.100:5500/em
http://192.168.230.100:5505/em

第08-10課-參數文件spfile和pfile

參數文件 spfile 和 pfile
文檔位置: Concepts->13.5 Overview of Parameter Files
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cncpt/oracle-database-instance.html#GUID-2F760754-174C-4A30-800C-8A147561B64C

當啓動一個數據庫實例的時候,oracle 會讀取服務器參數文件(server
parameter file,spfile,二進制文件)或者文本初始化參數文件(text
initialization parameter file,pfile,文本文件)。
位置:/u01/app/oracle/product/12.2.0.1/db_1/dbs

初始化參數分爲 2 類:基本參數和高級參數。
Xxx=xxx

調整大約 30 個基本參數就可以獲得很好的性能。
基本參數例如:
CONTROL_FILES
DB_BLOCK_SIZE
DB_NAME
UNDO_TABLESPACE

服務器參數文件也叫做spfile,此文件只有1個,且存在於數據庫服務器
上。Spfile 只能被數據庫服務器讀取,而不能被客戶端讀取。Spfile 是
一個二進制文件,不能被文本編輯器編輯。
文本初始化參數文件也叫做 pfile,是基於文本的,可以被文本編輯器編
輯。Vi,gedit
在這裏插入圖片描述
8.1 參數文件命名規則
spfile 命名規則:spfileSID.ora
pfile 命名規則:initSID.ora
位置:
ORACLE_HOME/dbs (Linux)
ORACLE_HOME/database (windows)

舉例,修改操作系統最大進程數:alter system set processes=500 scope=spfile;
shutdown immediate
startup (重啓)
[oracle@ouzy dbs]$ strings spfileprod.ora (查看文件spfile,路徑:/u01/app/oracle/product/12.2.0.1/db_1/dbs)

8.2 修改參數:
參數有靜態和動態之分,動態參數又分爲:會話級別參數和系統級別參數,靜態
的參數修改需要重啓實例生效。
會話級別參數:影響當前用戶會話。(NLS_DATE_FORMAT)
系統級別參數:影響數據庫和所有用戶會話。(MEMORY_TARGET)
Alter system set key=value scope=memory|spfile|both(默認模式)
alter session set nls_date_format = ‘yyyy-mm-dd hh24:mi:ss’;

2.1 動態參數:
undo_retention
open_cursors
vparameter.issysmodifiable=IMMEDIATEselectfromvparameter.issys_modifiable='IMMEDIATE' (select * from vparameter t where t.NAME=‘open_cursors’)

2.2 靜態參數:
processes
db_unique_name
control_files
v$parameter.issys_modifiable=‘FALSE’

2.3 spfile 和 和 pfile 相互創建
create spfile from pfile;
create pfile from spfile;
create pfile=’/u01/p.ora’ from spfile;

2.4 參數文件啓動順序
1.spfileORACLE_SID.ora
2.spfile.ora
3.initORACLE_SID.ora

實驗:
a.將spfile更名
mv spfileprod.ora spfile.ora
show parameter spfile;
SQL> shutdown immediate
rm spfile.ora (SQL> shutimmdiate )
show parameter spfile; (startup後)
show parameter pfile;
在這裏插入圖片描述
在這裏插入圖片描述
b.將pfile更名
mv initprod.ora x.ora
SQL> shutdown immediate
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file ‘/u01/app/oracle/product/12.2.0.1/db_1/dbs/initprod.ora’

startup pfile=/u01/app/oracle/product/12.2.0.1/db_1/dbs/x.ora

SQL> alter system set open_cursors=800 scope=spfile;
[oracle@ouzy dbs]$ strings p.ora (查看是否已修改)
在這裏插入圖片描述
c.將pfile文件情況,並內容指向fpfile
cat /dev/null > initprod.ora
vi initprod.ora

spfile=/u01/app/oracle/product/12.2.0.1/db_1/dbs/p.ora

mv spfileprod.ora p.ora

SQL> shutdown immediate
SQL> startup
SQL> show parameter spfile;
在這裏插入圖片描述
在這裏插入圖片描述

第11-12課-控制文件Controlfile

Oracle 控制文件
文檔位置: Concepts->11.3 Overview of Control Files
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cncpt/physical-storage-structures.html#GUID-90EAC9F2-B396-4C59-9821-B03BF7B6BCD0
控制文件是一個很小的二進制文件,用於記錄數據庫的物理結構。
一個控制文件只屬於一個數據庫。當數據庫的物理結構改變的時候,
Oracle 會更新控制文件(例如增加文件)。用戶不能編輯控制文件,控
制文件的修改由 Oracle 完成。
SQL> show parameter control
cd /u01/app/oracle/oradata/prod
strings control01.ctl

控制文件包含了如下信息:
 數據庫名字
 數據庫創建的時間戳
 數據文件、重做日誌、歸檔日誌位置
 表空間信息
 RMAN 備份信息

控制文件作用:
1.控制文件含有數據文件,redo 日誌文件等位置信息,數據庫打開會用
到這個信息。當數據庫增加、重命名、刪除了文件,會更新控制文件。
2.包含一些元數據,在數據庫未 open 之前。
控制文件裏面包含有檢查點 checkpoint 信息,當數據庫需要恢復時需
要這個信息。每3秒鐘檢查點進程 CKPT 會記錄檢查點到控制文件。

多份控制文件:
至少有 1 份,一般都是 2 份以上.完全相同的。同時打開。
可以避免單點故障。
控制文件在多個磁盤的放置。

控制文件結構:
由 section 組成,每個 section 由多個記錄 record 組成。
alter session set events ‘immediate trace name controlf level 3’;
select * from v$diag_info;
在這裏插入圖片描述
2 種類型的記錄:
循環重用記錄:
這些記錄包含可以被覆蓋的非關鍵信息。當所有可用的記錄槽用完
時,數據庫需要擴展控制文件或覆蓋最舊的記錄,以便爲新記錄騰出
空間。循環重用記錄可以刪除,並且不會影響數據庫運行,如:RMAN
備份記錄,歸檔日誌歷史信息等信息。

非循環重用記錄:
這些記錄包含不經常更改且不能被覆蓋的關鍵信息。包括表空間、
數據文件、聯機重做日誌文件、redo 線程。oracle 數據庫絕不會重用
這些記錄,除非從表空間中刪除相應的對象。

相關視圖和參數:
SQL> show parameter control
CONTROL_FILE_RECORD_KEEP_TIME

v$controlfile(    select * from v$controlfile;)
v$controlfile_record_section(    select * from v$controlfile_record_section;)

在這裏插入圖片描述
增加控制文件實驗:
增加/刪除一個控制文件
alter system set control_files=file1,file2 scope=spfile
shutdown immediate
cp control01.ctl control03.ctl
startup
pfile->spfile

方式1 :
SQL> alter system set control_files=’/u01/app/oracle/oradata/prod/control01.ctl’,’/u01/app/oracle/oradata/prod/control02.ctl’,’/u01/app/oracle/oradata/prod/control03.ctl’ scope=spfile;

關機後複製: [oracle@ouzy prod]$ cp control01.ctl control03.ctl (/u01/app/oracle/oradata/prod)
然後重啓
在這裏插入圖片描述
在這裏插入圖片描述
方式 2:
SQL> create pfile from spfile;
[oracle@ouzy dbs]$ vi initprod.ora (/u01/app/oracle/product/12.2.0.1/db_1/dbs)
SQL> shutdown immediate
SQL> create spfile from pfile;
SQL> startup
SQL> show parameter control
在這裏插入圖片描述
在這裏插入圖片描述
清理控制文件中的記錄:
alter system switch logfile;(切換日誌,將產生記錄存在vloghistoryselectfromvlog_history表中) select * from vlog_history;
1.通過重建控制文件或設置 control_file_record_keep_time=0。

2.使用 execute sys.dbms_backup_restore.resetCfileSection 清理。
清理 v$log_history 對應的記錄:
execute sys.dbms_backup_restore.resetCfileSection(9);

清理 v$archived_log 對應的記錄:
execute sys.dbms_backup_restore.resetCfileSection(11);

清理 v$rman_status 對應的記錄:
execute sys.dbms_backup_restore.resetCfileSection(28);

清理 rman 備份信息:
execute sys.dbms_backup_restore.resetCfileSection(12);

第13-14課-常用工具-SQLPlus和PLSQLDeveloper

Oracle 常用工具的使用:
sqlplus 命令行工具
PLSQL Developer 開發人員使用
sqldeveloper oracle 的工具,比較少
Toad DBA,管理多

1 sqlplus (服務器上登陸)
sqlplus / as sysdba
sqlplus hr/hr (創建的用戶)(12c不能設置密碼大小寫忽略)
創建:create user hr identified by hr;
授權:grant connect,resource to hr;
授權:alter user hr quota unlimited on users;(給用戶添加表空間的權限)
sqlplus hr/[email protected]:1521/prod
sqlplus system/[email protected]:1521/prod
sqlplus sys/[email protected]:1521/prod as sysdba
sqlplus sys/[email protected]:1521/prod as sysoper
grant sysdba to hr;
sqlplus hr/[email protected]:1521/prod as sysdba

2 PLSQL Developer
設置保存密碼:
【工具】-【首選項】
在這裏插入圖片描述
連接 Oracle:
在這裏插入圖片描述
$ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION=8
原因:客戶端版本不是 12c
設置字體:
在這裏插入圖片描述
設置美化器規則文件:
在這裏插入圖片描述
代碼註釋:
1.–
2./* */

第15課-常用工具-sqldeveloper和Toad

Oracle 常用工具的使用:
sqlplus 命令行工具
PLSQL Developer 開發人員使用
sqldeveloper oracle 的工具,使用比較少
Toad DBA,管理多
1 sqldeveloper
在這裏插入圖片描述
在這裏插入圖片描述
2 Toad
在這裏插入圖片描述
表空間查詢:
在這裏插入圖片描述

第16-17課-實例instance

Oracle 實例
文檔位置: Concepts->13 Oracle Database Instance
1 什麼是實例 instance:
A database instance is a set of memory structures that manage
database files.
Oracle 實例(instance)是一塊內存區域,當實例啓動的時候,會分配一個叫做
SGA(System Global Area)的內存區域和啓動若干後臺進程,也就是 實例=SGA+後臺
進程。

實例可以單獨啓動。
在這裏插入圖片描述
Process monitor
System monitor
Database write
Log write
checkpoint

實驗:實例可以單獨啓動
[oracle@ouzy ~]$ echo ORACLESID[oracle@ouzy ]ORACLE_SID(查看當前環境變量的實例) [oracle@ouzy ~] export ORACLE_SID=orcl(指定環境變量實例)
[oracle@ouzy ~]$ sqlplus / as sysdba
SQL> startup nomount(啓動到nomount狀態,可看出無法找到spfile/pfile文件)

ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/12.2.0.1/db_1/dbs/initorcl.ora'

[oracle@ouzy ~]$ cd ORACLEHOME/dbs[oracle@ouzydbs]ORACLE_HOME/dbs [oracle@ouzy dbs] touch initorcl.ora(在ORACLEHOME/dbspfile[oracle@ouzydbs]ORACLE_HOME/dbs路徑下,手動創建pfile文件) [oracle@ouzy dbs] vi initorcl.ora (內容爲:db_name=orcl)
在這裏插入圖片描述
[oracle@ouzy dbs]$ sqlplus / as sysdba
SQL> startup nomount

ORACLE instance started.

Total System Global Area  268435456 bytes
Fixed Size		    8619496 bytes
Variable Size		  201329176 bytes
Database Buffers	   50331648 bytes
Redo Buffers		    8155136 bytes

SQL> show parameter spfile;

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
spfile				     string

[oracle@ouzy ~]$ ps -ef|grep ora_

oracle    22013      1  0 09:38 ?        00:00:00 ora_pmon_orcl
oracle    22015      1  0 09:38 ?        00:00:00 ora_clmn_orcl
oracle    22017      1  0 09:38 ?        00:00:00 ora_psp0_orcl
oracle    22020      1  6 09:38 ?        00:00:04 ora_vktm_orcl
oracle    22024      1  0 09:38 ?        00:00:00 ora_gen0_orcl
oracle    22026      1  0 09:38 ?        00:00:00 ora_mman_orcl
oracle    22030      1  0 09:38 ?        00:00:00 ora_gen1_orcl
oracle    22034      1  0 09:38 ?        00:00:00 ora_diag_orcl
oracle    22036      1  0 09:38 ?        00:00:00 ora_ofsd_orcl
oracle    22040      1  0 09:38 ?        00:00:00 ora_dbrm_orcl
oracle    22042      1  0 09:38 ?        00:00:00 ora_vkrm_orcl
oracle    22044      1  0 09:38 ?        00:00:00 ora_svcb_orcl
oracle    22047      1  0 09:38 ?        00:00:00 ora_pman_orcl
oracle    22049      1  0 09:38 ?        00:00:00 ora_dia0_orcl
oracle    22057      1  0 09:38 ?        00:00:00 ora_dbw0_orcl
oracle    22060      1  0 09:38 ?        00:00:00 ora_lgwr_orcl
oracle    22062      1  0 09:38 ?        00:00:00 ora_ckpt_orcl
oracle    22064      1  0 09:38 ?        00:00:00 ora_lg00_orcl
oracle    22066      1  0 09:38 ?        00:00:00 ora_smon_orcl
oracle    22068      1  0 09:38 ?        00:00:00 ora_lg01_orcl
oracle    22070      1  0 09:38 ?        00:00:00 ora_smco_orcl
oracle    22072      1  0 09:38 ?        00:00:00 ora_reco_orcl
oracle    22074      1  0 09:38 ?        00:00:00 ora_w000_orcl
oracle    22076      1  0 09:38 ?        00:00:00 ora_lreg_orcl
oracle    22078      1  0 09:38 ?        00:00:00 ora_w001_orcl
oracle    22080      1  0 09:38 ?        00:00:00 ora_pxmn_orcl
oracle    22084      1  0 09:38 ?        00:00:00 ora_mmon_orcl
oracle    22086      1  0 09:38 ?        00:00:00 ora_mmnl_orcl
oracle    22088      1  0 09:38 ?        00:00:00 ora_tmon_orcl
oracle    22362  22268  0 09:39 pts/1    00:00:00 grep --color=auto ora_

SGA 用途有很多,例如:

  1. 維護內部數據結構
  2. 緩存磁盤的數據
  3. 緩存 redo 數據
  4. 存儲 SQL 執行計劃

2 SGA 組成部分
Database Buffer Cache
In-Memory Area
Redo Log Buffer
Shared Pool
Large Pool
Java Pool
Streams Pool
Fixed SGA

database buffer
redo log buffer
shared pool 共享池
large pool 大池
java pool java 池
stream pool 流池
fixed sga

shared pool 共享池組成:
① library cache 庫緩衝
② data dictionary cache 數據字典緩衝

3 相關視圖:
vinstancegvinstance gvinstance
vsgainfo,vsgainfo,vsgastat

4 後臺進程
後臺進程包括:PMON,SMON,DBWn,LGWR,CKPT 等。
可查詢相關視圖:vprocess,vprocess,vbgprocess

5 單實例和 RAC
RAC: real application cluster 實時應用集羣,真正應用集羣
在這裏插入圖片描述
單實例:1 對 1
RAC:1 對多
一臺服務可以存在多個實例。

第18課-靜態數據字典

Oracle 系統視圖分兩類:
 靜態數據字典
 動態性能視圖

文檔位置: Reference->2.1 About Static Data Dictionary Views
靜態數據字典中的視圖分爲三類,它們分別由三個前綴夠成:
 user_
 all_

 dba_*

查詢所有的數據字典視圖: DICTIONARY
select * from dictionary t;
SQL> revoke sysdba from hr1;(收回dba權限)
user_:該視圖存儲了關於當前用戶所擁有的對象的信息。
all_
:該視圖存儲了當前用戶能夠訪問的對象的信息。
dba_*:該視圖存儲了數據庫中所有對象的信息。
一個用戶可以查詢所有數據字典:授權 SELECT ANY DICTIONARY 權限
SQL> grant select any dictionary to hr1;(授權any dictionary)
在這裏插入圖片描述
例如:dba_tables,all_tables,user_tables

create user zy1 identified by zy1 ;
grant connect,resource to zy1 ;

create user zy2 identified by zy2 ;
grant connect,resource to zy2 ;

alter user zy1 quota unlimited on users;(創建使用表空間的權限)
alter user zy2 quota unlimited on users;

 drop table tbs01;
create table tbs01(name varchar2(100));(登陸zy1後創建tbs01)
grant select on zy1.tbs01 to zy2 ;(登陸sys授權)

第19-20課-動態性能視圖(重點)

Oracle 系統視圖分兩類:
 靜態數據字典(User_,all_,dba_)
 動態性能視圖(V$)

文檔位置: Reference->7.1 About Dynamic Performance Views
動態性能視圖: 當數據庫運行的時候它們會不斷進行更新,一般
以 v,v開頭,例如 vsga,vsgainfo,vsgainfo,vinstance,v$session

select * from v$sga;
select * from v$sgainfo;
select * from v$instance;
select * from v$session;

要求數據庫處於 mount 或者 open 狀態。
http://docs.oracle.com 文檔

所有視圖:
select * from dictionary;
select * from dict;

v:gv開頭:本地實例動態性能視圖 gv開頭:全局動態性能視圖(RAC 環境下)
例子:vinstance,gvinstance,gvinstance

常用視圖:

v$version 數據庫版本
select * from v$version;

v$database 數據庫信息
select * from v$database;

v$instance 實例信息
select * from v$instance;

v$session 會話信息
select * from v$session;
結束會話進程:SQL> alter system kill session '414,43296';

v$tablespace,dba_tablespaces 表空間
select * from v$tablespace;  
select * from dba_tablespaces;

v$datafile,v$dbfile,dba_data_files 數據文件(不含臨時文件)
select * from v$datafile; 
 select * from v$dbfile; 
 select * from dba_data_files;

v$tempfile, dba_temp_files 臨時文件
select * from v$tempfile; 
select * from dba_temp_files;

dba_tables 系統中所有的表
select * from dba_tables;

dba_indexes 系統中所有的索引
select * from dba_indexes;

dba_views 系統中所有的視圖
select * from dba_views

v$log,v$logfile 重做日誌信息(redo log)
select * from v$log; --日誌文件
select * from v$logfile; --redo文件
select * from v$controlfile; --控制文件

第21課-密碼文件

密碼文件
文檔位置:Administrator’s Guide->1.7 Creating and Maintaining a
Database Password File

密碼文件存放路徑:
$ORACLE_HOME/dbs/orapwSID(Linux)
$ORACLE_HOME\database\PWDORACLE_SID.ora(windows)

密碼文件用於具有 sysdba 身份的用戶執行遠程登錄數據庫,Oracle
允許用戶通過密碼文件驗證,在數據庫未啓動之前登錄,從而啓動實
例,加載打開數據庫;

相關參數:
remote_login_passwordfile=EXCLUSIVE
若remote_login_passwordfile=NONE,客戶端無法使用 sysdba 登錄數據庫
在這裏插入圖片描述
查詢擁有 sysdba 權限的用戶:
select * from v$pwfile_users;

密碼文件讀取順序:
orapwSID->orapw
無需重啓

實驗:sys 密碼忘記怎麼辦?
方式1:重建密碼文件
[oracle@ouzy dbs]$ orapwd file=orapwprod password=ouzy123@123 force=y
=號兩邊無空格。

方式2:使用sys操作系統驗證的方式登陸修改
[oracle@ouzy ~]$ sqlplus / as sysdba
SQL> alter user sys identified by Oracle123;

第22-24課-數據類型

文檔位置: SQL Language Reference->2.1 Data Types

varchar2:
長度可變
MAX_STRING_SIZE = STANDARD 最大 4000 字節或字符,(默認)
MAX_STRING_SIZE = EXTENDED 最大 32767 字節或字符.

char:
固定長度,最大 2000 字節或字符.

number:
包含精度(即總位數,1 - 38)和刻度(即小數位數,-84 - 127),佔用 1-22 字節。

nchar:
national
國家字符集類型,採用 unicode 編碼。

nvarchar2:
國家字符集類型,採用 unicode 編碼, 長度可變 MAX_STRING_SIZE =
STANDARD 最大 4000 字節或字符,MAX_STRING_SIZE = EXTENDED 最大
32767 字節或字符.

long:
最大 2GB 字節,已被 clob 取代,一個表只能包含一個 LONG 類型的列。
存儲的數據是在段裏面的。

日期類:
date
sysdate 當前日期
sysdate-1 前 1 天
sysdate-1/24 前 1 小時
sysdate-1/24/60 前 1 分鐘
sysdate-1/24/60/60 前 1 秒

時間戳 timestamp:
insert into test(c3) values(to_timestamp(‘2018-01-01
12:10:10.1’,‘yyyy-mm-dd hh24:mi:ss.ff’))

Lob 類型
Binary char lob
內置的 LOB 數據類型包括 BLOB、CLOB、NCLOB、BFILE(外部存儲)
的大型化和非結構化數據,如文本、圖像、視屏、空間數據存儲。

clob:
字符串,可以多個 clob 類型的列,存儲的是一個指針
nclob 採用 unicode 編碼

Blob:
存儲非結構化的二進制數據大對象,存儲各種文件。
最大:(4 gigabytes - 1) * (database block size).

Bfile:
二進制文件,存儲在數據庫外的系統文件,只讀的,數據庫會將該文
件當二進制文件處理。
使用 vsize 函數查看所佔字節
使用 length 函數查看長度

dump 函數
1)8:以 8 進制返回結果的值
2)10:以 10 進制返回結果的值(默認)
3)16:以 16 進制返回結果的值
4)17:以單字符的形式返回結果的值z
5)1000:以上 4 種加上 1000,表示在返回值中加上當前字符集
select dump(‘abc’,16) from dual;
select dump(name) from t2;
select dump(name,‘16’) from t2;
select dump(name,‘1016’) from t2;

查看字符集:select * from nls_database_parameters;

第25-26課-實例的啓動過程分析

文檔位置:Concepts->13.2 Overview of Database Instance Startup and Shutdown
數據庫由關閉到打開經歷 4 個階段: shutdown->nomount->mount->open
關閉->卸載->掛載->打開
在這裏插入圖片描述
alert 文件位置:
/u01/app/oracle/diag/rdbms/prod/prod/trace/alert_SID.log
跟蹤日誌記錄:[oracle@ouzy trace]$ tail -f alert_prod.log(實時打印啓動情況)

  1. shutdown->nomount
    SQL>startup nomount;
    select status from v$instance;
    STARTED 狀態
  1. 尋找初始化參數文件
    spfileSID.ora->spfile.ora->initSID.ora
    spfileprod.ora->spfile.ora->initprod.ora
    可以指定 spfile 和 pfile 路徑啓動
  2. 讀取參數文件的參數
  3. 根據參數分配 SGA 大小 memory_target
  4. 啓動後臺進程 實例=SGA+後臺進程
  5. 將所有顯示的參數寫入 alert 日誌
    此期間並未和數據庫關聯
  1. nomount->mount
    SQL>alter database mount;
    select status from v$instance;
    MOUNTED 狀態
    數據庫掛載,獲取控制文件(控制文件位置由參數 control_files 控制),讀取控制文件
    獲取數據文件和 redo 聯機重做日誌文件位置。
    在掛載狀態,數據庫並未打開。此時客戶端可以連上監聽。
    CLUSTER_DATABASE=false
    SQL> show parameter cluster_database

  2. mount->open
    SQL>alter database open;
    OPEN 狀態
    數據文件位置:/u01/app/oracle/oradata/prod/

只有數據庫 open,用戶才能對數據進行操作。例如增刪改查操作,exp 導出操作。
1.打開除了 undo 表空間外的表空間的數據文件。
如果表空間是離線的,那麼數據文件也會離線。
2.打開 Undo 表空間的文件。
如果有多個 undo 表空間,則根據參數 UNDO_TABLESPACE 決定使用哪個。

使用 lsof 命令:
1) 查看進程打開的文件
lsof -p 進程號
2) 查看文件被哪個進程打開
lsof redo01.log
實驗操作:
SQL> startup mount(啓動到mount狀態)
[oracle@ouzy ~]$ ps -ef|grep ora_(查看進程)
[oracle@ouzy ~]$ cd /u01/app/oracle/oradata/prod/
[oracle@ouzy prod]$ lsof control01.ctl(查看文件被哪個進程打開)
[oracle@ouzy prod]$ lsof -p 16306 (查看打開的文件)
SQL> alter database open;(啓動到open狀態)
[oracle@ouzy prod]$ lsof -p 16306(再次查看打開的文件)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
3.打開聯機重做日誌文件。
startup mount
startup nomount
startup open(startup)

排查步驟:

  1. startup nomount;參數文件
  2. alter database mount;控制文件
  3. alter database open;數據文件

第27課-實例的關閉過程分析

在這裏插入圖片描述
文檔位置: Concepts->13.2.2 Overview of Database and Instance
Shutdown
alert 文件位置:
/u01/app/oracle/diag/rdbms/prod/prod/trace/alert_SID.log
跟蹤日誌記錄:[oracle@ouzy trace]$ tail -f alert_prod.log(實時打印啓動情況)

1.open->close
SQL>alter database close;

1.正常關閉
將 SGA 的數據寫入到數據文件和 redo 文件, 關閉數據文件和聯機重做日誌文件,
數據庫將處於 mount 狀態 ,但控制文件依舊是打開的狀態。

2.非正常關閉
使用 shutdown abort,斷電等情況。沒來得及將SGA 的數據寫入到數據文件和redo
文件,下次實例啓動,oracle 會自動進行數據恢復。

2.close->nomount
關閉控制文件,但是實例仍存在於內存中。
SQL>alter database dismount;

3.nomount->shutdown
SQL>shutdown;
實例關閉,後臺進程終止。
在某些情況下,實例無法乾淨地關閉,無法重新啓動實例,這時候可以使用
shutdown abort 先關閉。
INSTANCE_ABORT_DELAY_TIME:(單位秒,12.2 開始有這個參數)指定發生內部錯誤
延遲多長時間實例終止。

第28課-實例的4種關閉模式

在這裏插入圖片描述
數據庫關閉有 4 種模式:
在這裏插入圖片描述
Shutdown abort:
使用此種模式和斷電一樣的效果,速度最快,但下次啓動需要進行實例恢復,這種
恢復是 oracle 自動進行的。
在這裏插入圖片描述
Shutdown immediate:
此種模式的速度僅次於 shutdown abort,斷開用戶連接,終止活動的事務,未提交的
事務進行回滾。

Shutdown transactional:
等待當前所有事務結束就關閉數據庫。

Shutdown normal(默認模式):
等待所有用戶斷開連接就關閉數據庫。

生產庫:

  1. 運行了很長時間 1 年,2 年
    Shutdown immediate
    Shutdown abort—實例恢復

生產庫關閉步驟:
2. 刷新 SGA 數據到數據文件
Alter system flush buffer_cache;(可重複執行幾次)
3. 寫檢查點
Alter system checkpoint;(可重複執行幾次)
4. shutdown immediate
5. shutdown abort(若shutdown immediate遲遲無法關閉再選擇shutdown abort,並且先刷新SGA數據到數據文件中、寫檢查點命令執行)
6. startup

第29課-物理存儲結構

文檔: Concepts->11 Physical Storage Structures
Oracle 數據庫是由一組數據文件的組成的,這些文件永久得存儲在磁盤上。包括
數據文件,臨時文件,控制文件,聯機重做日誌文件。
實例是一塊內存區域,用來管理數據文件的。SGA+後臺進程
一個數據庫可以有多個實例(RAC)。
在這裏插入圖片描述
CREATE DATABASE 語句:
在這裏插入圖片描述
數據文件相關視圖:dba_data_files,vdatafile,vdatafile,vdbfile
臨時文件相關視圖:dba_temp_files,vtempfile:vtempfile 控制文件相關視圖:vcontrolfile
聯機重做日誌相關視圖:vlog,vlog,vlogfile

select * from dba_data_files;
select * from v$datafile;
select * from v$dbfile;
select * from dba_temp_files;
select * from v$tempfile;
select * from v$controlfile;
select * from v$log; --日誌組
select * from v$logfile;  --日誌文件

SELECT a.GROUP#, b.MEMBER
  FROM v$log a
 INNER JOIN v$logfile b
    ON a.GROUP# = b.GROUP#

第30課-邏輯存儲結構

Oracle 數據庫的邏輯結構和物理結構對應圖
在這裏插入圖片描述
oracle 數據塊–操作系統數據塊的整數倍
oracle 數據塊:db_block_size
操作系統塊:
xfs_info /dev/sda3
file -s /dev/sda3
lsblk -f
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
Tablespace:表空間(dba_tablespaces,v$tablespace)
Segment:段(dba_segments,表,index)
Extent:區(dba_extents)
Datablock:Oracle 數據塊

select * from dba_tablespaces;
select * from dba_segments t where t.owner='HR1';
select * from dba_extents t where t.owner='HR1';

在這裏插入圖片描述
在這裏插入圖片描述

第31課-數據庫診斷文件

ADR(Automatic Diagnostic Repository,自動診斷資料檔案庫)是一個目
錄結構,用來存儲跟蹤文件,日誌文件等。
路徑:/u01/app/oracle/diag/rdbms/prod/prod/trace
在這裏插入圖片描述
在這裏插入圖片描述
參數:DIAGNOSTIC_DEST

SQL> show parameter diag  
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest 		     string	 /u01/app/oracle

可以使用 v$diag_info 查看此目錄。
在這裏插入圖片描述
1 Alert 文件(/u01/app/oracle/diag/rdbms/prod/prod/trace)
數據庫、監聽、ASM、clusterware
每一個數據庫都有一個 alert 文件,按照時間順序記錄瞭如下一些信息:
1.1所有內部錯誤(ORA-600),塊崩潰錯誤(ORA-1578),死鎖(ORA-60)
1.21DDL 語句 ,startup,shutdown,archive log,recover
1.3其他信息 alter system set

2 Tracer 文件
服務器和後臺進程都有相關的跟蹤文件。以.trc 爲後綴。
後臺進程產生的跟蹤文件爲:SID_進程名_PID.trc。
服務器進程產生的跟蹤文件爲:SID_ora_PID.trc。
Prod_ora_28439.trc
Prod_ora_98269.trc
跟蹤文件有時候會伴隨一些.trm 文件,這些文件記錄了跟蹤文件的結構化信息,用
來搜索和導航。
SELECT PID, PROGRAM, TRACEFILE FROM VPROCESS;DIAGNOSTICDEST,ADRselectfromvPROCESS; DIAGNOSTIC_DEST 相關參數,指定 ADR 位置 select * from vprocess;(查看進程)
在這裏插入圖片描述
在這裏插入圖片描述
DDL log:
ENABLE_DDL_LOGGING
記錄 ddl 語句
SQL> alter system set enable_ddl_logging=true;(修改爲true便會記錄ddl執行記錄)

SQL> show parameter ddl
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
ddl_lock_timeout		     integer	 0
enable_ddl_logging		     boolean	 FALSE

實驗:查看ddl操作記錄
SQL> create table t1(name varchar2(20));
日誌記錄位置:
/u01/app/oracle/diag/rdbms/prod/prod/log(ddl_prod.log 簡要信息)
/u01/app/oracle/diag/rdbms/prod/prod/log/ddl(log.xml 詳細信息)

[oracle@ouzy log]$ cat ddl_prod.log (簡要信息)
2019-06-30T17:39:06.265056+08:00
diag_adl:create table t1(name varchar2(20))

[oracle@ouzy ddl]$ cat log.xml (詳細信息,包括ip地址)
<msg time='2019-06-30T17:39:06.264+08:00' org_id='oracle' comp_id='rdbms'
 msg_id='opiexe:4695:2946163730' type='UNKNOWN' group='diag_adl'
 level='16' host_id='ouzy' host_addr='192.168.230.100'
 pid='68796' version='1'>
 <txt>create table t1(name varchar2(20))
 </txt>
</msg>

Ora 錯誤:
Oerr ora xxx
在這裏插入圖片描述
在這裏插入圖片描述

3 ADRCI 工具
which adrci(查看目錄所在)
help
show base
show alert
show tracefile
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

第32課-表空間管理方式

文檔位置:Concepts->12.Logical Storage Structures
表空間管理方式:
在這裏插入圖片描述
區管理方式:本地管理和字典管理:字典管理->轉化->本地管理
段管理方式:自動和手工

SYSTEM,TEMP,UNDOTBS 表空間的段管理使用手動方式,其它自動
方式
表空間相關視圖: dba_tablespaces,v$tablespace

第33-34課-操作表空間

三種類型:
1️⃣永久表空間
2️⃣臨時表空間 tempoary
3️⃣ 撤銷表空間 undo

1️⃣ 創建永久表空間

create tablespace tbs01 datafile '/u01/tbs.dbf' size 100m
reuse
autoextend on next 100m maxsize unlimited
extent management local uniform size 1m --區管理
segment space management auto; --段管理

表空間 offline/online 操作:

ALTER TABLESPACE tbs01 ONLINE;
ALTER TABLESPACE tbs01 OFFLINE;

表空間只讀/讀寫:

ALTER TABLESPACE tbs01 READ ONLY;
ALTER TABLESPACE tbs01 READ WRITE;

實驗:表空間操作練習

SQL> create user rw identified by rw;
SQL> grant connect,resource to rw;
SQL> alter user rw quota unlimited on tbs01;

SQL> alter user rw default tablespace tbs01;(設置rw用戶的默認表空間爲tbs01)

SQL> conn rw/rw
SQL> create table t(id int);
SQL> insert into t values(100);
SQL> commit;

SQL> conn / as sysdba
SQL> alter tablespace tbs01 read only;(設置表空間爲只讀)

SQL> conn rw/rw
SQL> insert into t values(101);(插入操作)
insert into t values(101)
            *
ERROR at line 1:
ORA-00372: file 5 cannot be modified at this time
ORA-01110: data file 5: '/u01/tbs01_1.dbf'

SQL> select * from t;(可查詢)

	ID
----------
       100

創建 bigfile 類型:
單個文件大小可以達到 4G block(32TB)

create bigfile tablespace tbs02 datafile '/u01/tbs02.dbf'
size 100m reuse
autoextend on next 100m maxsize unlimited
extent management local uniform size 1m
segment space management auto;

創建壓縮表空間:

create tablespace tbs01 datafile
'/u01/tbs01.dbf'
size 100m reuse autoextend on next 50m maxsize 20g
default compress for oltp;

2️⃣ 創建臨時表空間

create temporary tablespace temp2 tempfile
'/u01/temp2.dbf' size 100m reuse
autoextend on next 100m maxsize unlimited;

指定臨時表空間組:

CREATE TEMPORARY TABLESPACE lmtemp2 TEMPFILE
'/u02/oracle/data/lmtemp201.dbf'
SIZE 50M
TABLESPACE GROUP group1;

查詢:( select * from dba_tablespace_groups;)

ALTER TABLESPACE lmtemp TABLESPACE GROUP group2;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE group2;

3️⃣ 創建撤銷表空間類型(UNDO)
SQL> show parameter undo_

create undo tablespace undotbs datafile '/u01/undo.dbf'
size 100m reuse
autoextend on next 100m maxsize unlimited;

4️⃣ 向表空間添加數據文件

alter tablespace users add datafile '/u01/users02.dbf'  size 100m; ---永久型
alter tablespace temp add tempfile '/u01/temp02.dbf' size 100m; ---臨時型
alter  tablespace  undotbs1  add  datafile   '/u01/undotbs02.dbf' size 100m ; ---undo 型

5️⃣ 刪除表空間

drop tablespace testtbs;(有內容的情況無法刪除)
drop tablespace testtbs including contents;(數據文件還在)
drop tablespace testtbs including contents and datafiles; (連數據文件一起刪除)

6️⃣ 收縮(增長)表空間

alter database datafile 4 resize 50m;
alter database datafile '/u01/tbs01_3_1.dbf' resize 100m;

第35課-使用Toad管理表空間

在這裏插入圖片描述

第36課-管理undo數據

當某個進程更改了數據庫中的數據時,Oracle 數據庫會保存舊值(還原數據)。按數據修改前的原樣存儲數據。如果捕獲了還原數據,則可以回退未提交的數據。還原數據還用於支持讀取一致性和閃回查詢。

undo 段(撤銷段)
undo_management
undo_tablespace
undo_retention

創建 undo 表空間
create undo tablespace undotbs2 datafile ‘/u01/undo02.dbf’ size 100m;

更改 undo 默認表空間
alter system set undo_tablespace=undotbs2 scope=both;

設置 undo 保留時間(默認900s太少,需調整)
alter system set undo_retention=3600 scope=both;
在這裏插入圖片描述
確保還原保留期
select tablespace_name,retention from dba_tablespaces;
alter tablespace undotbs1 retention guarantee;
alter tablespace undotbs1 retention noguarantee;
在這裏插入圖片描述
相關視圖:
dba_rollback_segs
v$rollname
dba_undo_extents
select * from dba_segments t where t.tablespace_name=‘UNDOTBS2’;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章