一、安装部署

1、查看Swap分区空间(不能小于2G)

grep SwapTotal /proc/meminfo | awk '{print $2/1024/1024 " GB"}'

2、修改CentOS系统标识 (由于Oracle默认不支持CentOS)

echo 'redhat-7'  > /etc/redhat-release

image-20231201111911662

3、修改sysctl.conf

cat >> /etc/sysctl.conf << EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
EOF

#重新加载
sysctl -p

4、安装必须的软件包

yum -y install binutils* compat-libcap1* compat-libstdc++* gcc* gcc-c++* glibc* glibc-devel* ksh* libaio* libaio-devel* libgcc* libstdc++* libstdc++-devel* libXi* libXtst* make* sysstat* elfutils* unixODBC* unzip lrzsz

5、创建安装oracle程序和DBA用户组

groupadd oinstall && groupadd dba

6、创建用户oracle 并加入到dba组

useradd -g dba -m oracle

7、将用户oracle加入到oinstall组

usermod -a -G oinstall oracle

8、修改用户oracle的密码

passwd oracle

image-20231201131842906

9、查看用户oracle的信息

id oracle

image-20231201131904034

10、创建oracle目录

mkdir -p /data/{oracle,inventory,src}

11、修改目录权限

chown -R oracle:oinstall /data/

12、查看目录权限

ll /data

13、修改oracle用户的安全性能设置

cat >> /etc/security/limits.conf << EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF

14、修改用户环境变量

cat >>  /home/oracle/.bashrc << EOF
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export ORACLE_UNQNAME=orcl
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
EOF

#重新加载环境变量
source /home/oracle/.bashrc

15、上传安装包

链接: https://pan.baidu.com/s/1-hR8KrFiRqlIwgi60-_wFQ?pwd=1122 提取码: 1122

使用lrzsz或者xftp都可,这里就不做过多演示了

16、unzip两个zip安装包并授权

unzip linux.x64_11gR2_database_1of2.zip -d /data/src/
unzip linux.x64_11gR2_database_2of2.zip -d /data/src/
chown -R oracle:oinstall /data/src/
ll /data/src/

image-20231201132939556

17、关闭selinux

sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

18、重启机器

reboot

19、进入Oracle用户

su oracle

20、编辑数据库安装文件 记得提权!!

sudo sed -i 's|^oracle.install.option=.*|oracle.install.option=INSTALL_DB_SWONLY|g;
            s|^ORACLE_HOSTNAME=.*|ORACLE_HOSTNAME=oracle|g;
            s|^UNIX_GROUP_NAME=.*|UNIX_GROUP_NAME=oinstall|g;
            s|^INVENTORY_LOCATION=.*|INVENTORY_LOCATION=/data/inventory|g;
            s|^SELECTED_LANGUAGES=.*|SELECTED_LANGUAGES=en,zh_CN|g;
            s|^ORACLE_HOME=.*|ORACLE_HOME=/data/oracle/product/11.2.0/db_1|g;
            s|^ORACLE_BASE=.*|ORACLE_BASE=/data/oracle|g;
            s|^oracle.install.db.InstallEdition=.*|oracle.install.db.InstallEdition=EE|g;
            s|^oracle.install.db.DBA_GROUP=.*|oracle.install.db.DBA_GROUP=dba|g;
            s|^oracle.install.db.OPER_GROUP=.*|oracle.install.db.OPER_GROUP=oinstall|g;
            s|^oracle.install.db.config.starterdb.type=.*|oracle.install.db.config.starterdb.type=GENERAL_PURPOSE|g;
            s|^oracle.install.db.config.starterdb.globalDBName=.*|oracle.install.db.config.starterdb.globalDBName=orcl|g;
            s|^oracle.install.db.config.starterdb.SID=.*|oracle.install.db.config.starterdb.SID=orcl|g;
            s|^oracle.install.db.config.starterdb.characterSet=.*|oracle.install.db.config.starterdb.characterSet=AL32UTF8|g;
            s|^oracle.install.db.config.starterdb.memoryLimit=.*|oracle.install.db.config.starterdb.memoryLimit=800|g;
            s|^oracle.install.db.config.starterdb.password.ALL=.*|oracle.install.db.config.starterdb.password.ALL=oracle|g;
            s|^DECLINE_SECURITY_UPDATES=.*|DECLINE_SECURITY_UPDATES=true|g' /data/src/database/response/db_install.rsp
  • 根据以下值修改

    oracle.install.option=INSTALL_DB_SWONLY                # 安装类型
    ORACLE_HOSTNAME=oracle                                   # 主机名称
    UNIX_GROUP_NAME=oinstall                                   # 安装组
    INVENTORY_LOCATION=/data/inventory                         # INVENTORY目录
    SELECTED_LANGUAGES=en,zh_CN                                # 选择语言
    ORACLE_HOME=/data/oracle/product/11.2.0/db_1               # oracle_home
    ORACLE_BASE=/data/oracle                                   # oracle_base
    oracle.install.db.InstallEdition=EE                        # oracle版本
    oracle.install.db.DBA_GROUP=dba                            # dba用户组
    oracle.install.db.OPER_GROUP=oinstall                      # oper用户组
    oracle.install.db.config.starterdb.type=GENERAL_PURPOSE    # 数据库类型
    oracle.install.db.config.starterdb.globalDBName=orcl       # globalDBName
    oracle.install.db.config.starterdb.SID=orcl                # SID
    oracle.install.db.config.starterdb.characterSet=AL32UTF8   # 默认数据库编码
    oracle.install.db.config.starterdb.memoryLimit=800         # 自动管理内存的最小内存(M)
    oracle.install.db.config.starterdb.password.ALL=oracle     # 设定所有数据库用户使用同一个密码
    DECLINE_SECURITY_UPDATES=true                              # 设置安全更新

20、安装oracle

/data/src/database/runInstaller -silent -responseFile /data/src/database/response/db_install.rsp -ignorePrereq

在另一个窗口输入命令如下://如果报错没有这个目录或者文件,等待一会执行即可

/data/oracle/product/11.2.0/db_1/root.sh

执行完后,再回到之前窗口按下回车!!!!!!

image-20231204122744701

21、编辑监听配置文件

根据以下值修改

INSTALL_TYPE=""custom""                               # 安装的类型
LISTENER_NUMBER=1                                     # 监听器数量
LISTENER_NAMES={"LISTENER"}                           # 监听器的名称列表
LISTENER_PROTOCOLS={"TCP;1521"}                       # 监听器使用的通讯协议列表
LISTENER_START=""LISTENER""                           # 监听器启动的名称
sed -i 's|INSTALL_TYPE=.*|INSTALL_TYPE="custom"|;
        s|LISTENER_NUMBER=.*|LISTENER_NUMBER=1|;
        s|LISTENER_NAMES=.*|LISTENER_NAMES={"LISTENER"}|;
        s|LISTENER_PROTOCOLS=.*|LISTENER_PROTOCOLS={"TCP;1521"}|;
        s|LISTENER_START=.*|LISTENER_START="LISTENER"|' /data/src/database/response/netca.rsp

查看是否替换成功:

grep -E 'INSTALL_TYPE=.*"custom"|LISTENER_NUMBER=.*|LISTENER_NAMES=.*|LISTENER_PROTOCOLS=.*|LISTENER_START=.*"LISTENER"'  /data/src/database/response/netca.rsp

image-20231201141926354

22、执行以下命令

/data/oracle/product/11.2.0/db_1/bin/netca /silent /responseFile /data/src/database/response/netca.rsp

image-20231201142044621

23、编辑数据库实例文件

根据以下值修改

RESPONSEFILE_VERSION = "11.2.0"                              // 不要变哦
OPERATION_TYPE = "createDatabase"                            // 操作为创建实例  
GDBNAME = "orcl"                                             // 数据库实例名
SID = "orcl"                                                 // 实例名字
TEMPLATENAME = "General_Purpose.dbc"                        // 建库用的模板文件
SYSPASSWORD = "oracle"                                      // SYS管理员密码
SYSTEMPASSWORD = "oracle"                                   // SYSTEM管理员密码
SYSMANPASSWORD= "oracle"
DBSNMPPASSWORD= "oracle"
DATAFILEDESTINATION = /data/oracle/oradata                   // 数据文件存放目录
RECOVERYAREADESTINATION = /data/oracle/flash_recovery_area    // 恢复数据存放目录
CHARACTERSET = "AL32UTF8"                                    // 字符集
NATIONALCHARACTERSET= "AL16UTF16"                           // 字符集
TOTALMEMORY = "1638"                                         // 1638MB,物理内存2G*80%
sed -i -e 's/^RESPONSEFILE_VERSION = "11.2.0"/RESPONSEFILE_VERSION = "11.2.0"/' \
       -e 's/OPERATION_TYPE = "createDatabase"/OPERATION_TYPE = "createDatabase"/' \
       -e 's/GDBNAME = "orcl11g.us.oracle.com"/GDBNAME = "orcl"/' \
       -e 's/SID = "orcl11g"/SID = "orcl"/' \
       -e 's/TEMPLATENAME = "General_Purpose.dbc"/TEMPLATENAME = "General_Purpose.dbc"/' \
       -e 's/^#SYSPASSWORD = "password"/SYSPASSWORD = "oracle"/' \
       -e 's/^#SYSTEMPASSWORD = "password"/SYSTEMPASSWORD = "oracle"/' \
       -e 's/^#SYSMANPASSWORD = "password"/SYSMANPASSWORD = "oracle"/' \
       -e 's/^#DBSNMPPASSWORD = "password"/DBSNMPPASSWORD = "oracle"/' \
       -e 's|^#DATAFILEDESTINATION.*$|DATAFILEDESTINATION = /data/oracle/oradata|' \
       -e 's|^#RECOVERYAREADESTINATION.*$|RECOVERYAREADESTINATION = /data/oracle/flash_recovery_area|' \
       -e 's|^#CHARACTERSET.*$|CHARACTERSET = "AL32UTF8"|' \
       -e 's|^#NATIONALCHARACTERSET.*$|NATIONALCHARACTERSET = "AL16UTF16"|' \
       -e 's|^#TOTALMEMORY.*$|TOTALMEMORY = "1638"|' /data/src/database/response/dbca.rsp

修改查看

grep -E '^(RESPONSEFILE_VERSION|OPERATION_TYPE|GDBNAME|SID|TEMPLATENAME|SYSPASSWORD|SYSTEMPASSWORD|SYSMANPASSWORD|DBSNMPPASSWORD|DATAFILEDESTINATION|RECOVERYAREADESTINATION|CHARACTERSET|NATIONALCHARACTERSET|TOTALMEMORY) =' /data/src/database/response/dbca.rsp | awk '!seen[$1]++'

image-20231201163337617

24、执行以下命令

/data/oracle/product/11.2.0/db_1/bin/dbca -silent -responseFile /data/src/database/response/dbca.rsp

image-20231201164041441

25、查看实例是否运行

ps -ef | grep ora_ | grep -v grep

image-20231201164121877

26、修改启动和关闭实例的程序

将ORACLE_HOME_LISTNER=$1修改为ORACLE_HOME_LISTNER=/data/oracle/product/11.2.0/db_1

sed -i 's#ORACLE_HOME_LISTNER=$1#ORACLE_HOME_LISTNER=/data/oracle/product/11.2.0/db_1#g' /data/oracle/product/11.2.0/db_1/bin/dbstart

sed -i 's#ORACLE_HOME_LISTNER=$1#ORACLE_HOME_LISTNER=/data/oracle/product/11.2.0/db_1#g' /data/oracle/product/11.2.0/db_1/bin/dbshut

image-20231201165345778

image-20231201165519992

27、修改/etc/oratab

如果没有这个文件或者文件内容为空的情况下,使用echo追加即可!!!

echo 'orcl:/data/oracle/product/11.2.0:Y' | sudo tee -a /etc/oratab

image-20231201170018085

28、启动实例

/data/oracle/product/11.2.0/db_1/bin/dbstart

image-20231201170133259

29、开机启动Oracle(以下命令都是在root用户下!!!)

重新打开一个窗口运行

chmod +x /etc/rc.d/rc.local
cat >>  /etc/rc.d/rc.local << EOF
su oracle -lc "/data/oracle/product/11.2.0/db_1/bin/lsnrctl start"
su oracle -lc "/data/oracle/product/11.2.0/db_1/bin/dbstart"
EOF

30、进入数据库

使用oracle用户进入 //如果报错没有sqlpush命令,检查环境变量设置

sqlplus / as sysdba

image-20231204111936193

二、常用语句

2.1、控制语句

  • 登陆 sqlplus:sqlplus /nolog
  • 使用sysdba链接oracle:connect /as sysdba
  • 使用自定义 u1 连接oracle:connect u1 /123456
  • 开启数据库:startup
  • 关闭数据库:shutdown immediate;
  • 查看数据库状态:select * from v$instance;
  • 监听状态($ORACLE_HOME/bin):lsnrctl status
  • 开启监听:lsnrctl start
  • 关闭监听:lsnrctl stop

2.2、查询语句

  • 查询当前数据库 : select name from v$database;
  • 查询当前实例名 : select instance_name from v$instance;
  • 查询表空间:select default_tablespace, d.username from dba_users d;
  • 查看数据库用户:select * from dbs_users;
  • 查询表空间路径:select status,fuzzy,tablespace_name,name from v$datafile_header;
  • 显示当前连接用户:show user;
  • 显示系统下所有用户:select * from all_users;
  • 显示用户空间下所有表格:select table_name from user_tables;
  • 显示用户下表格中的数据:select * from "HFTEST"."stu";

2.3、创建语句

  • 创建表空间:create TableSpace 表空间名称 DataFile 表空间数据文件路径 Size 初始大小 AutoExtend on;

  • 创建用户:create user 用户名 identified by 密码 default tablespace 表空间;

    CREATE USER username IDENTIFIED BY password;
  • 用户授权:Grant connect, backup any table, select any dictionary, dba to 用户;

2.4、删除语句

  • 删除用户:drop user 用户名 cascade;
  • 删除表空间:Drop tablespace 表空间名 including contents and datafiles CASCADE CONSTRAINTS;
  • 删除表:drop table "stu";

三、oracle数据类型(常用)

分类 数据类型 描述
字符类型 Varchar 表示一个字符串,固定长度的字符串
varchar2 表示一个字符串,可变长度的字符串
NCHAR/NVARCHAR2 Unicode字符集类型
LONG 可变长字符串,最大长度2GB
数值类型 NUMBER NUMBER(n)表示一个整数,长度是 n
NUMBER(m,n):表示一个小数,总长度是 m,小数是 n,整数是 m-n
日期时间类型 DATE NUMBER(m,n):表示一个小数,总长度是 m,小数是 n,整数是 m-n
TIMESTAMP 秒值精确到小数点后6位
lob类型 CLOB CLOB 大对象,表示大文本数据类型,可存 4G
BLOB BLOB 大对象,表示二进制数据,可存 4G