炽翼铁冰's Blog

Trying to become a programmer

创建视图 ORA-01031: 权限不足

转自:http://blog.sina.com.cn/s/blog_5d32e4930100txkv.html

视图就是一种虚拟的表,为了方便把各类表所需要的字段取出来创建的一张新的虚拟表。视图的增删改需要触发器的配合。

 

如果只是查找同一方案中的表去创建视图,则只需要该用户有create view的权限便可创建。但是如果创建的视图涉及到要查询别的方案中的表,这时我们就需要select any table的权限了。

 

授权命令:

cmd

sqlplus "/as sysdba

grant select any table,create view to user;

 

 

附:

oracle的系统和对象权限
  alter any cluster 修改任意簇的权限
  alter any index 修改任意索引的权限
  alter any role 修改任意角色的权限
  alter any sequence 修改任意序列的权限
  alter any snapshot 修改任意快照的权限
  alter any table 修改任意表的权限
  alter any trigger 修改任意触发器的权限
  alter cluster 修改拥有簇的权限
  alter database 修改数据库的权限
  alter procedure 修改拥有的存储过程权限
  alter profile 修改资源限制简表的权限
  alter resource cost 设置佳话资源开销的权限
  alter rollback segment 修改回滚段的权限
  alter sequence 修改拥有的序列权限
  alter session 修改数据库会话的权限
  alter sytem 修改数据库服务器设置的权限
  alter table 修改拥有的表权限
  alter tablespace 修改表空间的权限
  alter user 修改用户的权限
  analyze 使用analyze命令分析数据库中任意的表、索引和簇
  audit any 为任意的数据库对象设置审计选项
  audit system 允许系统操作审计
  backup any table 备份任意表的权限
  become user 切换用户状态的权限
  commit any table 提交表的权限
  create any cluster 为任意用户创建簇的权限
  create any index 为任意用户创建索引的权限
  create any procedure 为任意用户创建存储过程的权限
  create any sequence 为任意用户创建序列的权限
  create any snapshot 为任意用户创建快照的权限
  create any synonym 为任意用户创建同义名的权限
  create any table 为任意用户创建表的权限
  create any trigger 为任意用户创建触发器的权限
  create any view 为任意用户创建视图的权限
  create cluster 为用户创建簇的权限
  create database link 为用户创建的权限
  create procedure 为用户创建存储过程的权限
  create profile 创建资源限制简表的权限
  create public database link 创建公共数据库链路的权限
  create public synonym 创建公共同义名的权限
  create role 创建角色的权限
  create rollback segment 创建回滚段的权限
  create session 创建会话的权限
  create sequence 为用户创建序列的权限
  create snapshot 为用户创建快照的权限
  create synonym 为用户创建同义名的权限
  create table 为用户创建表的权限
  create tablespace 创建表空间的权限
  create user 创建用户的权限
  create view 为用户创建视图的权限
  delete any table 删除任意表行的权限
  delete any view 删除任意视图行的权限
  delete snapshot 删除快照中行的权限
  delete table 为用户删除表行的权限
  delete view 为用户删除视图行的权限
  drop any cluster 删除任意簇的权限
  drop any index 删除任意索引的权限
  drop any procedure 删除任意存储过程的权限
  drop any role 删除任意角色的权限
  drop any sequence 删除任意序列的权限
  drop any snapshot 删除任意快照的权限
  drop any synonym 删除任意同义名的权限
  drop any table 删除任意表的权限
  drop any trigger 删除任意触发器的权限
  drop any view 删除任意视图的权限
  drop profile 删除资源限制简表的权限
  drop public cluster 删除公共簇的权限
  drop public database link 删除公共数据链路的权限
  drop public synonym 删除公共同义名的权限
  drop rollback segment 删除回滚段的权限
  drop tablespace 删除表空间的权限
  drop user 删除用户的权限
  execute any procedure 执行任意存储过程的权限
  execute function 执行存储函数的权限
  execute package 执行存储包的权限
  execute procedure 执行用户存储过程的权限
  force any transaction 管理未提交的任意事务的输出权限
  force transaction 管理未提交的用户事务的输出权限
  grant any privilege 授予任意系统特权的权限
  grant any role 授予任意角色的权限
  index table 给表加索引的权限
  insert any table 向任意表中插入行的权限
  insert snapshot 向快照中插入行的权限
  insert table 向用户表中插入行的权限
  insert view 向用户视图中插行的权限
  lock any table 给任意表加锁的权限
  manager tablespace 管理(备份可用性)表空间的权限
  references table 参考表的权限
  restricted session 创建有限制的数据库会话的权限
  select any sequence 使用任意序列的权限
  select any table 使用任意表的权限
  select snapshot 使用快照的权限
  select sequence 使用用户序列的权限
  select table 使用用户表的权限
  select view 使用视图的权限

    select any dictionary 可查找任何字典
  unlimited tablespace 对表空间大小不加限制的权限
  update any table 修改任意表中行的权限
  update snapshot 修改快照中行的权限
  update table 修改用户表中的行的权限
  update view 修改视图中行的权限

oracle环境变量

新建变量名:NLS_DATE_FORMAT

变量值:YYYY/MM/DD HH24:MI:SS

linux下oracle数据启动过程命令

 

1. 启动Oracle10g 数据库sqlplus
$ sqlplus "scott/tiger as sysdba"
将出现如下连接数据库信息:
SQL*Plus: Release 10.1.0.2.0 - Production on 星期三 3月 24 16:23:27 2004
Copyright (c) 1982, 2004, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL>
表明登录数据库系统成功,运行startup命令启动数据库。
SQL> startup
ORACLE instance started.
Total System Global Area 336356520 bytes
Fixed Size 279720 bytes
Variable Size 268435456 bytes
Database Buffers 67108864 bytes
Redo Buffers 532480 bytes
Database mounted.
Database opened.
SQL>
表示数据库正常启动。
2. 关闭Oracle10g 数据库
$ sqlplus "scott/tiger as sysdba" //以sysdba用户登录数据库
成功登录数据库系统后,运行shudown命令关闭数据库。
SQL> shutdown
3. 启动Oracle10g监听程序
Oracle的监听程序主要是为客户端的连接提供接口,在控制台窗口键入如下命令:
$ lsnrctl
将出现如下监听程序信息:
LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 24-3月 -2004 16
:59:51
Copyright (c) 1991, 2004, Oracle. All rights reserved.
欢迎来到LSNRCTL, 请键入"help"以获得信息。
LSNRCTL>
表明登录监听程序控制台成功,运行start命令启动监听程序。
LSNRCTL> start
将出现监听程序的一系列启动和配置情况信息列表。
信息行的最后一行是“The command completed successfully”字样时,监听程序启动成功。
4. 关闭Oracle10g监听程序
运行stop命令关闭监听程序。
LSNRCTL> stop

oracle sqldeveloper乱码解决

 这是由于JDK不支持中文的原因,导致乱码,解决方法如下:

解决方法:

[root@netyang ~]# cd /usr/jdk/jre/lib/fonts
[root@netyang fonts]# mkdir fallback
[root@netyang fonts]# cd fallback/
[root@netyang fallback]# ln -s /usr/share/fonts/default/simsun.ttc
[root@netyang fallback]# mkfontdir
[root@netyang fallback]# mkfontscale


 

最后到相应目录下执行sh sqldeveloper.sh运行看是否成功 (/opt/sqldeveloper)

oracle登录脚本设置(转)

 环境的设置

SQL*Plus 允许建立一个login.sql文件,每次启动SQL*Plus 时都会执行这个脚本。另外,还允许设置一个环境变量SQLPATH,这样不论这个login.sql 脚本具体在哪个目录中,SQL*Plus 都能找到它:a、把login.sql放当前目录, glogin.sql在sqlplus/admin下面是对全局启作用的,b、直接在ORACLE用户的profile文件中加入SQLPATH环境变量,可以设置export    SQLPATH=/home/oracle/oracle/product/10.2.0/oradata/orcl (此路径根据实际情况进行配置)

login.sql 代码:

 

define _editor=vi
set serveroutput on size 1000000
set trimspool on
set long 5000
set linesize 100
set pagesize 9999
column plan_plus_exp format a80
column global_name new_value gname
set termout off
define gname=idle
column global_name new_value gname
select lower(user) || '@' || substr( global_name, 1, decode( dot, 0,
length(global_name), dot-1) ) global_name
from (select global_name, instr(global_name,'.') dot from global_name );
set sqlprompt '&gname> '
set termout on

 

oracle在linux下的安装

一、LINUX系统的安装

一、RedHat AS4系统安装:

磁盘分区注意:SWAP空间要是内存大小的二倍.

网络基本配置根据本地网络情况配置.

主机名:linuxsvr

防火墙基本配置:

⊙ 无防火墙

⊙ 是否启用 SELinux:已禁用

安装方式的选项:

⊙ 定制要安装的软件包(C)

桌面选项:

(√) X窗口系统 (选取默认)

 

(√) GNOME桌面环境 (选取默认)

(√) KDE桌面环境 (选取默认)

应用程序选项:

( ) 工程和科学 (选取默认)

( ) 图形化互联网 (选取默认)

(√) 基于文本的互联网 (选取默认)

( ) 办公/生产率 (选取默认)

服务器选项:

(√) 服务器配置工具 (选取全部)

( ) 万维网服务器 (选取全部)

(√) Windows文件服务器 (选取全部)

( ) DNS服务器 (选取全部)

开发选项:

(√) 开发工具 (选择全部)

系统选项:

(√) 管理工具 (选取默认)

(√) 打印支持 (选取默认)

杂项选项:

全部不要选择;

安装完后,请在第三张安装盘中找到下面的文件,双击安装上去。否则安装oracle时会报错。

libaio-devel-0.3.103-3.i386.rpm

readline-devel-4.3-13

请一要安装好以上所列出的软件包,否则安装Oracle系统时,会出现一些不必须要的错误信息!

 

二、Oracle的安装前准备:

1、配置系统内核参数,以root用户登录,修改在/etc/sysctl.conf文件,在该文件中添加以下参数:

kernel.shmall = 2097152

kernel.shmmax = 2147483648

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 262144

net.core.rmem_max = 262144

net.core.wmem_default = 262144

net.core.wmem_max = 262144

2、创建安装数据库时所需要使用的用户组oinstall,dba及Oracle用户,并将oinstamll,dba组定义成oracle用户的主次组。命令参考如下:

# groupadd oinstall

# groupadd dba

# useradd -g oinstall -G dba oracle (设定oracle用户为oinstall、dba用户组的成员)

# passwd oracle (设定oracle用户的密码)

3、以root用户身份登录系统创建Oracle系统的安装目录和数据库文件存放的目录。例如:/oracle,及改变以上目录的属性命令参考如下:

# mkdir -p /oracle/product/ 10.2.0 (创建数据目录)

# chown -R oracle.oinstall /oracle (设定目录所属的用户组和用户)

# chmod -R 775 /oracle (设定目录的读写权限)

4、以oracle 用户身份登录系统,复制oracle安装文件到/home/oracle下:

# cp 原文件夹 /home/oracle/ (复制文件到oracle个人目录内;也可以在图形界面下复制)

# unzip /home/oracle/10201_database_linux32.zip (解压zip文件)

5、配置oracle用户环境,以oracle用户登录,修改oracle用户下的 .bash_profile 文件。增加以下参数:

vi .bash_profile (执行vi命令来修改.bash_profile)

# Get the aliases and functions

  

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

  

# User specific environment and startup programs

  

PATH=$PATH:$HOME/bin

  

export PATH

unset USERNAME

# 以下是我们所需配置的内容

umask 022

TMP=/tmp; export TMP

TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/ 10.2.0/; export ORACLE_HOME

ORACLE_SID=fstest; export ORACLE_SID

ORACLE_TERM=xterm; export ORACLE_TERM

PATH=/usr/sbin:$PATH; export PATH

PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

#LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL

6、重新启动操作系统:

# reboot (重新启动命令)

特别说明:因为安装Oracle软件时不可使用root(超级用户)来进行安装,只可以使用刚才新建的oracle用户来进行安装,请大家一定要注意!

 

三、Oracle 10g的安装 

1、重新启动操作系统后,使用oracle用户登陆操作系统进行Oracle数据库的正确安装:

用户名:oracle

密码为:******

点击“任务栏” → “应用程序” → “系统工具” → “终端”:

执行runInstaller文件进行,开始Oracle数据库的安装:

$ /home/oracle/database/./runInstaller (执行runInstaller文件)

 

2、经过一小段的时间,会出现“选择安装方法”的信息窗口;点选“高级安装(A)”,继续安装请单击“下一步(N)”按键;进入“指定产品清单目录和身份证明”窗口:确认产品清单目录的完整路径(D):/oracle/oraInventory;指定操作系统组名(S):oinstall;继续安装请单击“下一步(N)”按键;

3、进入“选择安装类型”窗口,点选“企业版(E)(1.26GB)”,继续安装请单击“下一步(N)”按键;进入“指定主目录详细信息”窗口;名称(M):OraDb10g_home1 路径(A): /oracle/product/10.2.0/;继续安装请单击“下一步(N)”按键;

4、进入“产品特定的选决条件检查”窗口,经过一小段时间检查,会出现以下的检查信息窗口;在“正在检查网络配置需要”项目内,选中状态栏目的内容,继续安装请单击“下一步(N)”按键;进入“选择配置选项”窗口,点选“创建数据库(C)” ,继续安装请单击“下一步(N)”按键;进入“选择数据库配置”窗口,点选“一般用途(G)” ,继续安装请单击“下一步(N)”按键;进入“指定数据库配置选项”窗口;数据库命名中的设置;全局数据库名: fstest SID: fstest;数据库字符集:简体中文ZHS16GBK ;继续安装请单击“下一步(N)”按键; play.bitsCN.com累了吗玩一下吧

5、进入“选择数据库管理选项”窗口,点选“使用Database Control管理数据库”,继续安装请单击“下一步(N)”按键;进入“指定数据库存储选项”窗口,点选“文件系统”;指定数据库文件位置:/oracle/product/ 10.2.0/oradata/;继续安装请单击“下一步(N)”按键;进入“指定备份和恢复选项”窗口,点选“不启用自动备份”,继续安装请单击“下一步(N)”按键;进入“指定数据库方案的口令”窗口;点选“所有的帐户都使用同一个口令”,输入口令。继续安装请单击“下一步(N)”按键;进入“概要信息”窗口,继续安装请单击“下一步(N)”按键;进入“安装”窗口,详细安装如下:A、安装部分片;B、复制文件部分;C、连接数据系统部分;D、设置数据系统部分;

6、进入“配置助手”窗口:配置:Oracle Database Configuration Assistant时,会出现“Database Configuration Assistant”新窗口,详细配置过程:A、正在复制数据库文件;B、正在创建并启动Oracle实例;C、正在进行数据库创建;完成以上三个部分,会出现一个数据库创建完成信息提示窗口,点击“确定”按键。

7、配置:iSQL*Plus配置辅助程序。配置过程中,会出现一个执行配置脚本信息提示窗口,在终端下运行,执行orainstRoot.sh脚本的过程:点击“任务栏” → “应用程序” → “系统工具” → “终端”,

$ su root (转换成root超级用户环境) Password: ****** (输入root用户的密码)

# /home/oracle/oraInventory/./orainstRoot.sh (输入执行脚本的详细路径)

详细操作:

# /home/oracle/oracle/product/ 10.2.0/./root.sh (输入执行脚本的详细路径)

执行完成orainstRoot.sh、root.sh脚本后,关闭“超级用户的终端”,回到“执行配置脚本”提示窗口,继续安装请单击“确定”按键;进入“安装结束”窗口,退出安装程序请单击“退出(X)”按键;特别说明:请大家一定要记录好以下的WEB URL地址(重要):以下的 J2EE 应用程序已经配置, 并且可用下面列出的 URL 来访问。Enterprise Manager 10g Database Control URL:请单击“是(Y)”按键,完成本次的安装任务;

测试以上的WEB URL连接地址是否正常:

iSQL*Plus URL:连接地址:http://linuxsvr01:11/isqlplus

iSQL*Plus DBA URL:连接地址:http://linuxsvr01:5560/isqlplus/dba

Enterprise Manager 10g Database Control URL测试:

连接地址:http://linuxsvr01:1158/em

用户名:sys

口令:******

连接身份:SYSDBA

继续登陆请单击 “我同意”按键;

 

四、测试Oracle 10g 数据库:

1. 启动Oracle10g 数据库sqlplus

$ sqlplus "scott/tiger as sysdba"

将出现如下连接数据库信息:

SQL*Plus: Release 10.1.0.2.0 - Production on 星期三 3月 24 16:23:27 2004

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

连接到:

Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production

With the Partitioning, OLAP and Data Mining options

SQL>

表明登录数据库系统成功,运行startup命令启动数据库。

SQL> startup

ORACLE instance started.

Total System Global Area 336356520 bytes

Fixed Size 279720 bytes

Variable Size 268435456 bytes

Database Buffers 67108864 bytes

Redo Buffers 532480 bytes

Database mounted.

Database opened.

SQL>

表示数据库正常启动。

2. 关闭Oracle10g 数据库

$ sqlplus "scott/tiger as sysdba" //以sysdba用户登录数据库

成功登录数据库系统后,运行shudown命令关闭数据库。

SQL> shutdown

3. 启动Oracle10g监听程序

Oracle的监听程序主要是为客户端的连接提供接口,在控制台窗口键入如下命令:

$ lsnrctl

将出现如下监听程序信息:

LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 24-3月 -2004 16

:59:51

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

欢迎来到LSNRCTL, 请键入"help"以获得信息。

LSNRCTL>

表明登录监听程序控制台成功,运行start命令启动监听程序。

LSNRCTL> start

将出现监听程序的一系列启动和配置情况信息列表。

信息行的最后一行是“The command completed successfully”字样时,监听程序启动成功。

4. 关闭Oracle10g监听程序

运行stop命令关闭监听程序。

LSNRCTL> stop

 

五、设置oracle自动启动与关闭

1、编辑 /etc/oratab,把所有的 instance 的重启动标志设置成 'Y',如:

fstest:/oracle/product/ 10.2.0:Y

2、做一个启动脚本 /etc/init.d/dbora ,如下所示:

#!/bin/sh

# description: Oracle auto start-stop script.

 

# chkconfig: - 20 80

#

# Set ORA_HOME to be equivalent to the $ORACLE_HOME

# from which you wish to execute dbstart and dbshut;

#

# Set ORA_OWNER to the user id of the owner of the

# Oracle database in ORA_HOME.

ORA_HOME=/oracle/product/10.2.0/

ORA_OWNER=oracle

if [ ! -f $ORA_HOME/bin/dbstart ]

then

echo "Oracle startup: cannot start"

exit

fi

case "$1" in

'start')

# Start the Oracle databases:

# The following command assumes that the oracle login

# will not prompt the user for any values

su - $ORA_OWNER -c $ORA_HOME/bin/dbstart

su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"

;;

'stop')

# Stop the Oracle databases:

# The following command assumes that the oracle login

# will not prompt the user for any values

su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"

su - $ORA_OWNER -c $ORA_HOME/bin/dbshut

;;

'restart')

$0 stop

$0 start

;;

esac

3、赋予执行权限

chmod 750 /etc/init.d/dbora

作成以下链接:

ln -s /etc/init.d/dbora /etc/rc0.d/K10dbora

ln -s /etc/init.d/dbora /etc/rc3.d/S99dbora

执行以下命令:

chkconfig --level 345 dbora on 

Select Count (*)和Select Count(1)以及Select Count(column)的区别

 

一般情况下,两着返回结果是一样的

假如表沒有主键(Primary key), 那么count(1)比count(*)快

如果有主键的話,那主键作为count的条件时候count(主键)最快

如果你的表只有一个字段的话那count(*)就是最快的

count(*) 跟 count(1) 的结果一样,都包括对NULL的统计
count(column) 是不包括NULL的统计
 
其原理是对数字1进行统计,会将表中所有记录转化为1,然后再计数统计
相当于先select 1 from table 然后count

如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null."
这句话的意思说如果字段是有空值的话,你用SUM去计算,得到的结果有可能不准确.
看一个实例:
    表A
    ID    EE
      1      e
      2    null
    select  count(*) from A  --结果是2
    select  count(EE)  from A  ---结果是1
 

导出ORACLE数据库中某个表字段中数据

在D盘根目录(任意目录也可)建立一个名为export.sql的文件:

 

SET feedback off heading off verify off trimspool ON

SET pagesize 0

spool 'D:\ORACLE_output.txt'

SELECT empno FROM dljgdm;

spool off;


执行

在Sqlplus下使用用户名及密码登陆,然后使用以下命令操作执行

SQL>@d:\export.sql

--通过变换SQL文件中的查询语句,我们可以得到任意想输出的结果集

Verify off要设置,不然设置的heading off会失效

Trimspool 要设置为on ,不然输出的数据后面会带很多空格,进而让你生成的文本文件巨大无比。