oracle11g笔记
安装
#!/bin/bash #安装oracle110203 pageDir="/opt/tools/oracle" bdFile="/tmp/bdFile.txt" opassword="oracle" check_ok(){ if [ $? != 0 ] then echo "Error, Check the error log." exit 1 fi } myum(){ if ! rpm -qa|grep -q "^$1" then yum install -y $1 check_ok else echo $1 already installed. fi } check_server(){ if ! grep -q "$1" "$bdFile" then "$1" fi } install_oracleinit(){ for i in binutils compat-libstdc++-33 compat-libstdc++-33.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 = 250 32000 100 128 fs.file-max = 6815744 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 = 1048586 fs.aio-max-nr = 1048576 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 0 #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 664 /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 775 /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.0/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.0,oracle.oraolap:11.2.0.3.0,oracle.rdbms.dm:11.2.0.3.0,oracle.rdbms.dv:11.2.0.3.0,oracle.rdbms.lbac:11.2.0.3.0,oracle.rdbms.rat:11.2.0.3.0 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=512 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 700 /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
oracle启动脚本
#!/bin/bash # . /etc/init.d/functions oracle_home=/opt/oracle/product/11.2.0/db_1 oracle_bin=$oracle_home/bin function_start_oracle() { printf "Starting oracle...\n" $oracle_bin/lsnrctl start 2>&1 > /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 2>&1 > /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 5 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启动方式和关闭方式
一、Oracle数据库几种启动方式 1、startup nomount 非安装启动,这种方式下启动可执行:重建控制文件、重建数据库,读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。 2、startup mount (dbname) 安装启动,这种方式启动下可执行:数据库日志归档、数据库介质恢复、使数据文件联机或脱机、重新定位数据文件、重做日志文件。 执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,但此时不对数据文件和日志文件进行校验检查。 3、startup open (dbname) 先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,这种方式下可访问数据库中的数据。 4、startup 等于以下三个命令 startup nomount alter database mount alter database open 5、startup restrict 约束方式启动,这种方式能够启动数据库,但只允许具有一定特权的用户访问,非特权用户访问时,会出现以下提示: ERROR:ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用 6、startup force 强制启动方式,当不能关闭数据库时,可以用startup force来完成数据库的关闭,先关闭数据库,再执行正常启动数据库命令 7、startup pfile=参数文件名 带初始化参数文件的启动方式,先读取参数文件,再按参数文件中的设置启动数据库 例:startup pfile=E:\Oracle\admin\oradb\pfile\init.ora 8、startup EXCLUSIVE 独占和共享启动 二、Oracle三种关闭方式 1、shutdown normal 正常方式关闭数据库 2、shutdown immediate 立即方式关闭数据库,在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),当使用 shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。 3、shutdown abort 直接关闭数据库,正在访问数据库的会话会被突然终止,如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。 原文链接:https://www.cnblogs.com/NaughtyBoy/archive/2013/07/09/3180947.html
查看oracle启动状态
sqlplus / as sysdba select status from v$instance;
启动实例后进程
[oracle@docker1 /opt/oracle/product/11.2.0/db_1/network/admin 23:16:20&&41]$ps -ef | grep oracle root 77556 70869 0 22:46 pts/0 00:00:00 su - oracle oracle 77557 77556 0 22:46 pts/0 00:00:00 -bash oracle 77649 1 0 22:46 ? 00:00:00 /opt/oracle/product/11.2.0/db_1/bin/tnslsnr LISTENER -inherit #监听 oracle 77656 1 0 22:46 ? 00:00:00 ora_pmon_orcl #启动了orcl实例 oracle 77658 1 0 22:46 ? 00:00:00 ora_psp0_orcl oracle 77661 1 0 22:46 ? 00:00:00 ora_vktm_orcl oracle 77665 1 0 22:46 ? 00:00:00 ora_gen0_orcl oracle 77667 1 0 22:46 ? 00:00:00 ora_diag_orcl oracle 77669 1 0 22:46 ? 00:00:00 ora_dbrm_orcl oracle 77671 1 0 22:46 ? 00:00:01 ora_dia0_orcl oracle 77673 1 0 22:46 ? 00:00:00 ora_mman_orcl oracle 77675 1 0 22:46 ? 00:00:00 ora_dbw0_orcl oracle 77677 1 0 22:46 ? 00:00:00 ora_lgwr_orcl oracle 77679 1 0 22:46 ? 00:00:00 ora_ckpt_orcl oracle 77681 1 0 22:46 ? 00:00:00 ora_smon_orcl oracle 77683 1 0 22:46 ? 00:00:00 ora_reco_orcl oracle 77685 1 0 22:46 ? 00:00:00 ora_mmon_orcl oracle 77687 1 0 22:46 ? 00:00:00 ora_mmnl_orcl oracle 77689 1 0 22:46 ? 00:00:00 ora_d000_orcl oracle 77691 1 0 22:46 ? 00:00:00 ora_s000_orcl oracle 77703 1 0 22:46 ? 00:00:00 ora_qmnc_orcl oracle 77717 1 0 22:46 ? 00:00:00 ora_cjq0_orcl oracle 77729 1 0 22:47 ? 00:00:00 ora_q000_orcl oracle 77731 1 0 22:47 ? 00:00:00 ora_q001_orcl oracle 78251 1 0 22:56 ? 00:00:00 ora_smco_orcl oracle 78256 1 0 22:57 ? 00:00:00 ora_w000_orcl oracle 79307 1 0 23:16 ? 00:00:00 oracleorcl (LOCAL=NO) #orcl有远程连接 oracle 79311 77557 0 23:16 pts/0 00:00:00 ps -ef oracle 79312 77557 0 23:16 pts/0 00:00:00 grep --color=auto oracle
oracle启动监听
stop , start ,status, reload /opt/oracle/product/11.2.0/db_1/bin/lsnrctl start
oracle监听配置
/opt/oracle/product/11.2.0/db_1/network/admin/listener.ora ====================================== SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = orcl) (ORACLE_HOME = /opt/oracle/product/11.2.0/db_1) #(PROGRAM = extproc) #注释掉这里才能远程连接 ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.55.35)(PORT = 1521)) ) ) 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.0/db_1/network/admin/sqlnet.ora ====================================== # sqlnet.ora Network Configuration File: /home/oracle/10g/product/10.2.0/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/24,192.168.66.0/24) #白名单 SQLNET.INBOUND_CONNECT_TIMEOUT=0 #连接超时设置0为不限制 ======================================
oracle常用命令
(1).用户相关命令
安装好oracle默认有2个用户sys,system sys是超级用户,具有最高权限,具有sysdba角色 system 用户是 管理操作员,权限也很大,是sysoper(系统操作员)角色 创建用户并授权 create user ceshi identified by 123456 ; 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='角色名'; 3.2系统预定义角色 预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询: sql>select * from role_sys_privs where role='角色名'; 1.CONNECT, RESOURCE, DBA 这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。 2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE 这些角色主要用于访问数据字典视图和包。 3.EXP_FULL_DATABASE, IMP_FULL_DATABASE 这两个角色用于数据导入导出工具的使用。 4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE AQ:Advanced Query。这两个角色用于oracle高级查询功能。 5. SNMPAGENT 用于oracle enterprise manager和Intelligent Agent 6.RECOVERY_CATALOG_OWNER 用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》 7.HS_ADMIN_ROLE A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary. 3.3 管理角色 1.建一个角色 sql>create role role1; 2.授权给角色 sql>grant create any table,create procedure to role1; 3.授予角色给用户 sql>grant role1 to user1; 4.查看角色所包含的权限 sql>select * from role_sys_privs; 5.创建带有口令的角色(在生效带有口令的角色时必须提供口令) sql>create role role1 identified by password1; 6.修改角色:是否需要口令 sql>alter role role1 not identified; sql>alter role role1 identified by password1; 7.设置当前用户要生效的角色 (注:角色的生效是一个什么概念呢?假设用户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;//查看当前用户的生效的角色。 8.修改指定用户,设置其默认角色 sql>alter user user1 default role role1; sql>alter user user1 default role all except role1; 详见oracle参考文档 9.删除角色 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
sysdab和dba的区别
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 123456 ; #grant connect,resource,sysdab to ceshi; grant connect,resource,dab to ceshi; #登陆 sqlplus /nolog conn CESHI/123456 as sysdba; show user; #显示登入用户是sys #登陆 sqlplus /nolog conn CESHI/123456 ; show user; #显示登入用户是CESHI
oracle备份(方案即用户)
#!/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 [[ $? == 0 ]];then echo "${USER} ${DATE} backup sucess" >> /tmp/${USER}.log else echo "${USER} ${DATE} backup fail" >> /tmp/${USER}.log fi
oracle备份字符集不一样报错
备份注意事项 字符集和数据库字符集不一样 导出日志会有: 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
oracle恢复(方案即用户)
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 2097152000 恢复库上操作 #创建用户 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:用于指定导出文件名 (1)导出表和数据: 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 【这种方式比默认的常规方式速度要快,当数据量大时,可以考虑使用这样的方法。这时需要数据库的字符集要与客户端字符集完全一致,否则会报错】 (2)导出方案: 导出自己的方案: exp scott/tiger@test owner=scott file=/tmp/a.dmp 导出其它方案: exp system/tiger@test direct=y owner=scott,system file=/tmp/a.dmp (3)导出数据库:【因为数据量大,耗时长。】 exp userid=system/tiger@test direct=y full=y inctype=complete file=/tmp/a.dmp【inctype=complete是增量备份】 (4)导出数据库表结构,包含用户和角色数据 exp userid=system/oracle@192.168.80.150/oracle full=y rows=n file=/home/orabak/system.dmp (5)导出表空间 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备份恢复全库
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 123456 ; #创建表空间 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
#需要注意,系统用户必须使用oracle,用root用户是登陆不了的。oracle这个用户是安装oracle时创建的用户
[root@CentOS68 oracle_bak]#su - oracle
[oracle@docker1 /opt/oracle/product/11.2.0/db_1/network/admin 23:14:12&&36]$export ORACLE_SID=orcl [oracle@docker1 /opt/oracle/product/11.2.0/db_1/network/admin 23:14:22&&37]$echo $ORACLE_SID orcl [oracle@docker1 /opt/oracle/product/11.2.0/db_1/network/admin 23:14:27&&38]$sqlplus / as sysdba #不需要密码 SQL*Plus: Release 11.2.0.3.0 Production on Mon Jul 30 23:14:36 2018 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 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
sqlplus回退解决
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
navicat premium连接oracle
原文地址: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.创建连接(注意用户名要大写)