Docker 笔记

安装 docker

CentOS7 安装 docker-ce

  • 配置 yum 源

    1
    2
    3
    4
    5
    
    curl -Lo /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
    #替换成清华源
    sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo
    yum clean all
    yum makecache
    
  • 安装 docker

    1
    
    yum install docker-ce
    
  • 修改 docker 配置文件,建议选择一个与本地网络不冲突的网段

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    mkdir -p /etc/docker
    cat > /etc/docker/daemon.json <<-EOF
    {
      "insecure-registries": ["harbor.colben.cn"],
      "default-address-pools" : [{"base":"10.110.0.0/16", "size": 24}],
      "log-driver": "json-file",
      "log-opts": {"max-size":"100m", "max-file":"4"}
    }
    EOF
    
  • 启动 docker

CentOS7 安装 Zabbix3.10

环境

  • 操作系统:CentOS7 (192.168.1.100)
  • 数据库:MariaDB 10.1.26
  • Web后台:PHP 5.6.31
  • Web引擎:Nginx 1.12.1
  • Zabbix:Zabbix 3.0.10
  • 部署方式:单机部署

安装操作系统 CentOS

  • 推荐 RHEL6 及以上的 x64 版本。
  • 这里最小安装 CentOS7 ,外网不可达服务器可能需要配置本地 yum 源。

安装数据库 MariaDB

安装 PHP

  • PHP-5.5 及以上版本。

Centos6 安装 nopae 内核

环境

需求

  • 手头有台笔记本 IBM thinkpad X31,处理器不支持 pae,不支持 64 位操作系统,要安装一个32位 CentOS6,且内核无 pae 要求。

准备环境

  • 在支持 pae 的计算机上安装 VirtualBox 及其扩展包,以支持 VirtualBox 虚拟机中挂载宿主机 USB 存储。
  • 取出 Thinkpad 笔记本的硬盘,通过移动硬盘盒等方法连接刚刚安装 VirtualBox 的计算机,确保该存储正常识别可用。
  • 下载CentOS-6.9-i386-minimal.iso

VirtualBox 下安装 CentOS6.9 虚拟机

  • 创建 CentOS6.9 x32 虚拟机,这里无需创建虚拟磁盘,后面会把 Thinkpad 笔记本的硬盘挂载到虚拟机中,直接把操作系统安装到该硬盘中。 不用创建虚拟磁盘
  • 设置虚拟机,启动 USB 3.0 控制器,增加筛选器,选中刚刚 USB 连接的 Thinkpad 硬盘;网络模式自选,确保虚拟机可上网。 启用USB 3.0 控制器
  • 使用刚刚下载好的 CentOS-6.9-i386-minimal.iso 启动 CentOS6.9 虚拟机,如下图 启动虚拟机
  • 此时查看菜单栏"设备",会发现 Thinkpad 硬盘已挂载,如下图 输入图片说明
  • 选择 “Install or upgrade an existing system” 安装系统,选择安装设备,会看到唯一一个磁盘,如下图 磁盘选择
  • 该设备就是通过 USB 挂载的 Thinkpad 磁盘,划分好分区,完成系统安装。

CentOS6.9 虚拟机 Rescue 启动挂载

  • 由于 VirtuaBox 虚拟机尚不支持从 USB 启动,所以在上一步完成系统安装后,重启虚拟机,依旧使用 CentOS-6.9-i386-minimal.iso 启动。
  • 此时从 “Rescue Installed system” 启动,如下图 rescue
  • 根据提示选择好语言、键盘,激活网卡,如下图 激活网络
  • “OK” 确认,选择网卡,如下图 选择网卡
  • “OK”,根据自己的网络环境配置上网方式,如下图 配置网卡地址
  • “OK”,进入 Rescue 界面,如下图 Rescue
  • “Continue”,选择好磁盘,“OK” 确认,提示根分区已挂载至 /mnt/sysimage 下,如下图 根目录挂载地址
  • “OK”, 进入 Rescue Shell,此时执行
    1
    
    chroot /mnt/sysimage/ /bin/bash
    
  • 至此,通过 VirtualBox 虚拟机成功启动 USB 存储(Thinkpad 硬盘)中的根分区并进入其 Bash 环境。

安装 NONPAE 内核

  • 在刚刚启动的 Bash Shell 中,检查网络
    1
    
    ping www.baidu.com
    
  • 关闭 selinux (可选)
    1
    
    sed -i 's/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
    
  • 安装 NONPAE 内核
    1
    2
    3
    
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
    yum --enablerepo=elrepo-kernel install kernel-lt-NONPAE
    
  • 检查系统已安装的内核
    1
    
    rpm -qa|grep kernel
    
  • 发现两个内核,一个是官方的 kernel-2.6,另一个是刚刚安装的 kernel-3.10,kernel-3.10 就是可以在无 pae 处理器上启动的 NONPAE 内核。
  • 退出当前 Chroot Shell 和 Rescure Shell
    1
    2
    
    exit
    exit
    

启动 Thinkpad X31

  • 关闭虚拟机,退出 USB 磁盘,把磁盘装回 Thinkpad X31 笔记本中,开机,选择 3.10 内核即可正常启动。
  • 卸载官方 2.6 内核(推荐)
    1
    2
    
    yum erase kernel-2.6.32*
    yum erase kernel-firemware-2.6.32*
    

Ovirt 笔记

封装 CentOS6/7 虚拟机

  • 标识 “重新配置”
    1
    
    touch /.unconfigured
    
  • 删除 ssh 主机密钥
    1
    
    rm -rf /etc/ssh/ssh_host_*
    
  • 恢复原始主机名 ”localhost“
    1
    2
    3
    4
    
    #CentOS6
    sed -i '/^HOSTNAME/cHOSTNAME=localhost.localdomain' /etc/sysconfig/network
    #CentOS7
    sed -i '/^HOSTNAME/cHOSTNAME=localhost.localdomain' /etc/hostname
    
  • 清理 udev
    1
    
    rm -rf /etc/udev/rules.d/70-*
    
  • 删除网卡硬件标识
    1
    
    sed -i -e '/HWADDR/d' -e '/UUID/d' /etc/sysconfig/network-scripts/ifcfg-{eth,enp}*
    
  • 清空日志
    1
    
    rm -rf /var/log/*
    
  • 关闭虚拟机
    1
    
    poweroff
    

解锁 admin 用户

  • 查看状态
    1
    
    ovirt-aaa-jdbc-tool user show admin
    
  • 解锁
    1
    
    ovirt-aaa-jdbc-tool user unlock admin
    

创建本地 yum 源

  • 安装工具
    1
    
    yum install yum-utils createrepo
    
  • 解压 rpm 包(无用,仅作记录)
    1
    
    rpm2cpio {filename}.rpm | cpio -ivd
    
  • 下载 ovirt.repo,保存到本地服务器的 /etc/yum.repos.d/ 下
  • 下载 RPM-GPG-ovirt-4.1,保存到本地服务器的 /etc/pki/rpm-gpg/ 下
  • 在该服务器上,执行以下命令:
    1
    2
    3
    
    yum clean all
    yum makecache fast
    yum repolist #此时能看到新增加的 ovirt.repo 文件中的 yum 源
    
  • 同步 yum repo 到本地
    1
    2
    3
    4
    5
    6
    7
    
    mkdir /DATA/yum && cd /DATA/yum
    reposync -nld \
        --repoid=ovirt-4.1 \
        --repoid=ovirt-4.1-epel \
        --repoid=ovirt-centos7 \
        --repoid=centos-opstools-release \
        --repoid=patternfly-patternfly1
    
  • 创建本地 yum repo
    1
    2
    3
    4
    5
    
    createrepo --update ovirt-4.1
    createrepo --update ovirt-4.1-epel
    createrepo --update ovirt-centos7
    createrepo --update centos-opstools-release
    createrepo --update patternfly-patternfly1
    
  • nginx.conf 配置
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    server {
        listen       1080 default_server;
        listen       [::]:1080 default_server;
        server_name  _;
        root         /DATA/yum;
        location / {
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
        }
    }
    

Firewalld 笔记

区域(zone)

  • 查看支持的 zone
    1
    
    firewall-cmd --get-zones [--permanent]
    
  • zone 定义
    • 丢弃(drop) 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
    • 限制(block) 任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。
    • 公共(public) 在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。
    • 外部(external) 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。
    • 非军事区(dmz) 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。
    • 工作(work) 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。
    • 家庭(home) 用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。
    • 内部(internal) 用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。
    • 信任(trusted) 可接受所有的网络连接。
  • 指定其中一个区域为默认区域是可行的。当接口连接加入了 NetworkManager,它们就被分配为默认区域。安装时,firewalld 里的默认区域被设定为公共区域。
  • 判断请求使用的 zone
    • source,源地址,优先级最高
    • interface,接收请求的网卡
    • 默认 zone,优先级最低
  • 查看默认的 zone
    1
    
    firewall-cmd --get-default-zone
    
  • 设置默认的 zone
    1
    
    firewall-cmd --set-default-zone=public
    
  • 查看活动的 zone
    1
    
    firewall-cmd --get-active-zones
    
  • 查看指定 zone 下的规则
    1
    
    firewall-cmd [--zone=<zone>] --list-all
    

源地址(source)

  • 列出指定zone的所有绑定的source地址
    1
    
    firewall-cmd [--permanent] [--zone=zone] --list-sources
    
  • 查询指定zone是否跟指定source地址进行了绑定
    1
    
    firewall-cmd [--permanent] [--zone=zone] --query-source=ip[/mask]
    
  • 用于将一个source地址绑定到指定的zone(只可绑定一次,第二次绑定到不同的zone会报错)
    1
    
    firewall-cmd [--permanent] [--zone=zone] --add-source=ip[/mask]
    
  • 改变source地址所绑定的zone,如果原来没有绑定则进行绑定
    1
    
    firewall-cmd [--permanent] [--zone=zone] --change-source=ip[/mask]
    
  • 删除source地址跟zone的绑定
    1
    
    firewall-cmd [--permanent] [--zone=zone] --remove-source=ip[/mask]
    

网卡(interface)

  • 获取网卡所在的 zone
    1
    
    firewall-cmd --get-zone-of-interface=<interface>
    
  • 增加网卡到 zone
    1
    
    firewall-cmd [--zone=<zone>] --add-interface=<interface>
    
  • 修改网卡到 zone
    1
    
    firewall-cmd [--zone=<zone>] --change-interface=<interface>
    
  • 从 zone 中删除网卡
    1
    
    firewall-cmd [--zone=<zone>] --remove-interface=<interface>
    
  • 查看 zone 中是否包含某网卡
    1
    
    firewall-cmd [--zone=<zone>] --query-interface=<interface>
    

target

  • 默认可以取四个值: default、ACCEPT、%%REJECT%%、DROP
  • 查看 taget
    1
    
    firewall-cmd --permanent [--zone=zone] --get-target
    
  • 设置 target
    1
    
    firewall-cmd --permanent [--zone=zone] --set-target=target
    
  • 必须使用参数 –permanent,而且使用 firewall-cmd 命令不能直接生效,需 reload

服务(service)

  • 查看支持的 service
    1
    
    firewall-cmd --get-services [--permanent]
    
  • 查看 zone 启动的 service
    1
    
    firewall-cmd [--zone=<zone>] --list-services
    
  • 在 zone 中启动 service
    1
    2
    
    firewall-cmd [--zone=<zone>] --add-service=<service> \
        [ --permanent | --timeout=<seconds> ]
    
  • 禁用 zone 中的 service
    1
    
    firewall-cmd [--zone=<zone>] --remove-service=<service> [--permanent]
    
  • 查看 zone 中是否启动 service
    1
    
    firewall-cmd [--zone=<zone>] --query-service=<service>
    

端口和协议组合

  • 查看配置的全部端口规则
    1
    
    firewall-cmd [--permanent] [--zone=zone] --list-ports
    
  • 启动 zone 中指定协议的端口
    1
    2
    
    firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> \
        [ --permanent | --timeout=<seconds> ]
    
  • 禁用 zone 中指定协议的端口
    1
    
    firewall-cmd [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol> [--permanent]
    
  • 查看 zone 中指定协议的端口
    1
    
    firewall-cmd [--zone=<zone>] --query-port=<port>[-<port>]/<protocol> [--permanent]
    

ICMP

  • 查看支持的 icmp 类型
    1
    
    firewall-cmd --get-icmptypes [--permanent]
    
  • 查看全部 icmp 阻塞规则
    1
    
    firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks
    
  • 启动 zone 中的 icmp 阻塞
    1
    2
    
    firewall-cmd [--zone=<zone>] --add-icmp-block=<icmptype> \
        [ --permanent | --timeout=seconds ]
    
  • 禁用 zone 中的 icmp 阻塞
    1
    
    firewall-cmd [--zone=<zone>] --remove-icmp-block=<icmptype> [--permanent]
    
  • 查询 zone 的 icmp 阻塞
    1
    
    firewall-cmd [--zone=<zone>] --query-icmp-block=<icmptype> [--permanent]
    

IPV4 源地址转换

  • 启动 zone 中 ipv4 源地址转换
    1
    2
    
    firewall-cmd [--zone=<zone>] --add-masquerade \
        [ --permanent | --timeout=seconds ]
    
  • 禁用 zone 中 ipv4 源地址转换
    1
    
    firewall-cmd [--zone=<zone>] --remove-masquerade [--permanent]
    
  • 查看 zone 中 ipv4 源地址转换
    1
    
    firewall-cmd [--zone=<zone>] --query-masquerade [--permanent]
    

端口转发

  • 查看全部端口转发规则
    1
    
    firewall-cmd [--permanent] [--zone=zone] --list-forward-ports
    
  • 启动 zone 中端口转发
    1
    2
    3
    
    firewall-cmd [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> \
        { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> } \
    [ --permanent | --timeout=seconds ]
    
  • 禁用 zone 中端口转发
    1
    2
    3
    
    firewall-cmd [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> \
        { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> } \
    [--permanent]
    
  • 查看 zone 中端口转发
    1
    2
    3
    
    firewall-cmd [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> \
        { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> } \
    [--permanent]
    

Rich Rules

  • 通用结构
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    firewall-cmd [--zone=<zone>] [ --permanent | --timeout=seconds ] \
        <--add|--remove>-rich-rule='rule [family=<ipv4|ipv6> \
        source address=<address[/mask]> [invert=<True|False>] \
        destination address=<address[/mask]> [invert=<True|False>] \
        service name=<service> \
        port port=<port>[-<port>] \
        protocol=<protocol> \
        icmp-block name=<icmptype> \
        masquerade \
        forward-port port=<port>[-<port>] protocol=<protocol> to-port=<port>[-<port>] to-address=<address> \
        log [prefix=<prefix text>] [level=<log level>] [limit value=<rate/duration>] \
        accept|reject [type=<reject type>]|drop'
    
  • 查看全部 rich rule
    1
    
    firewall-cmd [--permanent] [--zone=zone] --list-rich-rules
    
  • 具体参数解释见系统 man 手册
    1
    
    man firewalld.richlanguage 5
    

应急模式(panic)

  • 启动 panic,即断网
    1
    
    firewall-cmd --panic-on
    
  • 关闭 panic,即联网
    1
    
    firewall-cmd --panic-off
    
  • 查询应急模式
    1
    
    firewall-cmd --query-panic
    

重新载入(reload)

  • 重新载入防火墙,不中断用户连接
    1
    
    firewall-cmd --reload
    
  • 重新载入防火墙并中断用户连接
    1
    
    firewall-cmd --complete-reload
    

备注

  • 参数 –timeout 是让规则生效一段时间,过期自动删除,不能与 –permanent 一起使用

安装 MySQL

CentOS7 yum 安装 MySQL5.7

环境

  • CentOS 7.4 x86_64 最小安装
  • MySQL 5.7.20

安装 mysql yum 源

  • 下载 rpm 包

    1
    2
    3
    
    # repo 地址: https://repo.mysql.com/
    cd /root/
    curl -O https://repo.mysql.com/mysql57-community-release-el7.rpm
    
  • 安装 mysql 源

    1
    
    rpm -ivh /root/mysql57-community-release-el7.rpm
    
  • 更新 yum 缓存

    1
    2
    
    yum clean all
    yum makecache fast
    

安装 mysql

  • yum 安装 mysql 包

    1
    
    yum install mysql-community-server
    
  • 启动 mysql

Lvs 笔记

环境

角色 地址
负载分配服务器 192.168.1.209
tomcat 服务器1 192.168.1.207
tomcat 服务器2 192.168.1.208
VIP 192.168.1.250

LVS-DR

  • 配置负载分配服务器(192.168.1.209)
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    #在与 tomcat 服务器连通的网卡(eth0)上配置虚拟 IP(192.168.1.250)
    ip addr add 192.168.1.250/32 brd 192.168.1.250 dev eth0
    ip route add 192.168.1.250 dev eth0
    #开启转发
    echo 1 > /proc/sys/net/ipv4/ip_forward
    #安装 ipvsadm
    yum install ipvsadm
    ipvsadm -C
    ipvsadm -A -t 192.168.1.250:80 -s rr
    ipvsadm -a -t 192.168.1.250:80 -r 192.168.1.207:80 -g
    ipvsadm -a -t 192.168.1.250:80 -r 192.168.1.208:80 -g
    
  • 在两台 tomcat 服务器上都做如下配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    #禁用 arp 响应
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    #添加虚拟 IP
    ip addr add 192.168.1.250/32 brd 192.168.1.250 dev lo
    ip route add 192.168.1.250 dev lo
    #在个人浏览器中访问 http://192.168.1.250/webapp/
    

Yum 笔记

CentOS 配置本地 ISO 镜像源

上传 iso 文件

  • 上传 CentOS7 的 DVD iso 镜像文件到目标服务器,例如 /home/centos7.4.iso

挂载 iso 文件

  • 挂载该 iso 文件到操作系统的一个空目录中,例如 /mnt/ 下
    1
    
    mount -o loop /home/centos7.4.iso /mnt/
    

修改软件源文件

  • 备份全部的 .repo 文件

Oracle 基础

字符型

类型 大小 描述
varchar2 0~4000 可变长度字符串
nvarchar2 0~1000 Unicode字符串的可变长字符型数据
char 0~2000 定长字符型数据
nchar 0~1000 Unicode字符集定长字符型数据
long 0~2GB 变长字符串

数字型

类型 进制 描述
number(p,s) 十进制 p最大精度38位,s小数位数
float 二进制 126位整数

日期

类型 大小 描述
date 公元前4712-1-1~9999-12-31 存储日期和时间
timestamp 公元前4712-1-1~9999-12-31 精确到小数秒,显示上下午

其他数据类型

类型 大小 描述
blob 4GB 二进制
clob 4GB 字符串
bfile 视操作系统 存储非结构化数据到数据库外的文件中

创建表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE TABLE table_name
(
column_name datatype [NULL|NOT NULL],
...,
PRIMARY KEY(),
CONSTRAINT table_name constraint_name FOREIGN KEY (column_name) REFERENCE table_name(column_name) ON DELETE CASCADE,
CONSTRAINT constraint_name CHECK(condition),
CONSTRAINT constraint_name UNIQUE(column_name)
)
|AS SELECT column_name1,column_name2,...FROM source_table;
DROP TABLE table_name;

删除表

1
2
3
4
5
6
DROP TABLE table_name;
# 执行最快,删除数据、结构、索引、约束、触发器和索引,存储过程和索引invalid状态,直接生效,不可回滚,不释放空间
TRUNCATE TABLE table_name;
# 执行较快,只删除数据,直接生效,不可回滚,释放空间
DELETE FROM table_name [WHERE condition];
# 执行最慢,只删除数据,commit 后生效,可回滚,不释放空间

操作表列

1
2
3
4
5
ALTER TABLE table_name
ADD column_name datatype [NULL|NOT NULL]
|MODIFY column_name new_datatype|NULL|NOT NULL
|DROP COLUMN column_name;
-- 删除列时通常追加 CASCADE CONSTRAINTS ,以删除于该列有关的约束

操作主键

1
2
3
ALTER TABLE table_name
ADD CONSTRAINTS constraint_name PRIMARY KEY(column_name)
|DROP CONSTRAINTS constraint_name;

操作外键

1
2
3
ALTER TABLE table_name
ADD CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCE table_name(column_name) ON DELETE CASCADE
|DROP CONSTRAINT constraint_name;

操作CHECK约束

1
2
3
ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK(condition)
|DROP CONSTRAINT constraint_name;

操作UNIQUE约束

1
2
3
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE(column_name)
|DROP CONSTRAINT constraint_name;

添加数据

1
2
3
INSERT INTO table_name(column_name1,column_name2,...)
VALUES(data1,data2,...)
|SELECT column_name1,column_name2...FROM table_name2;

修改数据

1
UPDATE table_name SET column_name1=data1,column_name2=data2,...[WHERE condition];

删除数据

1
2
DELETE FROM table_name [WHERE condition];
TRUNCATE TABLE table_name;

查询数据

1
SELECT column_name1,column_name2,...FROM table_name [WHERE condition];

MERGE语句

1
MERGE INTO table_name1 USING table_name2 ON(condition) WHEN MATCHED THEN ... WHEN NOT MATCHED THEN ...;

SELECT 语句

1
SELECT [DISTINCT|ALL] select_list FROM table_list [WHERE ...] [GROUP BY ...] [HAVING ...] [ORDER BY ...];

select_list

1
*|[schema.] {table|view} .*|expr[	[AS ]c_alias]

expr

1
"||" 连接的字符串 | 函数

ORDER BY …

1
{expr|positon|c_alias} {ASC|DESC} {NULLS FIRST|NULLS LAST}[ {expr|positon|c_alias} {ASC|DESC} {NULLS FIRST|NULLS LAST},...]

模糊查询关键字like

1
'_'替代一个字符,'%'替代多个字符

从给定值中选取查询

1
IN(data1,data2,...)

连接

1
2
3
4
5
6
7
8
-- 连接,只能查询匹配记录
SELECT select_list FROM table_name1 INNER JOIN table_name2 ON condition;
-- 左外连接
SELECT select_list FROM table_name1 LEFT JOIN table_name2 ON condition;
-- 右外连接
SELECT select_list FROM table_name1 RIGHT JOIN table_name2 ON condition;
-- 全外连接
SELECT select_list FROM table_name1 FULL JOIN table_name2 ON condition;

内置函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
ABS(n)    -- n绝对值
MOD(n2,n1)    -- n2对n1取余
SIGN(n)    -- n的符号
CEIL(n)    -- 大于等于n的最小整数
FLOOR(n)    -- 小于等于n的最大整数
SQRT(n)    -- n的平方根
POWER(n2,n1)    -- n2的n1次幂
EXP(n)    -- e的n次幂
LOG(n1,n2)    -- n1为底n2的对数
LN(n)    -- n的自然对数
ROUND(n2,n1)    -- n2小数部分四舍五入至n1位
TRUNC(n2,n1)    -- n2截取至n1位
CHR(n)    -- 把n根据ASCII转换成字符
ASCII(char)    -- 参数首字母的ASCII值
LENGTH(char)    -- 字符串长度
SUBSTR(char,position[,substring_length])    -- 截取字符串
CONCAT(char1,char2)    -- 连接字符串
INSTR(string,substring[,position[,occurrence]])    -- 查找字符串
UPPER(char)    -- 转换成大写
LOWER(char)    -- 转换成小些
INITCAP(char)    -- 单词首字母大写
NLSSORT(char[,nslparam])    -- 按指定方式排序'NLS_SORT=SCHINESE_PINYIN_M'
REPLACE(char,search_string[,replacement_string])    -- 字符串替换,默认删除
RPAD(expr1,n[,expr2])    -- 用expr2右填充expr1至长度为n,默认空格
LPAD(expr1,n[,expr2])    -- 用expr2左填充expr1至长度为n,默认空格
TRIM([LEADING|TRAILING|BOTH] [trim_character FROM] trim_source)    -- 删除字符串首尾指定字符
SYSDATE    -- 获取系统当前日期
SYSTIMESTAMP    -- 获取系统当前时间
DBTIMEZONE    -- 获取数据库当前时区
ADD_MONTHS(date,integer)    -- 指定日期增加指定月份数
SESSIONTIMEZONE    -- 获取当前会话的时区
LAST_DAY(date)    -- 获取指定日期对应月份的最后一天
NEXT_DAY(date,char)    -- 获取下周char的日期
CURRENT_DATE    -- 获取会话时区的当前日期
EXTRACT(datetime)    -- 从指定时间中获取指定部分
MONTHS_BETWEEN(date1,date2)    -- 获取两个时间之间的月份数
NET_TIME(date,timezone1,timezone2)    -- 获取时区1中的时间转换到时区2后的时间
TO_CHAR(n[,fmt])    -- 转换为字符类型
TO_DATE(n[,fmt])    -- 转换为时间类型
TO_NUMBER(n[,fmt])    -- 转换为数字类型
LNNVL(condition)    -- 排除指定条件函数
NVL(expr1,expr2)    -- expr1为空时返回expr2
NVL2(expr1,expr2,expr3)    -- expr1为空时返回expr3,不为空返回expr2
AVG([DISTINCT|ALL ]expr)    -- 获取平均值
COUNT(*|[DISTINCT|ALL ]expr)    -- 获取数量
SUM([DISTINCT|ALL ]expr)    -- 获取和
SELECT USER FROM DUAL;    -- 返回当前会话的登录名
USERENV(param)    -- 返回当前会话的信息
SYS_CONTEXT(namespace,param)    -- 返回oracle已创建的context
DECODE(expr,search,result[,search1,result1...])    -- expr结果是search返回result

查看所有默认表空间

1
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;

查看指定用户默认表空间

1
SELECT DEFAULT_STAPCE,USERNAME FROM DBA_USERS WHERE USERNAME='username';

创建表空间

1
2
3
4
5
6
7
8
CREATE TABLESPACE tablespace_name
DATAFILE filename
SIZE size
[AUTOEXTEND [ON NEXT size|OFF]]
[MAXSIZE size]
[PERMANENT|TEMPORARY]     永久/临时表空间,默认永久
[EXTENT MANAGEMENT [DICTIONARY|LOCAL     字典/本地管理方式,默认本地
[AUTOALLOCATE|UNIFORM. [SIZE integer[K|M]]]];

重命名表空间

1
ALTER TABLESPACE oldname RENAME TO newname;

修改表空间大小

1
ALTER DATABASE DATAFILE filename RESIZE size;

增加表空间大小

1
ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size;

设置表空间读写状态

1
ALTER TABLESPACE tablespace_name READ {ONLY|WRITE};

设置表空间可用状态

1
ALTER TABLESPACE tablespace_name {ONLINE|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE]};

创建大文件表空间

1
CREATE BIGFILE TABLESPACE tablespace_name DATAFILE filename SIZE size;

删除表空间

1
2
3
DROP TABLESPACE tablespace_name
[INCLUDING CONTENTS AND DATAFILES]     数据文件删除
[CASCADE CONSTRAINTS];    完整性删除

查看表空间大小

1
SELECT TABLESPACE_NAME,FILE_NAME,BYTES FROM DBA_DATA_FILES WHERE TABLESPACE_NAME=tablespace_name;

查看表空间剩余 空间

1
SELECT TABLESPACE_NAME,BYTES FROM DBA_FREE_SPACES;

创建/修改用户

1
2
3
4
5
6
7
8
CREATE|ALTER
USER user_name
IDENTIFIED BY password
[DEFAULT TABLESPACE tablespace_name ]
[QUOTA size|UNLIMITED ON tablespace_name ]    用户使用表空间的最大值
[PROFILE profile ]    概要文件
[PASSWORD EXPIRE ]    用户密码过期
[ACCOUNT LOCK|UNLOCK];    默认锁定状态

删除用户

1
DROP USER user_name CASCADE;

授予系统权限

1
2
3
4
GRANT
system_privileges|ALL PRIVILEGES     权限
TO {user IDENTIFIED BY password|role }    用户/角色
[WITH ADMIN OPTION];    授予其他用户或角色系统权限

授予对象权限

1
2
3
4
5
6
GRANT
object_privilege|ALL     权限
ON schema.object     对象
TO user_name|role_name     用户/角色
[WITH ADMIN OPTION ]    授予其他用户或角色系统权限
[WITH THE GRANT ANY OBJECT];    授予其他用户或角色对象权限

撤销系统权限

1
2
REVOKE system_privilege FROM
user|role;

撤销对象权限

1
2
3
4
5
REVOKE
object_privilege |ALL
ON schema.object FROM
user_name|role_name
[CASCADE CONSTRAINTS];

数据字典

数据 字典
系统权限 DBA_SYS_PRIVS
对象权限 DBA_TAB_PRIVS
用户角色 DBA_ROLE_PRIVS

创建角色

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
CREATE|ALTER     //创建/修改
ROLE role_name
[NOT IDENTIFIED|IDENDIFIED BY [password]];
GRANT     //填充权限
system_privilege|ALL PRIVILEGES
TO role_name
[WITH ADMIN OPTION];
-- 角色创建完成后不能直接使用,需将角色赋予用户才能使用
GRANT role_name TO user_name;
SET ROLE role_name    -- 设置角色生效
SET ROLE ALL    -- 设置所有角色生效
SET ROLE ALL EXCEPT role_name    -- 设置只有role_name失效
SET ROLE NONE    -- 设置所有角色失效

删除角色

1
DROP ROLE role_name;

脱机备份(冷备份)/恢复

1
关闭数据库服务后直接复制需要的文件,包括数据文件和控制文件

联机备份(热备份)

1
2
3
4
5
6
7
8
9
ARCHIVE LOG LIST                                        查看本机数据库的日志状态
ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;   设置日志模式为归档
SHUTDOWN IMMEDIATE;                                     关闭数据库
STARTUP MOUNT;                                          启动mount实例
ALTER DATABASE ARCHIVELOG;                              更改数据库为归档日志模式
ALTER DATABASE OPEN;                                    更改数据库状态为打开模式
ALTER TABLESPACE tablespace_name BEGIN BACKUP;          开始备份数据库
复制文件到其他目录
ALTER TABLESPACE tablespace_name END BACKUP;            结束备份操作

恢复

1
2
3
4
5
6
7
ALTER SYSTEM ARCHIVE LOG CURRENT;                       归档当前日志
ALTER SYSTEM SWITCH LOGFILE;                            切换日志文件
SELECT * FROM v$RECOVER_FILE                            获取文件编号
ALTER DATABASE DATAFILE file_id OFFLINE DROP;           把要恢复的数据文件脱机
ALTER DATABASE OPEN;                                    更改数据库状态为打开模式
RECOVER DATAFILE file_id;                               恢复数据文件
ALTER DATABASE DATAFILE file_id ONLINE;                 设置数据文件联机

EXP工具导出数据

1
exp db_user/password                                  登陆数据库的用户名和密码,非SYS

EXP工具直接导出表

1
exp db_user/password file="filename.dmp" tables="table_name,..."

EXP工具导出表空间

1
exp db_user/password file="filename.dmp" tablespaces="tablespaces_name"

EXPDP导出数据

1
2
3
CREATE DIRECTORY directory_name AS 'file_name';         目录名称 文件名称
GRANT READ,WRITE ON DIRECTORY directory_name TO db_user;    授权用户使用该目录
#expdp db_user/password directory=directory_name dumpfile=file_name tables=table_name;

IMP导入数据

1
imp db_user/password

IMP直接导入表

1
imp db_user/password file="filename.dmp" tables="table_name,..."

IMPDP导入数据

1
impdp db_user_password

IMPDP直接导入表

1
impdp db_user/password directory=dir dumpfile=filename.dmp tables=table_name;

RMAN工具配置

1
2
3
4
5
6
CONN /AS SYSDBA;    连接恢复目录数据库
CREATE USER rman_user IDENTIFIED BY password DEFAULT TABLESPACE tablespace_name;    创建恢复用户
GRANT RECOVERY_CATALOG_OWNER TO rman_user;    为新创建的用户授权
#rman
CONN CATALOG rman_user/password;    连接新创建的用户
CREATE CATALOG;    创建恢复目录

RMAN工具使用

1
2
3
4
#rman target db_user/password@servicename catalog rman_user/password    连接恢复目录数据库
CONNECT TARGET db_user/password@servicename;    连接目标数据库
CONNECT CATALOG rman_user/password@servicename;    连接恢复目录数据库
REGISTER database;    在恢复目录数据库中注册数据库

手动分配通道

1
2
3
4
5
6
7
关闭目标数据库,启动到mount状态,运行:
run
{
    ALLOCATE CHANNEL channel_name1 DEVICE TYPE {sbt|disk};
    ...
    BACKUP [level] [backup type] [option]
}

自动分配通道

1
2
3
CONFIGURE DEVICE TYPE {sbt|disk} PARALLELISM n;    指定通道类型和名称
CONFIGURE DEFAULT DEVICE TYPE {sbt|disk};    指定默认设备类型
BACKUP [level] [backup type] [option];

BACKUP 参数

1
2
3
level           备份增量,1234或者FULL(全备份)
backup type     对象类型,databasedatafiletablespacecontrolfilecopyarchivelog all
option          channel备份使用的通道 maxsetsize定义备份集的最大值

RESTORE还原

1
2
RESTORE database_object;
database_object:    DATABASE(mount),TABLESPACE(open),DATAFILE,CONTROLFILE(mount),ARCHIVELOG,SPFILE(mount)

RECOVER同步恢复

1
2
RECOVER database_object;
database_object:    DATABASE(mount),TABLESPACE(open),DATAFILE

CentOS7.4 静默安装 Oracle11g

环境

  • CentOS7.4 最小安装
  • 数据库软件
    • linux.x64_11gR2_database_1of2.zip
    • linux.x64_11gR2_database_2of2.zip

操作系统配置

  • 关闭 SELinux

    1
    
    sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
    
  • 关闭防火墙,或者放行 tcp 1521 端口

    1
    2
    
    systemctl disable firewalld
    systemctl stop firewalld
    
  • 检查交换内存(swap)大小,建议内存一半以上,如果没有设置虚拟内存,可参考如下操作