第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 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;(切換日誌,將產生記錄存在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 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 touch initorcl.ora(在 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 用途有很多,例如:
- 維護內部數據結構
- 緩存磁盤的數據
- 緩存 redo 數據
- 存儲 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 相關視圖:
vinstance
vsgastat
4 後臺進程
後臺進程包括:PMON,SMON,DBWn,LGWR,CKPT 等。
可查詢相關視圖: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
動態性能視圖: 當數據庫運行的時候它們會不斷進行更新,一般
以 vsga,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開頭:全局動態性能視圖(RAC 環境下)
例子:vinstance
常用視圖:
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(實時打印啓動情況)
- shutdown->nomount
SQL>startup nomount;
select status from v$instance;
STARTED 狀態
- 尋找初始化參數文件
spfileSID.ora->spfile.ora->initSID.ora
spfileprod.ora->spfile.ora->initprod.ora
可以指定 spfile 和 pfile 路徑啓動 - 讀取參數文件的參數
- 根據參數分配 SGA 大小 memory_target
- 啓動後臺進程 實例=SGA+後臺進程
- 將所有顯示的參數寫入 alert 日誌
此期間並未和數據庫關聯
-
nomount->mount
SQL>alter database mount;
select status from v$instance;
MOUNTED 狀態
數據庫掛載,獲取控制文件(控制文件位置由參數 control_files 控制),讀取控制文件
獲取數據文件和 redo 聯機重做日誌文件位置。
在掛載狀態,數據庫並未打開。此時客戶端可以連上監聽。
CLUSTER_DATABASE=false
SQL> show parameter cluster_database -
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)
排查步驟:
- startup nomount;參數文件
- alter database mount;控制文件
- 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 年,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,vdbfile
臨時文件相關視圖:dba_temp_files,vcontrolfile
聯機重做日誌相關視圖: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;(查看進程)
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’;