oracle11g笔记
阅读原文时间:2023年07月15日阅读:2

#!/bin/bash
#安装oracle110203

pageDir="/opt/tools/oracle"
bdFile="/tmp/bdFile.txt"
opassword="oracle"

check_ok(){
if [ $? != ]
then
echo "Error, Check the error log."
exit
fi
}

myum(){
if ! rpm -qa|grep -q "^$1"
then
yum install -y $
check_ok
else
echo $ already installed.
fi
}

check_server(){
if ! grep -q "$1" "$bdFile"
then
"$1"
fi
}

install_oracleinit(){
for i in binutils compat-libstdc++- compat-libstdc++-.i686 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel make sysstat unixODBC unixODBC-devel
#centos7
#for i in binutils compat-libstdc++-33* elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++* make sysstat unixODBC unixODBC-devel
do
myum $i
done

if ! grep -q oinstall /etc/group  
then  
    /usr/sbin/groupadd oinstall  
    check\_ok  
fi

if ! grep -q  dba /etc/group  
then  
    /usr/sbin/groupadd dba  
    check\_ok  
fi

if ! grep -q oracle /etc/passwd  
then  
    /usr/sbin/useradd -g oinstall -G dba oracle  
    check\_ok  
fi

if ! grep -q oracle /etc/sudoers  
then  
    echo "oracle    ALL=(ALL)     NOPASSWD: ALL" >> /etc/sudoers  
fi

echo  $opassword | passwd --stdin oracle  
cat << EOF > /etc/sysctl.conf  

kernel.sem =
fs.file-max =
net.ipv4.ip_local_port_range =
net.core.rmem_default =
net.core.rmem_max =
net.core.wmem_default =
net.core.wmem_max =
fs.aio-max-nr =
EOF

/sbin/sysctl -p  
check\_ok

#su oracle  
#check\_ok  
if ! grep -q oracle /etc/security/limits.conf  
then  
    echo "oracle    soft    nofile    1024" >> /etc/security/limits.conf  
    echo "oracle    hard    nofile    65536" >> /etc/security/limits.conf  
    echo "oracle    soft    nproc     2047" >> /etc/security/limits.conf  
    echo "oracle    hard    nproc     16384" >> /etc/security/limits.conf  
fi

if ! grep -q "pam\_limits.so" /etc/pam.d/login  
then  
    echo "session    required    /lib64/security/pam\_limits.so" >> /etc/pam.d/login  
    echo "session    required    pam\_limits.so" >> /etc/pam.d/login  
fi

if ! grep -q "oracle" /etc/profile/env.sh  
then  
    echo "if \[ \\$USER == "oracle" \]; then" >> /etc/profile/env.sh  
    echo "    if \[ $SHELL == "/bin/ksh" \]; then" >> /etc/profile/env.sh  
    echo "        ulimit -p 16384" >> /etc/profile/env.sh  
    echo "        ulimit -n 65536" >> /etc/profile/env.sh  
    echo "    else" >> /etc/profile/env.sh  
    echo "        ulimit -u 16384 -n 65536" >> /etc/profile/env.sh  
    echo "    fi" >> /etc/profile/env.sh  
    echo "fi" >> /etc/profile/env.sh  
fi

#close selinux  
#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  
#selinux\_s=\`getenforce\`  
#if \[ $selinux\_s == "Enforcing"  -o $selinux\_s == "enforcing" \]  
#then  
#    setenforce  
#fi  
#

\[ -f /etc/oraInst.loc \] || touch /etc/oraInst.loc  
  cat << EOF > /etc/oraInst.loc  

inventory_loc=/opt/oracle/oraInventory
inst_group=oinstall
EOF
chown oracle:oinstall /etc/oraInst.loc
chmod /etc/oraInst.loc

echo "install\_oracleinit ok"  
echo "install\_oracleinit" >> $bdFile  

}

install_oracle11g(){

#u=\`whoami\`  
#\[ "$u" == "root" \] || su root  
#check\_ok  
\[ -d /opt/oracle \] || mkdir -p /opt/oracle  
chown -R oracle:oinstall /opt/oracle/  
chmod -R  /opt/oracle/

  #u=\`whoami\`  
  #\[ "$u" == "oracle" \] || su oracle

  if ! grep -q "ORACLE\_BASE" /home/oracle/.bash\_profile  
  then  
      echo "umask 022" >> /home/oracle/.bash\_profile  
      echo "export ORACLE\_BASE=/opt/oracle" >> /home/oracle/.bash\_profile  
      echo "export ORACLE\_SID=orcl" >> /home/oracle/.bash\_profile  
      echo "export ORACLE\_HOME=\\$ORACLE\_BASE/product/11.2.0/db\_1" >> /home/oracle/.bash\_profile  
    echo "export TNS\_ADMIN=\\$ORACLE\_HOME/network/admin" >> /home/oracle/.bash\_profile  
    echo "export PATH=.:\\${PATH}:\\$HOME/bin:\\$ORACLE\_HOME/bin" >> /home/oracle/.bash\_profile  
    echo "export PATH=\\${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin" >> /home/oracle/.bash\_profile  
    echo "export LD\_LIBRARY\_PATH=\\${LD\_LIBRARY\_PATH}:\\$ORACLE\_HOME/lib" >> /home/oracle/.bash\_profile  
    echo "export LD\_LIBRARY\_PATH=\\${LD\_LIBRARY\_PATH}:\\$ORACLE\_HOME/oracm/lib" >> /home/oracle/.bash\_profile  
    echo "export LD\_LIBRARY\_PATH=\\${LD\_LIBRARY\_PATH}:/lib:/usr/lib:/usr/local/lib" >> /home/oracle/.bash\_profile  
    echo "export CLASSPATH=\\${CLASSPATH}:\\$ORACLE\_HOME/JRE" >> /home/oracle/.bash\_profile  
    echo "export CLASSPATH=\\${CLASSPATH}:\\$ORACLE\_HOME/JRE/lib" >> /home/oracle/.bash\_profile  
    echo "export CLASSPATH=\\${CLASSPATH}:\\$ORACLE\_HOME/jlib" >> /home/oracle/.bash\_profile  
    echo "export CLASSPATH=\\${CLASSPATH}:\\$ORACLE\_HOME/rdbms/jlib" >> /home/oracle/.bash\_profile  
    echo "export CLASSPATH=\\${CLASSPATH}:\\$ORACLE\_HOME/network/jlib" >> /home/oracle/.bash\_profile  
    echo "export LIBPATH=\\${CLASSPATH}:\\$ORACLE\_HOME/lib:\\$ORACLE\_HOME/ctx/lib" >> /home/oracle/.bash\_profile  
    echo "export ORACLE\_OWNER=oracle" >> /home/oracle/.bash\_profile  
    echo "export SPFILE\_PATH=\\$ORACLE\_HOME/dbs" >> /home/oracle/.bash\_profile  
    echo "export ORA\_NLS10=\\$ORACLE\_HOME/nls/data" >> /home/oracle/.bash\_profile  
  fi    

  source /home/oracle/.bash\_profile  
  check\_ok

\[ -d /home/oracle/etc \] || mkdir -p /home/oracle/etc  
\[ -f /home/oracle/etc/db\_install.rsp \] || touch /home/oracle/etc/db\_install.rsp  
cat << EOF > /home/oracle/etc/db\_install.rsp  

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=`hostname`
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/opt/oracle/oraInventory
SELECTED_LANGUAGES=en,zh_CN,zh_TW
ORACLE_HOME=/opt/oracle/product/11.2./db_1
ORACLE_BASE=/opt/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.EEOptionsSelection=false
oracle.install.db.optionalComponents=oracle.rdbms.partitioning:11.2.0.3.,oracle.oraolap:11.2.0.3.,oracle.rdbms.dm:11.2.0.3.,oracle.rdbms.dv:11.2.0.3.,oracle.rdbms.lbac:11.2.0.3.,oracle.rdbms.rat:11.2.0.3.
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oinstall
oracle.install.db.CLUSTER_NODES=
oracle.install.db.isRACOneInstall=
oracle.install.db.racOneServiceName=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=orcl
oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=true
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=oracle
oracle.install.db.config.starterdb.password.SYS=oracle
oracle.install.db.config.starterdb.password.SYSTEM=oracle
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
PROXY_REALM=
COLLECTOR_SUPPORTHUB_URL=
oracle.installer.autoupdates.option=
oracle.installer.autoupdates.downloadUpdatesLoc=
AUTOUPDATES_MYORACLESUPPORT_USERNAME=
AUTOUPDATES_MYORACLESUPPORT_PASSWORD=
EOF

chown -R oracle:oinstall /home/oracle  
chmod  /home/oracle/etc/\*.rsp

cd $pageDir  
  #\[ -f linux.x64\_11gR2\_database\_1of2.zip \] || (echo "not linux.x64\_11gR2\_database\_1of2.zip file..";exit 1)  
  #\[ -f linux.x64\_11gR2\_database\_2of2.zip \] || (echo "not linux.x64\_11gR2\_database\_2of2.zip file..";exit 1)  
  \[ -f p10404530\_112030\_Linux-x86-64\_1of7.zip \] || (echo "not p10404530\_112030\_Linux-x86-64\_1of7.zip file..";exit 1)  
  \[ -f p10404530\_112030\_Linux-x86-64\_2of7.zip \] || (echo "not p10404530\_112030\_Linux-x86-64\_2of7.zip file..";exit 1)  
  if \[ ! -d database \]  
then  
    unzip p10404530\_112030\_Linux-x86-64\_1of7.zip  
    check\_ok  
    unzip p10404530\_112030\_Linux-x86-64\_2of7.zip  
    check\_ok  
fi  
cd database  
su -l -c "$pageDir/database/runInstaller -silent -force -responseFile /home/oracle/etc/db\_install.rsp" oracle  

#忽悠检查
     #su -l -c "$pageDir/database/runInstaller -ignoreSysPrereqs -ignorePrereq -silent -force -responseFile /home/oracle/etc/db_install.rsp" oracle

sleep 600
check_ok
/opt/oracle/product/11.2.0/db_1/root.sh
check_ok

echo "install\_oracle11g" >>  "$bdFile"  
echo "install\_oracle11g install ok"  

}

install_oracle11g_db(){

\[ -f /home/oracle/etc/dbca.rsp \] || touch /home/oracle/etc/dbca.rsp  
cat << EOF > /home/oracle/etc/dbca.rsp  

[GENERAL]
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "orcl"
SID = "orcl"
TEMPLATENAME = "General_Purpose.dbc"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
DATAFILEDESTINATION = "/opt/oracle/oradata"
RECOVERYAREADESTINATION = "/opt/oracle/flash_recovery_area"
CHARACTERSET = "AL32UTF8"
NATIONALCHARACTERSET= "UTF8"
EOF
chown -R oracle:oinstall /home/oracle
chmod 700 /home/oracle/etc/*.rsp

su -l -c " /opt/oracle/product/11.2.0/db\_1/bin/dbca -silent -responseFile /home/oracle/etc/dbca.rsp" oracle  
check\_ok  
echo "install\_oracle11g\_db" >>  "$bdFile"  
echo "install\_oracle11g\_db install ok"  

}

check_server install_oracleinit
check_server install_oracle11g
check_server install_oracle11g_db

#!/bin/bash

. /etc/init.d/functions
oracle_home=/opt/oracle/product/11.2./db_1
oracle_bin=$oracle_home/bin
function_start_oracle()
{
printf "Starting oracle…\n"
$oracle_bin/lsnrctl start >& > /dev/null &
export ORACLE_SID=orcl
$oracle_bin/sqlplus /nolog <<EOF
conn / as sysdba
startup
exit
EOF

}
function_stop_oracle()
{
printf "Stoping oracle…\n"
$oracle_bin/lsnrctl stop >& > /dev/null &
export ORACLE_SID=orcl
$oracle_bin/sqlplus /nolog <<EOF
conn / as sysdba
shutdown immediate;
#shutdown abort; #强制关机
exit
EOF
}
function_restart_oracle()
{
printf "Restarting oracle…\n"
function_stop_oracle
sleep
function_start_oracle
}
if [ "$1" = "start" ]; then
function_start_oracle
elif [ "$1" = "stop" ]; then
function_stop_oracle
elif [ "$1" = "restart" ]; then
function_restart_oracle
else
printf "Usage: {start|stop|restart}\n"
fi

一、Oracle数据库几种启动方式

、startup nomount

  非安装启动,这种方式下启动可执行:重建控制文件、重建数据库,读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。

、startup mount (dbname)

  安装启动,这种方式启动下可执行:数据库日志归档、数据库介质恢复、使数据文件联机或脱机、重新定位数据文件、重做日志文件。

  执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,但此时不对数据文件和日志文件进行校验检查。

、startup open (dbname)

  先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,这种方式下可访问数据库中的数据。

、startup 等于以下三个命令

  startup nomount

  alter database mount

  alter database open

、startup restrict

  约束方式启动,这种方式能够启动数据库,但只允许具有一定特权的用户访问,非特权用户访问时,会出现以下提示:

  ERROR:ORA-: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用

、startup force

  强制启动方式,当不能关闭数据库时,可以用startup force来完成数据库的关闭,先关闭数据库,再执行正常启动数据库命令

、startup pfile=参数文件名

  带初始化参数文件的启动方式,先读取参数文件,再按参数文件中的设置启动数据库

  例:startup pfile=E:\Oracle\admin\oradb\pfile\init.ora

、startup EXCLUSIVE

  独占和共享启动

二、Oracle三种关闭方式

、shutdown normal
  正常方式关闭数据库

、shutdown immediate

  立即方式关闭数据库,在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),当使用

  shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。

、shutdown abort

  直接关闭数据库,正在访问数据库的会话会被突然终止,如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。

原文链接:https://www.cnblogs.com/NaughtyBoy/archive/2013/07/09/3180947.html

sqlplus / as sysdba

select status from v$instance;

[oracle@docker1 /opt/oracle/product/11.2./db_1/network/admin ::&&]$ps -ef | grep oracle
root : pts/ :: su - oracle
oracle : pts/ :: -bash
oracle : ? :: /opt/oracle/product/11.2./db_1/bin/tnslsnr LISTENER -inherit #监听
oracle : ? :: ora_pmon_orcl #启动了orcl实例
oracle : ? :: ora_psp0_orcl
oracle : ? :: ora_vktm_orcl
oracle : ? :: ora_gen0_orcl
oracle : ? :: ora_diag_orcl
oracle : ? :: ora_dbrm_orcl
oracle : ? :: ora_dia0_orcl
oracle : ? :: ora_mman_orcl
oracle : ? :: ora_dbw0_orcl
oracle : ? :: ora_lgwr_orcl
oracle : ? :: ora_ckpt_orcl
oracle : ? :: ora_smon_orcl
oracle : ? :: ora_reco_orcl
oracle : ? :: ora_mmon_orcl
oracle : ? :: ora_mmnl_orcl
oracle : ? :: ora_d000_orcl
oracle : ? :: ora_s000_orcl
oracle : ? :: ora_qmnc_orcl
oracle : ? :: ora_cjq0_orcl
oracle : ? :: ora_q000_orcl
oracle : ? :: ora_q001_orcl
oracle : ? :: ora_smco_orcl
oracle : ? :: ora_w000_orcl
oracle : ? :: oracleorcl (LOCAL=NO) #orcl有远程连接
oracle : pts/ :: ps -ef
oracle : pts/ :: grep --color=auto oracle

stop , start ,status, reload
/opt/oracle/product/11.2./db_1/bin/lsnrctl start

/opt/oracle/product/11.2./db_1/network/admin/listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = /opt/oracle/product/11.2./db_1)
#(PROGRAM = extproc) #注释掉这里才能远程连接
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.55.35)(PORT = ))
)
)
LOGGING_LISTENER = ON
INBOUND_CONNECT_TIMEOUT_LISTENER = 0 #连接超时设置0为不限制 查看 lsnrctl > show inbound_connect_timeout
SUBSCRIBE_FOR_NODE_DOWN_EVENT = OFF

SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER = OFF

/opt/oracle/product/11.2./db_1/network/admin/sqlnet.ora

sqlnet.ora Network Configuration File: /home/oracle/10g/product/10.2./db_1/network/admin/sqlnet.ora

Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH=(TNSNAMES, EZCONNECT)
TCP.VALIDNODE_CHECKING=YES
tcp.invited_nodes=(127.0.0.1,192.168.55.0/,192.168.66.0/) #白名单

SQLNET.INBOUND_CONNECT_TIMEOUT=0 #连接超时设置0为不限制

(1).用户相关命令

安装好oracle默认有2个用户sys,system
sys是超级用户,具有最高权限,具有sysdba角色
system 用户是 管理操作员,权限也很大,是sysoper(系统操作员)角色

创建用户并授权
create user ceshi identified by ;
grant connect,resource,sysdba to ceshi;

show user; #查看当前登陆的用户
drop user hxh; #删除用户
drop user hxh CASCADE; #删除用户和用户相关的数据
password 用户名; #自己修改密码
alter user 用户名 identified by 新密码; #给别人修改密码
ALTER USER 用户名 ACCOUNT UNLOCK; #用户解锁

#查看有哪些用户
select * from all_users order by created desc;

#查看当前用户信息
select * from user_users;

#查看当前登录用户拥有的所有角色和系统权限
select * from session_privs; #查看权限
select * from role_sys_privs; #查看角色和权限

#查看用户有哪些角色
select * from dba_role_privs where grantee='KAIFA'; #KAIFA为用户名(用户名需要大写)

查看某一用户拥有的对象权限
grant select on scott.emp to user50;
select * from dba_tab_privs where GRANTEE='USER50';

(2).权限相关命令

系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
对象权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。

授权
grant connect,resource,sysdab to ceshi;
grant select any TABLE to YULEI; #授权任何表的查询权限
GRANT SELECT ON "DNINMSV31"."V_DNDEVICE" TO NORTHBOUND; #授权指定表的查询权限 DNINMSV31用户 V_DNDEVICE表名 NORTHBOUND用户

权限回收
revoke select on scott.emp from ceshi;

权限相关的视图
DBA_SYS_PRIVS: 查询某个用户所拥有的系统权限
USER_SYS_PRIVS: 当前用户所拥有的系统权限
SESSION_PRIVS: 当前用户所拥有的全部权限
ROLE_SYS_PRIVS: 某个角色所拥有的系统权限 注意: 要以SYS用户登陆查询这个视图,否则返回空.
ROLE_ROLE_PRIVS: 当前角色被赋予的角色
SESSION_ROLES: 当前用户被激活的角色
USER_ROLE_PRIVS: 当前用户被授予的角色

另外还有针对表的访问权限的视图:
TABLE_PRIVILEGES
ALL_TAB_PRIVS
ROLE_TAB_PRIVS: 某个角色被赋予的相关表的权限

(3).角色相关命令

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。

3.1#查看角色有哪些权限
select * from role_sys_privs where role='角色名';

.2系统预定义角色
  预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:
sql>select * from role_sys_privs where role='角色名';
.CONNECT, RESOURCE, DBA
这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。

.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
这些角色主要用于访问数据字典视图和包。

.EXP_FULL_DATABASE, IMP_FULL_DATABASE
这两个角色用于数据导入导出工具的使用。

.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。这两个角色用于oracle高级查询功能。

. SNMPAGENT
用于oracle enterprise manager和Intelligent Agent

.RECOVERY_CATALOG_OWNER
用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》

.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.

3.3 管理角色

.建一个角色
sql>create role role1;

.授权给角色
sql>grant create any table,create procedure to role1;

.授予角色给用户
sql>grant role1 to user1;

.查看角色所包含的权限
sql>select * from role_sys_privs;

.创建带有口令的角色(在生效带有口令的角色时必须提供口令)
sql>create role role1 identified by password1;

.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;

.设置当前用户要生效的角色
(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用带有口令的role1生效
sql>set role all;//使用该用户的所有角色生效
sql>set role none;//设置所有角色失效
sql>set role all except role1;//除role1外的该用户的所有其它角色生效。
sql>select * from SESSION_ROLES;//查看当前用户的生效的角色。

.修改指定用户,设置其默认角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
详见oracle参考文档

.删除角色
sql>drop role role1;
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。

(4)表空间和表

#创建表空间
create tablespace CESHI datafile '/opt/oracle/oradata/orcl/ceshi01.dbf' size 500m autoextend on next 500m maxsize 20480m uniform size 128k;

#给表空间增加文件
alter tablespace COUNTS15 add datafile '/home1/oracle/oradata/counts15/counts15_32.dbf' size 500m autoextend on next 500m maxsize 20480m;

#查看表空间的数据文件
select * from dba_data_files where tablespace_name='OA_COUNTS15'

#查看有哪些表空间
select tablespace_name from dba_tablespaces;

#查看用户默认表空间(用户名要大写)
select username,default_tablespace from dba_users where username='H3W4JEBZ'

#修改用户默认表空间
alter user HXH default tablespace system

#查看表空间有哪些表
select * from all_tables where tablespace_name='USERS'

#查看用户有哪些表
select * from all_tables where owner='H3W4JEBZ';

#删除用户所有表
select 'DROP TABLE H3W4JEBZ.' || TABLE_NAME || ';' from all_tables where owner='H3W4JEBZ'

#删除表空间及数据
drop tablespace OA_COUNTS15 including contents and datafiles;

#删除用户及用户创建的表
drop user AJT9C4F2 cascade;

#工作中增加表空间文件步聚
1.查看有哪些表空间
select tablespace_name from dba_tablespaces;

3.查看用户默认表空间
select username,default_tablespace from dba_users where username='H3W4JEBZ'

3.查看表空间中有哪些文件
select file_name,bytes from dba_data_files where tablespace_name='COUNTS15';

4.增加文件
alter tablespace COUNTS15 add datafile '/home1/oracle/oradata/counts15/counts15_32.dbf' size 500m autoextend on next 500m maxsize 20480m;

#找出表空音使用百分比大于xxx的(修改后面的数字kperc > 10 )

SELECT
*
FROM
(
SELECT
'- Tablespace ->',
t.tablespace_name ktablespace,
'- Type->',
substr(t.contents, 1, 1) tipo,
'- Used(MB)->',
trunc (
(
d.tbs_size - nvl (s.free_space, 0)
) / 1024 / 1024
) ktbs_em_uso,
'- ActualSize(MB)->',
trunc (d.tbs_size / 1024 / 1024) ktbs_size,
'- MaxSize(MB)->',
trunc (d.tbs_maxsize / 1024 / 1024) ktbs_maxsize,
'- FreeSpace(MB)->',
trunc (
nvl (s.free_space, 0) / 1024 / 1024
) kfree_space,
'- Space->',
trunc (
(
d.tbs_maxsize - d.tbs_size + nvl (s.free_space, 0)
) / 1024 / 1024
) kspace,
'- Perc->',
decode(
d.tbs_maxsize,
0,
0,
trunc (
(
d.tbs_size - nvl (s.free_space, 0)
) * 100 / d.tbs_maxsize
)
) kperc
FROM
(
SELECT
SUM(bytes) tbs_size,
SUM(
decode(
sign(maxbytes - bytes),
- 1,
bytes,
maxbytes
)
) tbs_maxsize,
tablespace_name TABLESPACE
FROM
(
SELECT
nvl (bytes, 0) bytes,
nvl (maxbytes, 0) maxbytes,
tablespace_name
FROM
dba_data_files
UNION ALL
SELECT
nvl (bytes, 0) bytes,
nvl (maxbytes, 0) maxbytes,
tablespace_name
FROM
dba_temp_files
)
GROUP BY
tablespace_name
) d,
(
SELECT
SUM(bytes) free_space,
tablespace_name TABLESPACE
FROM
dba_free_space
GROUP BY
tablespace_name
) s,
dba_tablespaces t
WHERE
t.tablespace_name = d. TABLESPACE (+)
AND t.tablespace_name = s. TABLESPACE (+)
ORDER BY
8
)
WHERE
kperc > 10
AND tipo <> 'T'
AND tipo <> 'U'

(5)字符集

更改字符集
shutdown immediate; (把database停了)
startup mount; (把database重开去可更改情況)
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database open;
#alter database character set internal_use Simplified Chinese_CHINA.ZHS16GBK;
alter database character set internal_use AL32UTF8;
shutdown immediate;
startup;
查看字符集
select userenv('language') from dual
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
客户端修改字符集
系统环境变量
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

常用字符集
AMERICAN_AMERICA.AL32UTF8
Simplified Chinese_CHINA.ZHS16GBK

SYSDBA不是权限,当用户以SYSDBA身份登陆数据库时,登陆用户都会变成SYS.
sysdba身份登陆可以打开,关闭数据库,创建SPFILE,对数据库进行恢复操作等,而这些是DBA角色无法实现的;
sysdba 是系统权限,dba是用户对象权限;
sysdba,是管理oracle实例的,它的存在不依赖于整个数据库完全启动,只要实例启动了,他就已经存在;
以sysdba身份登陆,装载数据库、打开数据库,只有数据库打开了,或者说整个数据库完全启动后,dba角色才有了存在的基础;
dba是一种role对应的是对Oracle实例里对象的操作权限的集合,而sysdba是概念上的role是一种登录认证时的身份标识而已。
而且,dba是Oracle里的一种对象,Role 和User一样,是实实在在存在在Oracle里的物理对象,而sysdba是指的一种概念上的操作对象,在Oracle数据里并不存在。

例子1 授权sysdba:
create user ceshi identified by ;
#grant connect,resource,sysdab to ceshi;
grant connect,resource,dab to ceshi;
#登陆
sqlplus /nolog
conn CESHI/ as sysdba;
show user; #显示登入用户是sys

#登陆
sqlplus /nolog
conn CESHI/ ;
show user; #显示登入用户是CESHI

#!/bin/bash
export ORACLE_SID=orcl
export USER=KAIFA
export NLS_LANG='AMERICAN_AMERICA.AL32UTF8'
DATE=`date '+%Y%m%d'`
BAKDIR=/home/backup/oracle_bak
chown -R oracle.oinstall ${BAKDIR}
su -l -c "exp ${USER}/kaifa123 file=$BAKDIR/${ORACLE_SID}_${USER}_${DATE}.dmp log=$BAKDIR/${ORACLE_SID}_${USER}_${DATE}.log direct=y " oracle
if [[ $? == ]];then
echo "${USER} ${DATE} backup sucess" >> /tmp/${USER}.log
else
echo "${USER} ${DATE} backup fail" >> /tmp/${USER}.log
fi

备份注意事项
字符集和数据库字符集不一样
导出日志会有:
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion)
字符集和数据库字符集一样
导出日志会有:
Export done in AL32UTF8 character set and AL16UTF16 NCHAR character set

1.本实例恢复

export ORACLE_SID=orcl
export NLS_LANG='AMERICAN_AMERICA.AL32UTF8'
su -l -c "imp userid=KAIFA/kaifa123 file=/tmp/a.dmp full=y" oracle

2.其它实例上恢复

备份库上操作
#查看用户表空间
select username,default_tablespace from dba_users where username='KAIFA'
结果:
KAIFA BSM
#查看表空间数据文件
select file_name,bytes from dba_data_files where tablespace_name='BSM';
结果:(单位字节) echo "2097152000/1024/1024" | bc 转成M
/usr/java/oracle/tabspace/bsm_data.dbf

恢复库上操作
#创建用户
create user kaifa identified by kaifa123 ;
grant connect,dba,resource,IMP_FULL_DATABASE to kaifa;

#创建表空间(表空间大小根据情况修改)
create tablespace BSM datafile '/usr/java/oracle/tabspace/bsm_data01.dbf' size 500m autoextend on next 500m maxsize 20480m uniform size 128k;

#给表空间增加文件(看备份为的数据文件实际情况而定,要提供足够的表空间恢复)
alter tablespace BSM add datafile '/usr/java/oracle/tabspace/bsm_data02.dbf' size 500m autoextend on next 500m maxsize 20480m;

#查看用户默认表空间(用户名要大写)
select username,default_tablespace from dba_users where username='KAIFA'

#修改用户默认表空间
alter user KAIFA default tablespace BSM

执行恢复
export ORACLE_SID=ORCL
export NLS_LANG='AMERICAN_AMERICA.AL32UTF8'
su -l -c "imp userid=KAIFA/kaifa123 file=/tmp/a.dmp full=y" oracle

1--备份
(1.1) 逻辑备份:只能在数据库运行的状态下执行
导出:
导出使用exp命令来完成的,该命令常用的选项有:
userid:用于指定执行导出操作的用户名,口令,连接字符串
tables:用于指定执行导出操作的表
owner:用于指定执行导出操作的方案
full=y: 用于指定执行导出操作的数据库
direct =y , 表示直接路径导出, 比普通路径导出速度快很多
inctype:用于指定导出操作的增量类型
rows:用于指定执行导出操作是否要导出表中的数据
file:用于指定导出文件名
()导出表和数据:
exp userid=scott/tiger@test tables=emp,dep file=/tmp/a.dmp 【scott用户,tiger密码,test数据库】
导出其它方案的表:
exp userid=system/tiger@test tables=scott.emp,dep file=/tmp/a.dmp 【system用户,scott.emp方案也就是用户的表,tiger密码,test数据库】
只导出表的结构:
exp userid=scott/tiger@test tables=emp,dep file=/tmp/a.dmp rows=n
使用直接导出表结构的方式:
exp userid=scott/tiger@test tables=emp,dep file=/tmp/a.dmp direct=y 【这种方式比默认的常规方式速度要快,当数据量大时,可以考虑使用这样的方法。这时需要数据库的字符集要与客户端字符集完全一致,否则会报错】
()导出方案:
导出自己的方案:
exp scott/tiger@test owner=scott file=/tmp/a.dmp
导出其它方案:
exp system/tiger@test direct=y owner=scott,system file=/tmp/a.dmp
()导出数据库:【因为数据量大,耗时长。】
exp userid=system/tiger@test direct=y full=y inctype=complete file=/tmp/a.dmp【inctype=complete是增量备份】
()导出数据库表结构,包含用户和角色数据
exp userid=system/oracle@192.168.80.150/oracle full=y rows=n file=/home/orabak/system.dmp
()导出表空间
exp system/oracle@192.168.80.150/orcl direct=y owner=system file=/home/orabak/system.dmp #测试不行
(1.2) 物理备份:未笔记
2--恢复
(2.1) 逻辑恢复
导入:导入使用工具import 将文件中的对象和数据导入到数据库中,导入要使用的文件必须是exp所导出的文件。
imp常用的选项有:
userid:用于指定执行导出操作的用户名,口令,连接字符串
tables:用于指定执行导出操作的表
formuser:用于指定源用户
touser:用于指定目标用户
file:用于指定导入文件名
full=y: 用于指定执行导入整个文件
inctype: 用于指定执行导入操作的增量类型
rows:指定是否要导入表行(数据)
ignore:如果表存在,则只导入数据
(导入表)
导入自己表:
imp userid=scott/tiger@test tables=(emp) file=/tmp/a.dmp
导入表到其它用户:
imp userid=system/tiger@test tables=(emp) file=/tmp/a.dmp touser=scott
导入表的结构:
imp userid=soctt/tiger@test tables=(emp) file=/tmp/a.dmp rows=n
导入数据:
imp userid=scott/tiger@test tables=(emp) file=/tmp/a.dmp ignore=y
(导入方案)
导入自身的方案:
imp userid=scott/tiger@test file=/tmp/a.dmp
导入其它方案:
imp userid=system/tiger@test file=/tmp/a.dmp fromuser=system touser=scott
(导入数据库)
imp userid=system/tiger full=y file=/tmp/a.dmp

(2.2) 物理恢复:未笔记

expdp/impdp备份恢复全库
原文地址: https://www.cnblogs.com/promise-x/p/7477360.html

步骤1:
备份库和恢复库执行:
create directory backup as '/home/backup/oracle_bak';
grant read,write on directory backup to 用户名;
select * from dba_directories; #查看backup创建是否成功

步聚2: 备份库上查询这些信息,并记录
select * from all_users order by created desc; #查看用户
select tablespace_name from dba_tablespaces; #查看表空间
select username,default_tablespace from dba_users where username='KAIFA' #查看用户表空间

步聚3: 恢复库上根据步聚2的记录 创建表空间和用户

#创建用户
create user ceshi identified by ;

#创建表空间
create tablespace CESHI datafile '/opt/oracle/oradata/orcl/ceshi01.dbf' size 500m autoextend on next 500m maxsize 20480m uniform size 128k;

#给表空间增加文件
alter tablespace COUNTS15 add datafile '/home1/oracle/oradata/counts15/counts15_32.dbf' size 500m autoextend on next 500m maxsize 20480m;

#修改用户默认表空间
alter user HXH default tablespace system

步聚4:
备份:
expdp userid='user/passwd as sysdba' directory=backup dumpfile=expdp_full.dmp full=y logfile=expdp_full.log;
恢复
impdp user/passwd directory=backup dumpfile=expdp_full.dmp full=y logfile=impdp_full.log;

##备份/恢复方案
expdp userid='BACK_UP/qwerasdf as sysdba' directory=backup schemas=KAIFA dumpfile=KAIFA20181025_155326.dmp logfile=KAIFA20181025_155326.log
impdp BACK_UP/qwerasdf DIRECTORY=backup DUMPFILE=NBT_DEV20181025_160230.dmp SCHEMAS=NBT_DEV logfile=NBT_DEV_impdp.log

#需要注意,系统用户必须使用oracle,用root用户是登陆不了的。oracle这个用户是安装oracle时创建的用户
[root@CentOS68 oracle_bak]#su - oracle
[oracle@docker1 /opt/oracle/product/11.2./db_1/network/admin ::&&]$export ORACLE_SID=orcl
[oracle@docker1 /opt/oracle/product/11.2./db_1/network/admin ::&&]$echo $ORACLE_SID
orcl
[oracle@docker1 /opt/oracle/product/11.2./db_1/network/admin ::&&]$sqlplus / as sysdba #不需要密码

SQL*Plus: Release 11.2.0.3. Production on Mon Jul ::

Copyright (c) , , Oracle. All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3. - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show user;
USER is "SYS"

其它用户本机登陆:
sqlplus ceshi/123456@192.168.1.110/orcl

yum install readline* libtermcap-devel* -y
yum install rlwrap-0.41-1.1.x86_64.rpm -y

oracle用户下的 .bash_profil 中增加一条alias
alias sqlplus='/usr/bin/rlwrap sqlplus'
使改动生效
[oracle@linux245 ~]$ source ./.bash_profile

原文地址:https://www.cnblogs.com/mkdlf/p/6611016.html

1. D:\share\src\oracle\instantclient_10_2好用.7z  解压或H:\share\src\oracle\navicat-premium-oracle\instantclient-basic-win-x86-64-11.2.0.1.0.zip

2.配置 工具==选项==oci

3.创建连接(注意用户名要大写)