CherieLi Student

收获不止oracle Tpch

2023-07-09

命名规范

表以t_为前缀;
视图以v_为前缀;
同义词以s_为前缀;
簇表以c_为前缀;
序列以seq_为前缀;
存储过程以p_为前缀;
函数以f_为前缀;
包以pkg_为前缀;
类以type_为前缀;
外键以fk_为前缀;
主键以pk_为前缀;
唯一索引以ux_为前缀;
普通索引以idx_为前缀;
位图索引以bx_为前缀;
函数索引以fx_为前缀

小技巧

只取一行:https://www.jianshu.com/p/7f5f4098a2d0

TPC-H

1、官网下载最新的TPC-H的zip包

http://tpc.org/tpch/default.asp

2、解压配置与安装

解压后,进入dbgen目录

cp makefile.suite Makefile

vi Makefile

修改配置参数:

CC=gcc
DATABASE=ORACLE
MACHINE=LINUX
WORKLOAD=TPCH

编译

make

3、TPC-H数据生成

./dbgen -s 100 -f  生成100G的数据,ll -h *.tbl可查看
./dbgen -vf -s 1  生成标准1G数据
./dbgen -s 0.01 -f 生成少量数据  

4、转csv数据

for i in `ls *.tbl`; do sed 's/|$//' $i > ${i/tbl/csv}; done

将tbl文件转成csv格式并去掉行尾|分割符

转成.csv格式的文件在 ../dbgen目录下,可以通过ll -h *.csv查到

  24M  customer.csv
 719M  lineitem.csv
 2.2K  nation.csv
 163M  orders.csv
 23M   part.csv
113M   partsupp.csv
 384   region.csv
1.4M   supplier.csv

CREATE TABLE region (
          R_REGIONKEY       INTEGER         NOT NULL,
          R_NAME            CHAR(25)        NOT NULL,
          R_COMMENT         VARCHAR(152)
        ) ORGANIZATION LSC
ORDER BY (R_REGIONKEY);
      
CREATE TABLE nation (
          N_NATIONKEY       INTEGER         NOT NULL,
          N_NAME            CHAR(25)        NOT NULL,
          N_REGIONKEY       INTEGER         NOT NULL,
          N_COMMENT         VARCHAR(152)
        ) ORGANIZATION LSC
        ORDER BY (N_NATIONKEY);
CREATE TABLE supplier (
          S_SUPPKEY         INTEGER         NOT NULL,
          S_NAME            CHAR(25)        NOT NULL,
          S_ADDRESS         VARCHAR(40)     NOT NULL,
          S_NATIONKEY       INTEGER         NOT NULL,
          S_PHONE           CHAR(15)        NOT NULL,
          S_ACCTBAL         DECIMAL(15,2)   NOT NULL,
          S_COMMENT         VARCHAR(101)    NOT NULL
        ) ORGANIZATION LSC
ORDER BY (S_SUPPKEY)
PARTITION BY HASH(S_SUPPKEY) PARTITIONS 16;

CREATE TABLE part (
          P_PARTKEY         INTEGER         NOT NULL,
          P_NAME            VARCHAR(55)     NOT NULL,
          P_MFGR            CHAR(25)        NOT NULL ENCODING DICTIONARY(RLE),
          P_BRAND           CHAR(10)        NOT NULL ENCODING DICTIONARY(RLE),
          P_TYPE            VARCHAR(25)     NOT NULL ENCODING DICTIONARY(RLE),
          P_SIZE            INTEGER         NOT NULL,
          P_CONTAINER       CHAR(10)        NOT NULL ENCODING DICTIONARY(RLE),
          P_RETAILPRICE     DECIMAL(15,2)   NOT NULL,
          P_COMMENT         VARCHAR(23)     NOT NULL
        ) ORGANIZATION LSC
        ORDER BY (P_PARTKEY)
        PARTITION BY HASH(P_PARTKEY) PARTITIONS 16;

        CREATE TABLE partsupp (
          PS_PARTKEY        INTEGER         NOT NULL,
          PS_SUPPKEY        INTEGER         NOT NULL,
          PS_AVAILQTY       INTEGER         NOT NULL,
          PS_SUPPLYCOST     DECIMAL(15,2)   NOT NULL,
          PS_COMMENT        VARCHAR(199)    NOT NULL
        ) ORGANIZATION LSC
        ORDER BY (PS_SUPPKEY, PS_PARTKEY)
        PARTITION BY HASH(PS_PARTKEY) PARTITIONS 16;
        CREATE TABLE customer (
          C_CUSTKEY         INTEGER         NOT NULL,
          C_NAME            VARCHAR(25)     NOT NULL,
          C_ADDRESS         VARCHAR(40)     NOT NULL,
          C_NATIONKEY       INTEGER         NOT NULL,
          C_PHONE           CHAR(15)        NOT NULL,
          C_ACCTBAL         DECIMAL(15,2)   NOT NULL,
          C_MKTSEGMENT      CHAR(10)        NOT NULL ENCODING DICTIONARY(RLE),
          C_COMMENT         VARCHAR(117)    NOT NULL
        ) ORGANIZATION LSC
        ORDER BY (C_CUSTKEY)
        PARTITION BY HASH(C_CUSTKEY) PARTITIONS 16;

        CREATE TABLE orders (
          O_ORDERKEY        INTEGER          NOT NULL,
          O_CUSTKEY         INTEGER         NOT NULL,
          O_ORDERSTATUS     CHAR(1)         NOT NULL,
          O_TOTALPRICE      DECIMAL(15,2)   NOT NULL,
          O_ORDERDATE       DATE            NOT NULL,
          O_ORDERPRIORITY   CHAR(15)        NOT NULL ENCODING DICTIONARY(RLE),
          O_CLERK           CHAR(15)        NOT NULL ENCODING DICTIONARY(RLE),
          O_SHIPPRIORITY    INTEGER         NOT NULL,
          O_COMMENT         VARCHAR(79)     NOT NULL
        ) ORGANIZATION LSC
        ORDER BY(O_ORDERDATE, O_ORDERKEY)
        PARTITION BY HASH(O_ORDERKEY) PARTITIONS 16;
        CREATE TABLE lineitem (
          L_ORDERKEY       INTEGER          NOT NULL,
          L_PARTKEY         INTEGER         NOT NULL,
          L_SUPPKEY         INTEGER         NOT NULL,
          L_LINENUMBER      INTEGER         NOT NULL,
          L_QUANTITY        DECIMAL(15,2)   NOT NULL,
          L_EXTENDEDPRICE   DECIMAL(15,2)   NOT NULL,
          L_DISCOUNT        DECIMAL(15,2)   NOT NULL,
          L_TAX             DECIMAL(15,2)   NOT NULL,
          L_RETURNFLAG      CHAR(1)         NOT NULL,
          L_LINESTATUS      CHAR(1)         NOT NULL,
          L_SHIPDATE        DATE            NOT NULL,
          L_COMMITDATE      DATE            NOT NULL,
          L_RECEIPTDATE     DATE            NOT NULL,
          L_SHIPINSTRUCT    CHAR(25)        NOT NULL ENCODING DICTIONARY(RLE),
          L_SHIPMODE        CHAR(10)        NOT NULL ENCODING DICTIONARY(RLE),
          L_COMMENT         VARCHAR(44)     NOT NULL
        ) ORGANIZATION LSC
        ORDER BY(L_SHIPDATE, L_ORDERKEY)
        PARTITION BY HASH(L_ORDERKEY) PARTITIONS 16;
load data
        options(DEGREE_OF_PARALLELISM=2,TRIM=NOTRIM,ENABLE_BULK=TRUE,DECODER_THREAD_TIMES=1)
        infile 'region.csv' without embedded fields terminated by '|'
        append into table region(R_REGIONKEY, R_NAME, R_COMMENT);

        load data
        options(DEGREE_OF_PARALLELISM=2,TRIM=NOTRIM,ENABLE_BULK=TRUE,DECODER_THREAD_TIMES=1)
        infile 'nation.csv' without embedded fields terminated by '|'
        append into table nation(N_NATIONKEY, N_NAME, N_REGIONKEY, N_COMMENT);

        load data
        options(DEGREE_OF_PARALLELISM=2,TRIM=NOTRIM,ENABLE_BULK=TRUE,DECODER_THREAD_TIMES=1)
        infile 'supplier.csv' without embedded fields terminated by '|'
        append into table supplier(S_SUPPKEY, S_NAME, S_ADDRESS, S_NATIONKEY, S_PHONE, S_ACCTBAL, S_COMMENT);

        load data
        options(DEGREE_OF_PARALLELISM=2,TRIM=NOTRIM,ENABLE_BULK=TRUE,DECODER_THREAD_TIMES=1)
        infile 'part.csv' without embedded fields terminated by '|'
        append into table part(P_PARTKEY, P_NAME, P_MFGR, P_BRAND, P_TYPE, P_SIZE, P_CONTAINER, P_RETAILPRICE, P_COMMENT);

        load data
        options(DEGREE_OF_PARALLELISM=2,TRIM=NOTRIM,ENABLE_BULK=TRUE,DECODER_THREAD_TIMES=1)
        infile 'partsupp.csv' without embedded fields terminated by '|'
        append into table partsupp(PS_PARTKEY, PS_SUPPKEY, PS_AVAILQTY, PS_SUPPLYCOST, PS_COMMENT);

        load data
        options(DEGREE_OF_PARALLELISM=2,TRIM=NOTRIM,ENABLE_BULK=TRUE,DECODER_THREAD_TIMES=1)
        infile 'customer.csv' without embedded fields terminated by '|'
        append into table customer(C_CUSTKEY, C_NAME, C_ADDRESS, C_NATIONKEY, C_PHONE, C_ACCTBAL, C_MKTSEGMENT, C_COMMENT);

        load data
        options(DEGREE_OF_PARALLELISM=2,TRIM=NOTRIM,ENABLE_BULK=TRUE,DECODER_THREAD_TIMES=1)
        infile 'orders.csv' without embedded fields terminated by '|'
        append into table orders(O_ORDERKEY, O_CUSTKEY, O_ORDERSTATUS, O_TOTALPRICE, O_ORDERDATE, O_ORDERPRIORITY, O_CLERK, O_SHIPPRIORITY, O_COMMENT);
        load data
        options(DEGREE_OF_PARALLELISM=2,TRIM=NOTRIM,ENABLE_BULK=TRUE,DECODER_THREAD_TIMES=1)
        infile 'lineitem.csv' without embedded fields terminated by '|'
        append into table lineitem(L_ORDERKEY, L_PARTKEY, L_SUPPKEY, L_LINENUMBER, L_QUANTITY, L_EXTENDEDPRICE, L_DISCOUNT, L_TAX, L_RETURNFLAG, L_LINESTATUS, L_SHIPDATE, L_COMMITDATE, L_RECEIPTDATE, L_SHIPINSTRUCT, L_SHIPMODE, L_COMMENT

创建ctrl文件 eg:tpch_lineitem.ctl

LOAD DATA
INFILE '/data/tpch/lineitem.csv'
fields terminated by '|'  optionally enclosed by '"'
APPEND INTO TABLE LINEITEM
(
L_ORDERKEY,
L_PARTKEY,
L_SUPPKEY,
L_LINENUMBER,
L_QUANTITY,
L_EXTENDEDPRICE,
L_DISCOUNT,
L_TAX   ,
L_RETURNFLAG,
L_LINESTATUS,
L_SHIPDATE,
L_COMMITDATE,
L_RECEIPTDATE,
L_SHIPINSTRUCT,
L_SHIPMODE,
L_COMMENT
)

ORA - 错误码 完整版:https://docs.oracle.com/en/error-help/db/ora-index.html

安装oracle
1、准备工作
linux版本:CentOS Linux release 7.9.2009
Oracle版本:oracle-19c
拷包
注:下文 # 开头表示当前用户为 root、$ 开头表示当前用户为 oracle.
创建用户和用户组
# useradd oracle
# passwd oracle (修改用户 oracle 的密码为 oracle)
# groupadd oinstall
# groupadd dba
# groupadd oper
# usermod oracle -g oinstall -G dba,oper
关闭防火墙
# systemctl stop firewalld.service
# systemctl status firewalld.service
2、安装步骤
创建 oracle 相关目录
# mkdir -p /home/oracle/oracle/product/19.3.0/db_1
# mkdir -p /home/oracle/oracle/oraInventory
解压安装包
# unzip db.zip -d /home/oracle/oracle/product/19.3.0/db_1
目录授权
# chown -R oracle:oinstall /home/oracle/oracle/
配置环境变量
# su - oracle
$ cat /home/oracle/.bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export LANG=en_US.UTF-8
export ORACLE_BASE=/home/oracle/oracle
export ORACLE_HOME=/home/oracle/oracle/product/19.3.0/db_1
export ORACLE_SID=oracledb
export NLS_DATA_FORMAT="yyyy-mm-dd HH24:MI:SS"
export NLS_LANG=AMERICAN_AMERICA.UTF8
export PATH=.:$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin
$ source /home/oracle/.bash_profile
配置响应变量
$ cd $ORACLE_HOME/install/response
$ cp db_install.rsp db_install.rsp.bak
编辑文件
$ cat db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/home/oracle/oracle/oraInventory
ORACLE_BASE=/home/oracle/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.rootconfig.executeRootScript=false
安装 oracle 所需的依赖库,通过 yum install {包名} 来验证是否安装,例如 yum install binutils
binutils-2.23.52.0.1-12.el7.x86_64
compat-libcap1-1.10-3.el7.x86_64
gcc-4.8.2-3.el7.x86_64
gcc-c++-4.8.2-3.el7.x86_64
glibc-2.17-36.el7.i686
glibc-2.17-36.el7.x86_64
glibc-devel-2.17-36.el7.i686
glibc-devel-2.17-36.el7.x86_64
ksh
libaio-0.3.109-9.el7.i686
libaio-0.3.109-9.el7.x86_64
libaio-devel-0.3.109-9.el7.i686
libaio-devel-0.3.109-9.el7.x86_64
libgcc-4.8.2-3.el7.i686
libgcc-4.8.2-3.el7.x86_64
libstdc++-4.8.2-3.el7.i686
libstdc++-4.8.2-3.el7.x86_64
libstdc++-devel-4.8.2-3.el7.i686
libstdc++-devel-4.8.2-3.el7.x86_64
libXi-1.7.2-1.el7.i686
libXi-1.7.2-1.el7.x86_64
libXtst-1.2.2-1.el7.i686
libXtst-1.2.2-1.el7.x86_64
make-3.82-19.el7.x86_64
sysstat-10.1.5-1.el7.x86_64
使用下面指令,检查依赖软件包
# yum install binutils-2.* compat-libstdc++-33* elfutils-libelf-0.* elfutils-libelf-devel-* gcc-4.* gcc-c++-4.*
glibc-2.* glibc-common-2.* glibc-devel-2.* glibc-headers-2.* ksh-2* libaio-0.* libaio-devel-0.* libgcc-4.*
libstdc++-4.* libstdc++-devel-4.* make-3.* sysstat-7.* unixODBC-2.* unixODBC-devel-2.* pdksh*
修改内核参数
# cat /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
fs.file-max = 6815744 # 设置最大打开文件数
fs.aio-max-nr = 1048576
kernel.shmall = 2097152 # 共享内存的总量,8G内存设置:2097152*4k/1024/1024
kernel.shmmax = 10737418240 # 最大共享内存的段大小
kernel.shmmni = 4096 # 整个系统共享内存端的最大数
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65535 # 可使用的IPv4端口范围
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
# sysctl -p # 执行该命令以上配置生效
配置 limit.conf
对oracle用户设置限制,提高软件运行性能
# cat /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
执行安装
$ cd $ORACLE_HOME
$ ./runInstaller -silent -responseFile $ORACLE_HOME/install/response/db_install.rsp
出现 Successfully Setup Software(Warnings). 表示执行成功;否则如果执行失败,打屏会提示详情可见 log 日志,请自行去看 log
根据提示执行 (需要切成 root 权限)
# chown root:root /home/oracle/oracle/oraInventory/orainstRoot.sh
# chown root:root $ORACLE_HOME/root.sh
# /home/oracle/oracle/oraInventory/orainstRoot.sh
# ORACLE_HOME/root.sh
没有报错即 oracle 软件安装成功
配置监听
$ cd $ORACLE_HOME/assistants/netca/ # 必须切换到该目录下执行创建监听,否则注册监听失败
$ netca /silent /responseFile $ORACLE_HOME/assistants/netca/netca.rsp
创建数据库
$ cd $ORACLE_HOME/assistants/dbca/
$ cp dbca.rsp dbca.rsp.bak
$ cat dbca.rsp # 修改如下内容:
gdbName=oracledb
sid=oracledb
databaseConfigType=SI
templateName=General_Purpose.dbc
sysPassword=oracle
systemPassword=oracle
emConfiguration=DBEXPRESS
dbsnmpPassword=oracle
characterSet=UTF8
执行安装
$ dbca -silent -createDatabase -responseFile $ORACLE_HOME/assistants/dbca/dbca.rsp
(注意,建库过程中时间比较长,需要耐心等待)
完成100%进度后,表示安装完成。
登录连接数据库

本地连接:
su - oracle                                     
sqlplus / as sysdba
startup;
shutdown immediate;
远程连接:sqlplus system/oracle@192.168.*.*:端口号/oracledb

重启数据库:
shutdown immediate
startup

oracle 连接sys用户:rlwrap sqlplus / as sysdba
oracle unwrap解密工具: https://www.codecrete.net/UnwrapIt/

date format设置显示时分秒 alter session set date_format = ‘yyyy-mm-dd hh24:mi:ss’

https://www.cnblogs.com/wcwen1990/p/6656618.html oracle执行计划

tpcc
TPCC  是由 TPC(Transaction Processing Performance Council) 非盈利组织推出的一套基准测试程序,主要用于OLTP类应用的测试;

       它由一系列的 OLTP 工作流组成,包括查询,更新及队列式小批量事务在内的广泛数据库功能。它模拟了一个典型的 OLTP 应用环境中的活动,这些活动由一系列复杂的事务组成。TPC-C 工作流应该具备以下特性:

适当复杂的 OLTP 事务
在线和离线事务执行模型
多用户
适当的系统和应用执行时间
大量的磁盘输入和输出
事务完整性(ACID)
随机的数据访问
数据库由各种大小,属性和关系的表组成。

TPC-C 系统需要处理的交易有以下五种:

New-Order: 客户输入一笔新的订货交易
Payment:更新客户账户余额以反应其支付状况
Delivery:发货(批处理交易)
Order-Status:查询客户最近交易的状态
Stock-Level:查询仓库库存状况,以便能够及时补货。
各个类型交易默认配置比例参数(共100%)

newOrderWeight = 45
paymentWeight = 43
orderStatusWeight = 4
deliveryWeight = 4
stockLevelWeight = 4
流量指标(Throughput,简称tpmC):按照TPC组织的定义,流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这4种交易的同时,每分钟可以处理多少个新订单交易。所有交易的响应时间必须满足TPC-C测试规范的要求,且各种交易数量所占的比例也应该满足TPC-C测试规范的要求。在这种情况下,流量指标值越大说明系统的联机事务处理能力越高。
按照TPC组织的定义,流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这4种交易的同时,每分钟可以处理多少个新订单交易。所有交易的响应时间必须满足TPC-C测试规范的要求,且各种交易数量所占的比例也应该满足TPC-C测试规范的要求。在这种情况下,流量指标值越大说明系统的联机事务处理能力越高。

oracle其他

Oracle 里面有个叫做spfile的东西,就是动态参数文件,里面设置了Oracle 的各种参数。所谓的动态,就是说你可以在不关闭数据库的情况下,
更改数据库参数,记录在spfile里面。更改参数的时候,有4种scope选项。scope就是范围
scope=spfile 仅仅更改spfile里面的记载,不更改内存,也就是不立即生效,而是等下次数据库启动生效。有一些参数只允许用这种方法更改
修改sysdate的格式就只能使用这种方式。
scope=memory 仅仅更改内存,不改spfile。也就是下次启动就失效了
scope=both 内存和spfile都更改
不指定scope参数,等同于scope=both.

三权分立:

内置admin用户(DBA,SECURITY_ADMIN, AUDIT_ADMIN),内置对应角色。

**!搜索时,按以下顺序:**

0. 搜索用户是否有ALL权限

1. 搜索用户的system role

2. 搜索用户的object role

3. 搜索在此session上缓存的用户的normal role

	- 搜索normal role具有的system privilege

	- 搜索normal role具有的object privilege

4. 搜索用户的normal role被级联授权的其他role,其他role也按步骤3进行搜索

 **任一步骤找到权限后,终止,如果搜索完所有的role仍无,则认定没有权限**

上一篇 Install

下一篇 软考

Comments

Content