
mysql 把select结果保存为临时表,有2种方法 第一种,建立正式的表,此表可供你反复查询 drop table if exists a_temp; create table a_temp as select 表字段名称 from 表名称 truncate与delete的区别 truncate table命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与delete from 数据表的删除全部数据表记录不一样,delete命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate命令删除的数据是不可以恢复的 或者,建立临时表,此表可供你当次链接的操作里查询. create temporary table 临时表名称 select 表字段名称 from 表名称
1. 安装: 百度一下你就知道 2. sqlplus登录/sqlplus命令登录 在安装Oracle时,你需要记住设置的“全局数据库名”(默认为orcl) 和 口令,在以两种方式登录时: 用户名: sys(超级用户==sysdba) / system(管理员用户 和sys想比区别在于system不能创建表空间)... 口 令:注意这里不仅仅要输入你设置的口令,在后面还要加上as sysdba 如:orcl as sysdba 3. 创建临时表空间/表空间/创建用户/授权 代码如下: 1:创建临时表空间 create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; 2:创建数据表空间 create tablespace user_data logging datafile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; 第3步:创建用户并指定表空间 create user username identified by password default tablespace user_data temporary tablespace user_temp; 第4步:给用户授予权限 grant connect,resource,dba to username; 4. 删除操作中的truncate,delete(不带where子句的delete语句),drop异同-------转至CSDN志志的博客 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1.truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效; 如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效, 原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 显然drop语句将表所占用的空间全部释放 truncate 语句缺省情况下见空间释放到 minextents个 extent, 除非使用reuse storage; truncate会将高水线复位(回到最开始). 4.速度,一般来说: drop>; truncate >; delete 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及 使用上, 想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表, 当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete. 如果是整理表内部的碎片, 可以用truncate跟上reuse stroage,再重新导入/插入数据 转自:http://www.cnblogs.com/xmaomao/p/3273102.html
1. 安装: 百度一下你就知道 2. sqlplus登录/sqlplus命令登录 在安装Oracle时,你需要记住设置的“全局数据库名”(默认为orcl) 和 口令,在以两种方式登录时: 用户名: sys(超级用户==sysdba) / system(管理员用户 和sys想比区别在于system不能创建表空间)... 口 令:注意这里不仅仅要输入你设置的口令,在后面还要加上as sysdba 如:orcl as sysdba 3. 创建临时表空间/表空间/创建用户/授权 代码如下: 1:创建临时表空间 create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; 2:创建数据表空间 create tablespace user_data logging datafile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; 第3步:创建用户并指定表空间 create user username identified by password default tablespace user_data temporary tablespace user_temp; 第4步:给用户授予权限 grant connect,resource,dba to username; 4. 删除操作中的truncate,delete(不带where子句的delete语句),drop异同-------转至CSDN志志的博客 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1.truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效; 如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效, 原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 显然drop语句将表所占用的空间全部释放 truncate 语句缺省情况下见空间释放到 minextents个 extent, 除非使用reuse storage; truncate会将高水线复位(回到最开始). 4.速度,一般来说: drop>; truncate >; delete 5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及 使用上, 想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表, 当然用drop 想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete. 如果是整理表内部的碎片, 可以用truncate跟上reuse stroage,再重新导入/插入数据 转自:http://www.cnblogs.com/xmaomao/p/3273102.html
4种包的介绍: ***_database_*.zip 是oracle数据库 服务端 软件的安装包,如果你要创建一个数据库,请下载这个版本 ***_client_*.zip 是oracle数据库 客户端 软件的安装包,如果你不需要创建数据库,只是用来操作远程电脑上的数据库时,请下载这个版本 ***_gateways_*.zip oracle透明网关,如果你要链接其他数据库,请下载这个软件包 ***_clusterware_*.zip oracle集群软件,如果你要做RAC,请下载这个软件包 Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux32.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86-64http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux_x86_64.cpio.gz Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit)http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_clusterware_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_gateways_win32.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (x64)http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_clusterware.zip 如果是win7 64位,可能下载上面的版本还是无法安装,需要下载下面的这个版本:http://download.oracle.com/otn/nt/oracle10g/10204/10204_vista_w2k8_x64_production_db.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for AIX5Lhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_database.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_client.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_cluster.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_gateways.cpio.gz Oracle Database 10g Release 2 (10.2.0.2) Enterprise/Standard Edition for Solaris Operating System (x86)http://download.oracle.com/otn/solaris/oracle10g/10202/10202_database_solx86.ziphttp://download.oracle.com/otn/solaris/oracle10g/10202/10202_client_solx86.ziphttp://download.oracle.com/otn/solaris/oracle10g/10202/10202_clusterware_solx86.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Solaris Operating System (x86-64)http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_database_solx86_64.ziphttp://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_client_solx86_64.ziphttp://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_clusterware_solx86_64.zip
4种包的介绍: ***_database_*.zip 是oracle数据库 服务端 软件的安装包,如果你要创建一个数据库,请下载这个版本 ***_client_*.zip 是oracle数据库 客户端 软件的安装包,如果你不需要创建数据库,只是用来操作远程电脑上的数据库时,请下载这个版本 ***_gateways_*.zip oracle透明网关,如果你要链接其他数据库,请下载这个软件包 ***_clusterware_*.zip oracle集群软件,如果你要做RAC,请下载这个软件包 Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux32.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86-64http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux_x86_64.cpio.gz Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit)http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_clusterware_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_gateways_win32.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (x64)http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_clusterware.zip 如果是win7 64位,可能下载上面的版本还是无法安装,需要下载下面的这个版本:http://download.oracle.com/otn/nt/oracle10g/10204/10204_vista_w2k8_x64_production_db.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for AIX5Lhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_database.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_client.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_cluster.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_gateways.cpio.gz Oracle Database 10g Release 2 (10.2.0.2) Enterprise/Standard Edition for Solaris Operating System (x86)http://download.oracle.com/otn/solaris/oracle10g/10202/10202_database_solx86.ziphttp://download.oracle.com/otn/solaris/oracle10g/10202/10202_client_solx86.ziphttp://download.oracle.com/otn/solaris/oracle10g/10202/10202_clusterware_solx86.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Solaris Operating System (x86-64)http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_database_solx86_64.ziphttp://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_client_solx86_64.ziphttp://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_clusterware_solx86_64.zip
4种包的介绍: ***_database_*.zip 是oracle数据库 服务端 软件的安装包,如果你要创建一个数据库,请下载这个版本 ***_client_*.zip 是oracle数据库 客户端 软件的安装包,如果你不需要创建数据库,只是用来操作远程电脑上的数据库时,请下载这个版本 ***_gateways_*.zip oracle透明网关,如果你要链接其他数据库,请下载这个软件包 ***_clusterware_*.zip oracle集群软件,如果你要做RAC,请下载这个软件包 Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux32.ziphttp://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux32.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Linux x86-64http://download.oracle.com/otn/linux/oracle10g/10201/10201_database_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_client_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gzhttp://download.oracle.com/otn/linux/oracle10g/10201/10201_gateways_linux_x86_64.cpio.gz Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit)http://download.oracle.com/otn/nt/oracle10g/10201/10201_database_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_client_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_clusterware_win32.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/10201_gateways_win32.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (x64)http://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_database.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_client.ziphttp://download.oracle.com/otn/nt/oracle10g/10201/102010_win64_x64_clusterware.zip 如果是win7 64位,可能下载上面的版本还是无法安装,需要下载下面的这个版本:http://download.oracle.com/otn/nt/oracle10g/10204/10204_vista_w2k8_x64_production_db.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for AIX5Lhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_database.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_client.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_cluster.cpio.gzhttp://download.oracle.com/otn/aix/oracle10g/10201/10gr2_aix5l64_gateways.cpio.gz Oracle Database 10g Release 2 (10.2.0.2) Enterprise/Standard Edition for Solaris Operating System (x86)http://download.oracle.com/otn/solaris/oracle10g/10202/10202_database_solx86.ziphttp://download.oracle.com/otn/solaris/oracle10g/10202/10202_client_solx86.ziphttp://download.oracle.com/otn/solaris/oracle10g/10202/10202_clusterware_solx86.zip Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Solaris Operating System (x86-64)http://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_database_solx86_64.ziphttp://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_client_solx86_64.ziphttp://download.oracle.com/otn/solaris/oracle10g/10201/x8664/10201_clusterware_solx86_64.zip
http://www.doc88.com/p-158267454347.html
服务器被重启之后连接出错,登陆服务器 sqlplus可以连接,但是jdbc以及sqldeveloper连接报错 ORA-12526 。 网上搜索到: 今天使用PL/SQL远程连接oracle数据库出现oracle ORA-12526: TNS: 监听程序: 所有适用例程都处于受限模式。 查了下原来之前改字符集时执行了:ALTER SYSTEM ENABLE RESTRICTED SESSION; 导致受限 解决办法:使用系统管理员身份运行以下一段代码 ALTER SYSTEM DISABLE RESTRICTED SESSION;
工具/原料 PLSQL 方法1 1 双击运行PLSQL Developer软件,连接oracle数据库服务器 2 在“对象”下,找到users,右击选择“新建” 3 在弹出的“创建用户”窗口中,输入新用户的名称、口令,默认表空间、临时表空间等 4 赋予新用户权限,赋予其角色权限:connect、resource,这样用户才能登录操作数据库 END 方法2 通过sql语句创建用户:依次单击“文件”--“新建”--“SQL窗口” 输入sql语句: -- Create the user create user USER2 --用户名 identified by user2 --口令 default tablespace USERS --默认表空间 temporary tablespace TEMP --临时表空间 单击执行按钮或按快捷键F8,执行sql语句,创建用户 输入sql语句: -- Grant/Revoke role privileges grant connect to USER2;grant resource to USER2; 给用户赋予权限,按F8执行语句 运行plsql,输入新建用户的用户名和口令登录 END PLSQL(共3篇)
升级oracle10g,启动oracle时出现以下错误: ORA-00704: 引导程序进程失败 ORA-39700: 必须用 UPGRADE 选项打开数据库 网上搜索了一下,发现需要配置一下才能启动oracle。 步骤如下: 1.startup upgrade 启动数据库。 2.在sqlplus里执行catupgrd.sql脚本,这个脚本用于重建数据字典视图脚本。 3然后重启数据库后,再执行utlrp.sql脚本,这个脚本用于编译无效对象。 4再次重启数据库,解决ora 39700.
把帝国备份王传到空间上面打开 index.php 显示空白页 ,其他的php文件也都不行。 解决办法: php.ini配置问题,按下面修改即可解决:修改php.ini,将:short_open_tag 设为 On
ubuntu root默认密码(初始密码) ubuntu安装好后,root初始密码(默认密码)不知道,需要设置。 1、先用安装时候的用户登录进入系统 2、输入:sudo passwd 按回车 3、输入新密码,重复输入密码,最后提示passwd:password updated sucessfully 此时已完成root密码的设置 4、输入:su root 切换用户到root试试.......
最新版的FileZilla server 在windows 2003系统下已经不能用了, http://pan.baidu.com/s/1bn1YcnP FileZilla_Server-0_9_43.exe
参考文一: 转自 http://blog.csdn.net/jiangnan2014/article/details/17305865 闲来无事,想把Oracle 11g重装一下,记录如下: (1)首先在服务中停止所有的Oracle服务; (2)开始 -> 程序 -> Oracle-OraDb11g_home1 -> Oracle Installation Products -> Universal Installer,单击“卸载产品”-“全部展开”,然后选中除“OraDb11g_home1”外的全部目录,进行删除; (3)删除注册表: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有以Oracle或OraWeb开头的; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,将Oracle删除; HKEY_CLASSES_ROOT,将所有以Ora、Oracle、Orcl或EnumOra为前缀的都删除; HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programs,将所有以Oracle开头的键都删除; HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI,将除Microsoft ODBC for Oracle以外的所有含有Oracle的键都删除; 其中有些注册表项可能在卸载Oracle产品的时候已经被删除; (4)查看环境变量,删除CLASSPATH和PATH中有关Oracle的设置; (5)删除: a. 将桌面上、程序菜单所有与Oracle有关的图标都删除; b. C:\Program files\Oracle目录; c. C:\WINDOWS\system32\config\systemprofile\Oracle目录 d. C:\Users\Administrator\Oracle或C:\Documents and Settings\Administrator\Oracle目录; e. C:\windows下删除以下文件:ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等; f. C:\WINDOWS下的WIN.INI文件中若有[ORACLE]的标记段,删除该段; 到此,就完全卸载Oracle了,重启电脑,安装就可以了! 参考文二: 1、 开始->设置->控制面板->管理工具->服务 停止所有Oracle服务。 2、 开始->程序->Oracle - OraHome81->Oracle Installation Products-> Universal Installer 卸装所有Oracle产品,但Universal Installer本身不能被删除 5、 运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。 6、 运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动 这个列表,删除所有Oracle入口。 7、 运行refedit, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application, 删除所有Oracle入口。 8、 开始->设置->控制面板->系统->高级->环境变量 删除环境变量CLASSPATH和PATH中有关Oracle的设定 9、 从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标 10、 删除\Program Files\Oracle目录 11、 重新启动计算机,重起后才能完全删除Oracle所在目录 12、 删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入 口目录及所有子目录,并从Windows 2000目录(一般为C:\WINNT)下删除以下文 件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。 13、 WIN.INI文件中若有[ORACLE]的标记段,删除该段 14、 如有必要,删除所有Oracle相关的ODBC的DSN 15、 到事件查看器中,删除Oracle相关的日志 说明: 如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装, 安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了。 闲来无事,想把Oracle 11g重装一下,记录如下: (1)首先在服务中停止所有的Oracle服务; (2)开始 -> 程序 -> Oracle-OraDb11g_home1 -> Oracle Installation Products -> Universal Installer,单击“卸载产品”-“全部展开”,然后选中除“OraDb11g_home1”外的全部目录,进行删除; (3)删除注册表: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有以Oracle或OraWeb开头的; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,将Oracle删除; HKEY_CLASSES_ROOT,将所有以Ora、Oracle、Orcl或EnumOra为前缀的都删除; HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programs,将所有以Oracle开头的键都删除; HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI,将除Microsoft ODBC for Oracle以外的所有含有Oracle的键都删除; 其中有些注册表项可能在卸载Oracle产品的时候已经被删除; (4)查看环境变量,删除CLASSPATH和PATH中有关Oracle的设置; (5)删除: a. 将桌面上、程序菜单所有与Oracle有关的图标都删除; b. C:\Program files\Oracle目录; c. C:\WINDOWS\system32\config\systemprofile\Oracle目录 d. C:\Users\Administrator\Oracle或C:\Documents and Settings\Administrator\Oracle目录; e. C:\windows下删除以下文件:ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等; f. C:\WINDOWS下的WIN.INI文件中若有[ORACLE]的标记段,删除该段; 到此,就完全卸载Oracle了,重启电脑,安装就可以了!
1. 使用vncserver命令为当前用户启动vnc服务(将在当前用户主目录下生成.vnc配置文件夹) [root@tech `]# vncserver You will require a password to access your desktops. Password:<输入密码> Verify:<输入密码> 2. 首次创建 /.vnc/xstartup 时,指定的窗口管理器是twn,它是一个极小的窗口管理器,几乎每台xwindows系统及其上都有twn 。twn不具备完整桌面管理器的大部分花哨功能,下面是修改过的实例。 [root@tech]# vi .vnc/xstartup 在最下面添加一行: DISPPLAY=:1 gnome-session & 3. 设置开机自动运行vncserver a. 在/etc/rc.d/rc.local文件中加入下面行 /etc/init.d/vncserver start b. 编辑/etc/sysconfig/vncservers VNCSERVERS="1:root" VNCSERVERARGS[1]="-geometry 1024x768" --配置启动的桌面 多个用户可以这样写: VNCSERVERS= "1:user 2:user2 3:user3" redhat系统上vnc启动命令: /etc/init.d/vncserver start 查看vnc启动情况 netstat -tulnp 关闭服务器上自己的vnc链接 vncserver -kill :桌面号 例如:关闭上面的vnc链接 vncserver -kill :1
首先,看virtualbox的网络设置 没什么特别的,就是选桥接,选无线网卡就完事,记得“接入网张”一项要打勾。 2. centos设置 值得注意的是以下配置是在“有线”选项卡,你就不要再去“无线”选项卡去折腾了。 网络地址自己设置一下,ip为本地局域网中的ip 我本机的是192.168.9.10,然后双机就可以通了,在centos中也能访问外网了。 首先,看virtualbox的网络设置 没什么特别的,就是选桥接,选无线网卡就完事,记得“接入网张”一项要打勾。 2. centos设置 值得注意的是以下配置是在“有线”选项卡,你就不要再去“无线”选项卡去折腾了。 网络地址自己设置一下,ip为本地局域网中的ip 我本机的是192.168.9.10,然后双机就可以通了,在centos中也能访问外网了。
Redhat使用了SELinux来增强安全,关闭的办法为: 1. 永久有效 修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启。 2. 即时生效 setenforce 0 关闭防火墙的方法为: 1. 永久性生效 开启:chkconfig iptables on 关闭:chkconfig iptables off 2. 即时生效,重启后失效 开启:service iptables start 关闭:service iptables stop 需要说明的是对于 Linux 下的其它服务都可以用以上命令执行开启和关闭操作 补充: a. 防火墙还需要关闭ipv6的防火墙: chkconfig ip6tables off 并且可以通过如下命令查看状态: chkconfig --list iptables b. selinux状态可以通过以下命令查看: sestatus 转自:http://blog.chinaunix.net/uid-11582448-id-3157977.html
1.create user username identified by password;//建用户名和密码oracle ,oracle 2.grant connect,resource,dba to username;//授权 grant connect,resource,dba,sysdba to username; 3.connect username/password//进入。 4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查询表中的表名,字段名等等。 5. 如何执行脚本SQL文件? SQL>@PATH/filename.sql; 6.Oracle oledb 提供者在command中执行多条SQL语句与SQL SERVER有少许差别,SQL Server只需使用";"分割多条SQL语句,而Oracle需要遵守ORACLE调用规范,即除分号分割外,还需以begin /end;包围语句体. 使用C#描述应如下所示: this.oleDbCommand1.CommandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) VALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) VALUES (2, \'2\'); end;"; 7.查询用户下的所有表 select distinct table_name from user_tab_columns; 8.如何搜索出前N条记录?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum<n 9.查找用户下的所有表:select * from tab; 2、显示当前连接用户 SQL> show user 3、查看系统拥有哪些用户 SQL> select * from all_users; 4、新建用户并授权 SQL> create user a identified by a;(默认建在SYSTEM表空间下) SQL> grant connect,resource to a; 5、连接到新用户 SQL> conn a/a 6、查询当前用户下所有对象 SQL> select * from tab; 7、建立第一个表 SQL> create table a(a number); 8、查询表结构 SQL> desc a 9、插入新记录 SQL> insert into a values(1); 10、查询记录 SQL> select * from a; 11、更改记录 SQL> update a set a=2; 12、删除记录 SQL> delete from a; 13、回滚 SQL> roll; SQL> rollback; 14、提交 SQL> commit; select * from (select t.*,dense_rank() over (order by cardkind) rank from cardkind t) where rank = 2; 46. 如何在字符串里加回车? select 'Welcome to visit'||chr(10)||'www.CSDN.NET' from dual ; 47. 中文是如何排序的? Oracle9i之前,中文是按照二进制编码进行排序的。 在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值 SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序 SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序 SCHINESE_PINYIN_M 按照拼音排序 48. Oracle8i中对象名可以用中文吗? 可以 49. 如何改变WIN中SQL*Plus启动选项? SQL*PLUS自身的选项设置我们可以在$ORACLE_HOME/sqlplus/admin/glogin.sql中设置。 50. 怎样修改oracel数据库的默认日期? alter session set nls_date_format='yyyymmddhh24miss'; OR 可以在init.ora中加上一行 nls_date_format='yyyymmddhh24miss' 51. 如何将小表放入keep池中? alter table xxx storage(buffer_pool keep); 52. 如何检查是否安装了某个patch? check that oraInventory 53. 如何使select语句使查询结果自动生成序号? select rownum,COL from table; 54. 如何知道数据裤中某个表所在的tablespace? select tablespace_name from user_tables where table_name='TEST'; select * from user_tables中有个字段TABLESPACE_NAME,(oracle); select * from dba_segments where …; 55. 怎么可以快速做一个和原表一样的备份表? create table new_table as (select * from old_table); 55. 怎么在sqlplus下修改procedure? select line,trim(text) t from user_source where name ='A' order by line; 56. 怎样解除PROCEDURE被意外锁定? alter system kill session ,把那个session给杀掉,不过你要先查出她的session id or 把该过程重新改个名字就可以了。 57. SQL Reference是个什么东西? 是一本sql的使用手册,包括语法、函数等等,oracle官方网站的文档中心有下载. 58. 如何查看数据库的状态? unix下 ps -ef | grep ora windows下 看服务是否起来 是否可以连上数据库 59. 请问如何修改一张表的主键? alter table aaa drop constraint aaa_key ; alter table aaa add constraint aaa_key primary key(a1,b1) ; 60. 改变数据文件的大小? 用 ALTER DATABASE .... DATAFILE .... ; 手工改变数据文件的大小,对于原来的 数据文件有没有损害。 61. 怎样查看ORACLE中有哪些程序在运行之中? 查看v$sessions表 62. 怎么可以看到数据库有多少个tablespace? select * from dba_tablespaces; 63. 如何修改oracle数据库的用户连接数? 修改initSID.ora,将process加大,重启数据库. 64. 如何查出一条记录的最后更新时间? 可以用logminer 察看 65. 如何在PL/SQL中读写文件? UTL_FILE包允许用户通过PL/SQL读写操作系统文件。 66. 怎样把"&"放入一条记录中? insert into a values (translate ('at{&}t','at{}','at')); 67. EXP 如何加QUERY参数? EXP USER/PASS FILE=A.DMP TABLES(BSEMPMS) QUERY='"WHERE EMP_NO=\'S09394\'\" ﹔ 68. 关于oracle8i支持简体和繁体的字符集问题? ZHS16GBK可以支 69. Data Guard是什么软件? 就是Standby的换代产品 70. 如何创建SPFILE? SQL> connect / as sysdba SQL> select * from v$version; SQL> create pfile from spfile; SQL> CREATE SPFILE FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora'; 文件已创建。 SQL> CREATE SPFILE='E:\ora9i\database\SPFILEEYGLE.ORA' FROM PFILE='E:\ora9i\admin\eygle\pfile\init.ora'; 文件已创建。 71. 内核参数的应用? shmmax 含义:这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了 最多可以使用的内存数目。这个设置也不影响操作系统的内核资源。 设置方法:0.5*物理内存 例子:Set shmsys:shminfo_shmmax=10485760 shmmin 含义:共享内存的最小大小。 设置方法:一般都设置成为1。 例子:Set shmsys:shminfo_shmmin=1: shmmni 含义:系统中共享内存段的最大个数。 例子:Set shmsys:shminfo_shmmni=100 shmseg 含义:每个用户进程可以使用的最多的共享内存段的数目。 例子:Set shmsys:shminfo_shmseg=20: semmni 含义:系统中semaphore identifierer的最大个数。 设置方法:把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大 的那个processes的那个值加10。 例子:Set semsys:seminfo_semmni=100 semmns 含义:系统中emaphores的最大个数。 设置方法:这个值可以通过以下方式计算得到:各个Oracle实例的initSID.ora里边的 processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10× Oracle实例的个数。 例子:Set semsys:seminfo_semmns=200 semmsl: 含义:一个set中semaphore的最大个数。 设置方法:设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。 例子:Set semsys:seminfo_semmsl=-200 72. 怎样查看哪些用户拥有SYSDBA、SYSOPER权限? SQL>conn sys/change_on_install SQL>select * from V_$PWFILE_USERS; 73. 如何单独备份一个或多个表? exp 用户/密码 tables=(表1,…,表2) 74. 如何单独备份一个或多个用户? exp system/manager owner=(用户1,用户2,…,用户n) file=导出文件 75. 如何对CLOB字段进行全文检索? SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)>0; 76. 如何显示当前连接用户? SHOW USER 77. 如何查看数据文件放置的路径 ? col file_name format a50 SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id; 78. 如何查看现有回滚段及其状态 ? SQL> col segment format a30 SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE _ID,STATUS FROM DBA_ROLLBACK_SEGS 79. 如何改变一个字段初始定义的Check范围? SQL> alter table xxx drop constraint constraint_name; 之后再创建新约束: SQL> alter table xxx add constraint constraint_name check(); 80. Oracle常用系统文件有哪些? 通过以下视图显示这些文件信息:v$database,v$datafile,v$logfile v$controlfile v$parameter; 81. 内连接INNER JOIN? Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no; 82. 如何外连接? Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+); Select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no; 83. 如何执行脚本SQL文件? SQL>@$PATH/filename.sql; 84. 如何快速清空一个大表? SQL>truncate table table_name; 查看数据库名 SQL> select name from v$database; 85. 如何查有多少个数据库实例? SQL>SELECT * FROM V$INSTANCE; 86. 如何查询数据库有多少表? SQL>select * from all_tables; 87. 如何测试SQL语句执行所用的时间? SQL>set timing on ; SQL>select * from tablename; 88. CHR()的反函数是? ASCII() SELECT CHAR(65) FROM DUAL; SELECT ASCII('A') FROM DUAL; 89. 字符串的连接 SELECT CONCAT(COL1,COL2) FROM TABLE ; SELECT COL1||COL2 FROM TABLE ; 90. 怎么把select出来的结果导到一个文本文件中? SQL>SPOOL C:\ABCD.TXT; SQL>select * from table; SQL >spool off; 91. 怎样估算SQL执行的I/O数 ? SQL>SET AUTOTRACE ON ; SQL>SELECT * FROM TABLE; OR SQL>SELECT * FROM v$filestat ; 可以查看IO数 92. 如何在sqlplus下改变字段大小? alter table table_name modify (field_name varchar2(100)); 改大行,改小不行(除非都是空的) 93. 如何查询某天的数据? select * from table_name where trunc(日期字段)=to_date('2003-05-02','yyyy-mm- dd'); 94. sql 语句如何插入全年日期? create table BSYEAR (d date); insert into BSYEAR select to_date('20030101','yyyymmdd')+rownum-1 from all_objects where rownum <= to_char(to_date('20031231','yyyymmdd'),'ddd'); 95. 如果修改表名? alter table old_table_name rename to new_table_name; 96. 如何取得命令的返回状态值? sqlcode=0 97. 如何知道用户拥有的权限? SELECT * FROM dba_sys_privs ; 98. 从网上下载的ORACLE9I与市场上卖的标准版有什么区别? 从功能上说没有区别,只不过oracle公司有明文规定;从网站上下载的oracle产品不得用于 商业用途,否则侵权。 99. 怎样判断数据库是运行在归档模式下还是运行在非归档模式下? 进入dbastudio,历程--〉数据库---〉归档查看。 100. sql>startup pfile和ifile,spfiled有什么区别? pfile就是Oracle传统的初始化参数文件,文本格式的。 ifile类似于c语言里的include,用于把另一个文件引入 spfile是9i里新增的并且是默认的参数文件,二进制格式 startup后应该只可接pfile 101. 如何搜索出前N条记录? SELECT * FROM empLOYEE WHERE ROWNUM < n ORDER BY empno; 102. 如何知道机器上的Oracle支持多少并发用户数? SQL>conn internal ; SQL>show parameter processes ; 103. db_block_size可以修改吗? 一般不可以﹐不建议这样做的。 104. 如何统计两个表的记录总数? select (select count(id) from aa)+(select count(id) from bb) 总数 from dual; 105. 怎样用Sql语句实现查找一列中第N大值? select * from (select t.*,dense_rank() over (order by sal) rank from employee) where rank = N; 106. 如何在给现有的日期加上2年?( select add_months(sysdate,24) from dual; 107. USED_UBLK为负值表示什么意思? It is "harmless". 108. Connect string是指什么? 应该是tnsnames.ora中的服务名后面的内容 109. 怎样扩大REDO LOG的大小? 建立一个临时的redolog组,然后切换日志,删除以前的日志,建立新的日志。 110. tablespace 是否不能大于4G? 没有限制. 111. 返回大于等于N的最小整数值? SELECT CEIL(N) FROM DUAL; 112. 返回小于等于N的最小整数值? SELECT FLOOR(N) FROM DUAL; 113. 返回当前月的最后一天? SELECT LAST_DAY(SYSDATE) FROM DUAL; 114. 如何不同用户间数据导入? IMP SYSTEM/MANAGER FILE=AA.DMP FROMUSER=USER_OLD TOUSER=USER_NEW ROWS=Y INDEXES=Y 115. 如何找数据库表的主键字段的名称? SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and table_name='TABLE_NAME'; 116. 两个结果集互加的函数? SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW; SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW; SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW; 117. 两个结果集互减的函数? SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW; 118. 如何配置Sequence? 建sequence seq_custid create sequence seq_custid start 1 incrememt by 1; 建表时: create table cust { cust_id smallint not null, ...} insert 时: insert into table cust values( seq_cust.nextval, ...) 日期的各部分的常用的的写法 119>.取时间点的年份的写法: SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL; 120>.取时间点的月份的写法: SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL; 121>.取时间点的日的写法: SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL; 122>.取时间点的时的写法: SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL; 123>.取时间点的分的写法: SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL; 124>.取时间点的秒的写法: SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL; 125>.取时间点的日期的写法: SELECT TRUNC(SYSDATE) FROM DUAL; 126>.取时间点的时间的写法: SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL; 127>.日期,时间形态变为字符形态 SELECT TO_CHAR(SYSDATE) FROM DUAL; 128>.将字符串转换成日期或时间形态: SELECT TO_DATE('2003/08/01') FROM DUAL; 129>.返回参数的星期几的写法: SELECT TO_CHAR(SYSDATE,'D') FROM DUAL; 130>.返回参数一年中的第几天的写法: SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL; 131>.返回午夜和参数中指定的时间值之间的秒数的写法: SELECT TO_CHAR(SYSDATE,'SSSSS') FROM DUAL; 132>.返回参数中一年的第几周的写法: SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL; 虚拟字段 133. CURRVAL 和 nextval 为表创建序列 CREATE SEQUENCE EMPSEQ ... ; SELECT empseq.currval FROM DUAL ; 自动插入序列的数值 INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK', 7902, SYSDATE, 1200, NULL, 20) ; 134. ROWNUM 按设定排序的行的序号 SELECT * FROM emp WHERE ROWNUM < 10 ; 135. ROWID 返回行的物理地址 SELECT ROWID, ename FROM emp WHERE deptno = 20 ; 136. 将N秒转换为时分秒格式? set serverout on declare N number := 1000000; ret varchar2(100); begin ret := trunc(n/3600) || '小时' || to_char(to_date(mod(n,3600),'sssss'),'fmmi"分 "ss"秒"') ; dbms_output.put_line(ret); end; 137. 如何查询做比较大的排序的进程? SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid, a.serial#, a.username, a.osuser, a.status FROM v$session a,v$sort_usage b WHERE a.saddr = b.session_addr ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks ; 138. 如何查询做比较大的排序的进程的SQL语句? select /*+ ORDERED */ sql_text from v$sqltext a where a.hash_value = ( select sql_hash_value from v$session b where b.sid = &sid and b.serial# = &serial) order by piece asc ; 139. 如何查找重复记录? SELECT * FROM TABLE_NAME WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2); 140. 如何删除重复记录? DELETE FROM TABLE_NAME WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2); 141. 如何快速编译所有视图? SQL >SPOOL VIEW1.SQL SQL >SELECT 'ALTER VIEW '||TNAME||' COMPILE;' FROM TAB; SQL >SPOOL OFF 然后执行VIEW1.SQL即可。 SQL >@VIEW1.SQL; 142. ORA-01555 SNAPSHOT TOO OLD的解决办法 增加MINEXTENTS的值,增加区的大小,设置一个高的OPTIMAL值。 143. 事务要求的回滚段空间不够,表现为表空间用满(ORA-01560错误),回滚段扩展到达 参数 MAXEXTENTS的值(ORA-01628)的解决办法. 向回滚段表空间添加文件或使已有的文件变大;增加MAXEXTENTS的值。 144. 如何加密ORACLE的存储过程? 下列存储过程内容放在AA.SQL文件中 create or replace procedure testCCB(i in number) as begin dbms_output.put_line('输入参数是'||to_char(i)); end; SQL>wrap iname=a.sql; PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27 22:26:48 2001 Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved. Processing AA.sql to AA.plb 运行AA.plb SQL> @AA.plb ; 145. 如何监控事例的等待? select event,sum(decode(wait_Time,0,0,1)) "Prev", sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot" from v$session_Wait group by event order by 4; 146. 如何回滚段的争用情况? select name, waits, gets, waits/gets "Ratio" from v$rollstat C, v$rollname D where C.usn = D.usn; 147. 如何监控表空间的 I/O 比例? select B.tablespace_name name,B.file_name "file",A.phyrds pyr, A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw from v$filestat A, dba_data_files B where A.file# = B.file_id order by B.tablespace_name; 148. 如何监控文件系统的 I/O 比例? select substr(C.file#,1,2) "#", substr(C.name,1,30) "Name", C.status, C.bytes, D.phyrds, D.phywrts from v$datafile C, v$filestat D where C.file# = D.file#; 149. 如何在某个用户下找所有的索引? select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name from user_ind_columns, user_indexes where user_ind_columns.index_name = user_indexes.index_name and user_ind_columns.table_name = user_indexes.table_name order by user_indexes.table_type, user_indexes.table_name, user_indexes.index_name, column_position; 150. 如何监控 SGA 的命中率? select a.value + b.value "logical_reads", c.value "phys_reads", round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO" from v$sysstat a, v$sysstat b, v$sysstat c where a.statistic# = 38 and b.statistic# = 39 and c.statistic# = 40; 151. 如何监控 SGA 中字典缓冲区的命中率? select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio", (1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio" from v$rowcache where gets+getmisses <>0 group by parameter, gets, getmisses; 152. 如何监控 SGA 中共享缓存区的命中率,应该小于1% ? select sum(pins) "Total Pins", sum(reloads) "Total Reloads", sum(reloads)/sum(pins) *100 libcache from v$librarycache; select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent" from v$librarycache; 153. 如何显示所有数据库对象的类别和大小? select count(name) num_instances ,type ,sum(source_size) source_size , sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size, sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required from dba_object_size group by type order by 2; 154. 监控 SGA 中重做日志缓存区的命中率,应该小于1% SELECT name, gets, misses, immediate_gets, immediate_misses, Decode(gets,0,0,misses/gets*100) ratio1, Decode(immediate_gets+immediate_misses,0,0, immediate_misses/(immediate_gets+immediate_misses) *100) ratio2 FROM v$latch WHERE name IN ('redo allocation', 'redo copy'); 155. 监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)'); 156. 如何监控当前数据库谁在运行什么SQL语句? SELECT osuser, username, sql_text from v$session a, v$sqltext b where a.sql_address =b.address order by address, piece; 157. 如何监控字典缓冲区? SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE; SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE; SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE; 后者除以前者,此比率小于1%,接近0%为好。 SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES" FROM V$ROWCACHE 158. 监控 MTS select busy/(busy+idle) "shared servers busy" from v$dispatcher; 此值大于0.5时,参数需加大 select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher'; select count(*) from v$dispatcher; select servers_highwater from v$mts; servers_highwater接近mts_max_servers时,参数需加大 159. 如何知道当前用户的ID号? SQL>SHOW USER; OR SQL>select user from dual; 160. 如何查看碎片程度高的表? SELECT segment_name table_name , COUNT(*) extents FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name); 162. 如何知道表在表空间中的存储情况? select segment_name,sum(bytes),count(*) ext_quan from dba_extents where tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name; 163. 如何知道索引在表空间中的存储情况? select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner' group by segment_name; 164、如何知道使用CPU多的用户session? 11是cpu used by this session select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value from v$session a,v$process b,v$sesstat c where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr order by value desc; 165. 如何知道监听器日志文件? 以8I为例 $ORACLE_HOME/NETWORK/LOG/LISTENER.LOG 166. 如何知道监听器参数文件? 以8I为例 $ORACLE_HOME/NETWORK/ADMIN/LISTENER.ORA 167. 如何知道TNS 连接文件? 以8I为例 $ORACLE_HOME/NETWORK/ADMIN/TNSNAMES.ORA 168. 如何知道Sql*Net 环境文件? 以8I为例 $ORACLE_HOME/NETWORK/ADMIN/SQLNET.ORA 169. 如何知道警告日志文件? 以8I为例 $ORACLE_HOME/ADMIN/SID/BDUMP/SIDALRT.LOG 170. 如何知道基本结构? 以8I为例 $ORACLE_HOME/RDBMS/ADMIN/STANDARD.SQL 171. 如何知道建立数据字典视图? 以8I为例 $ORACLE_HOME/RDBMS/ADMIN/CATALOG.SQL 172. 如何知道建立审计用数据字典视图? 以8I为例 $ORACLE_HOME/RDBMS/ADMIN/CATAUDIT.SQL 173. 如何知道建立快照用数据字典视图? 以8I为例 $ORACLE_HOME/RDBMS/ADMIN/CATSNAP.SQL 本讲主要讲的是SQL语句的优化方法! 主要基于ORACLE9I的. 174. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 175. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化. 例如: SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 176. /*+CHOOSE*/ 表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量; 表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法; 例如: SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 177. /*+RULE*/ 表明对语句块选择基于规则的优化方法. 例如: SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP'; 178. /*+FULL(TABLE)*/ 表明对表选择全局扫描的方法. 例如: SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='CCBZZP'; 179. /*+ROWID(TABLE)*/ 提示明确表明对指定表根据ROWID进行访问. 例如: SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA' AND EMP_NO='CCBZZP'; 180. /*+CLUSTER(TABLE)*/ 提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效. 例如: SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO; 181. /*+INDEX(TABLE INDEX_NAME)*/ 表明对表选择索引的扫描方法. 例如: SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M'; 182. /*+INDEX_ASC(TABLE INDEX_NAME)*/ 表明对表选择索引升序的扫描方法.
ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键. 1--设置每行显示多少字符 set linesize 300; 2 设置每页显示多少条记录 set pagesize 30; 3 用户名的切换: 如 conn system/tiger Conn sys/change_on_install as sysdba(注意超级用户 在后面加as sysdba) 4 在超级用户下查找普通用户的表是查不到的 必须这样查找 如 select * from scott.emp(普通用户下的emp表) 5 查看当前是那个用户身份登录: show user; 6 查看有多少张表: select * from tab;(注意不同用户下的表是不同的) 7查看表的结构: desc emp(emp为表名) 8 取出重复的列(DISTINCT): 如 SELECT DISTINCT JOB EMP(去掉job的重复的值) 9字符串的链接操作用: || 10 查询有奖金的员工: select* from emp where comm is not null; 11 查询没有奖金的员工信息: select * from emp where comm is null; 12 两个条件以上就得用and 如查询工资大雨1500和有奖金的员工 select * from emp where sal>1500 and comm is not null; 13 表示两个条件有一个满足就可就用:or 如查询工资大于1500或者没有奖金的员工信息 Select * from emp where sal>1500 or comm is not null; 14取反可以用not 如 查询员工工资不大于1500和有奖金的员工信息 如: Select * from emp where not (sal>1500 or comm is not null); 15 在什么什么之间用between----and----如查询工资在1500和3000之间的员工信息: Select * from emp where sal between 1500 and 3000; 16 查询员工编号是2323, 4555, 2222的员工具体信息: 如 Select * from emp where empno in(2323,4555,2222); 17.l模糊查询 like 一般结合"%"和"_"使用其中%:表示可以匹配任意长度的内容,"_"表示匹配一个长度放入内容 如: 查询员工姓名中第二哥字母是M的员工信息: Select * from emp where ename LIKE '_M%'; 又如姓名中包含M的员工 Select * from emp where ename LIKE '%M%'; 18oracle中不等于有两种表示方式"<>"和"!=" 19 排序用order by {asc desc}其中asc 是升序排列 如果不写就默认按升序排列desc是按降序排列 排序语句放在sal语句的最后如: 按员工工资进行排序 Select * from emp order by sal asc(升序) Selecct * from emp order by sal desc(降序) Select * from emp where deptno='10' order by sal desc,hiredate asc;(查询部门10的员工工资的升序排列如果工资相等就按员工的入职时间排序) 20.group by 用于对查询的结果进行分组统计: 显示每个部门的平均工资和最高工资 如: Select avg(sal),max(sal) from emp group by deptno; Having 子句用于限制分组显示结果: 显示平均工资大于2000的的部门号和他的平均工资? 如:select avg(sal), deptno from emp group by deptno having avg(sal)>2000; 2. 单行函数: 1 小写变大写: upper 如 select * from emp where ename=upper('smith'); 讲一个字符串变为小写字母表示 如: select lower('HELLO WORLD') FROM DUAL; 将单词的首字母变大写 用 INITCAP 如: SELECT INITCAP('HELLO WORLD') FROM DUAL; 2.字符串的操作 Substr()截取字符串 length()字符串的长度 replace()替换字符串 3数值函数 四舍五入: round(); 截断小数位:trunc(); 一.入门部分 1. 创建表空间 create tablespace schooltbs datafile ‘D:\oracle\datasource\schooltbs.dbf’ size 10M autoextend on; 2. 删除表空间 drop tablespace schooltbs[including contents and datafiles]; 3. 查询表空间基本信息 select *||tablespace_name from DBA_TABLESPACES; 4. 创建用户 create user lihua identified by lihua default tablespace schooltbs temporary tablespace temp; 5. 更改用户 alter user lihua identified by 123 default tablespace users; 6. 锁定用户 alter user lihua account lock|unlock; 7. 删除用户 drop user lihua cascade;--删除用户模式 8. oracle数据库中的角色 connect,dba,select_catalog_role,delete_catalog_role,execute_catalog_role,exp_full_database,imp_full_database,resource 9. 授予连接服务器的角色 grant connect to lihua; 10.授予使用表空间的角色 grant resource to lihua with grant option;--该用户也有授权的权限 11.授予操作表的权限 grant select,insert on user_tbl to scott;--当前用户 grant delete,update on lihua.user_tbl to scott;--系统管理员 12.修改表的结构(alter) Alter table 表名 add(列的名称,列的类型); 二.SQL查询和SQL函数 1.SQl支持的命令: 数据定义语言(DDL):create,alter,drop 数据操纵语言(DML):insert,delete,update,select 数据控制语言(DCL):grant,revoke 事务控制语言(TCL):commit,savepoint,rollback 2.Oracle数据类型 字符,数值,日期,RAW,LOB 字符型 char:1-2000字节的定长字符 varchar2:1-4000字节的变长字符 long:2GB的变长字符 注意:一个表中最多可有一列为long型 Long列不能定义唯一约束或主键约束 long列上不能创建索引 过程或存储过程不能接受long类型的参数。 数值型 number:最高精度38位 日期时间型 date:精确到ss timestamp:秒值精确到小数点后6位 函数 sysdate,systimestamp返回系统当前日期,时间和时区。 更改时间的显示 alter session set nls_date_language=’american’; alter session set nls_date_format=’yyyy-mm-dd’; Oracle中的伪列 像一个表列,但没有存储在表中 伪列可以查询,但不能插入、更新和修改它们的值 常用的伪列:rowid和rownum rowid:表中行的存储地址,可唯一标示数据库中的某一行,可以使用该列快速定位表中的行。 rownum:查询返回结果集中的行的序号,可以使用它来限制查询返回的行数。 3.数据定义语言 用于操作表的命令 create table alter table truncate table drop table 修改表的命令 alter table stu_table rename to stu_tbl;--修改表名 alter table stu_tbl rename column stu_sex to sex;--修改列名 alter table stu_tbl add (stu_age number);--添加新列 alter table stu_tbl drop(sex);--删除列 alter table stu_tbl modify(stu_sex varchar2(2));--更改列的数据类型 alter table stu_tbl add constraint pk_stu_tbl primary key(id);--添加约束 4.数据操纵语言 select,update,delete,insert 利用现有的表创建表 create table stu_tbl_log as select id,stu_name,stu_age from stu_tbl;-- 选择无重复的行 select distinct stu_name from stu_tbl;-- 插入来自其他表中的记录 insert into stu_tbl_log select id,stu_name,stu_age from stu_tbl; 5.数据控制语言 grant,revoke 6.事务控制语言 commit,savepoint,rollback 7.SQL操作符 算术操作符:L+-*/ 比较操作符:L=,!=,<>,>,<,>=,<=,between-and,in,like,is null等 逻辑操作符:Land,or,not 集合操作符:Lunion,union all,intersect,minus 连接操作符:L|| 示例中stu_tbl_log中的数据如下: ID STU_NAME STU_AGE ---------- -------------------- ---------- 1000 李华 20 1001 accp 20 1003 nimda 3 stu_tbl中的数据如下: ID STU_NAME ST STU_AGE ---------- -------------------- -- ---------- 1000 李华 男 20 1001 accp 男 20 1002 admin 男 30 示例: select (3+2)/2 from dual;--算术操作符,结果:2.5 select * from stu_tbl where stu_age>=20;--比较操作符 select * from stu_tbl where stu_name like '%a%';--比较操作符:like select * from stu_tbl where stu_name like 'a___';--比较操作符:like select * from stu_tbl where stu_age in(20,30);--比较操作符:in select * from stu_tbl where stu_age between 20 and 30;--比较操作符:between select stu_name from stu_tbl union all select stu_name from stu_tbl_log;--集合操作符:union all,测试结果具体如下: STU_NAME ----------- 李华 accp admin 李华 accp nimda 已选择6行。 select stu_name from stu_tbl union select stu_name from stu_tbl_log;--集合操作符:union,测试结果具体如下: STU_NAME --------- accp admin nimda 李华 select stu_name from stu_tbl intersect select stu_name from stu_tbl_log;--集合操作符:intersect,测试结具体如下: STU_NAME ---------- accp 李华 select stu_name from stu_tbl minus select stu_name from stu_tbl_log;--集合操作符:minus,测试结果如下: STU_NAME ---------- Admin 从中可以看出: minus是获取第一张表独有的数据 intersect是获取两张表中都有的数据 union是整合两张表的数据,都有的只显示一次 union all是纯粹的两张表数据整合 select id,stu_name||' '||stu_sex as name_sex,stu_age from stu_tbl;--连接操作符||,测试结果具体如下: ID NAME_SEX STU_AGE ---------- ----------------------- ---------- 1000 李华 男 20 1001 accp 男 20 1002 admin 男 30 8.SQL函数 单行函数:从表中查询的每一行只返回一个值,可出现在select子句,where子句中 日期函数 数字函数 字符函数 转换函数:ToChar(),ToDate(),ToNumber() 其他函数: Nvl(exp1,exp2):表达式一为null时,返回表达式二 Nvl2(exp1,exp2,exp3):表达式一为null时返回表达式三,否则返回表达式二 Nullif(exp1,exp2):两表达式相等时,返回null,否则返回表达式一 分组函数:基于一组行来返回 Avg,Min,Max,Sum,Count Group by,having 分析函数 Row_number,rank,dense_rank 示例: select u.user_name,sum(oi.order_num*oi.order_price) as total,row_number() over (order by sum(oi.order_num*oi.order_price) desc) as sort from order_item_tbl oi,user_tbl u,order_tbl o where oi.order_id = o.id and o.user_id = u.id group by u.user_name; 三.锁和数据库对象 1.锁:数据库用来控制共享资源并发访问的机制。 锁的类型:行级锁,表级锁 行级锁:对正在被修改的行进行锁定。行级锁也被称之为排他锁。 在使用下列语句时,Oracle会自动应用行级锁: insert,update,delete,select…… for update select……for update允许用户一次锁定多条记录进行更新。 使用commit or rollback释放锁。 表级锁: lock table user_tbl in mode mode; 表级锁类型: 行共享 row share 行排他 row exclusive 共享 share 共享行排他 share row exclusive 排他 exclusive 死锁:两个或两个以上的事务相互等待对方释放资源,从而形成死锁 2.数据库对象 oracle数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 数据库对象: 表,序列,视图,索引 序列 用于生成唯一,连续序号的对象。 创建语法: create sequence user_id_seq start with 1000 increment by 1 maxvalue 2000 minvalue 1000 nocycle cache 1000;--指定内存中预先分配的序号 访问序列: select user_id_seq.currval from dual; select user_id-seq.nextval from dual; 更改删除序列: alter sequence user_id_seq maxvalue 10000;--不能修改其start with 值 drop sequence user_id_seq; 在Hibernate中访问序列: user_id_seq 视图 以经过定制的方式显示来自一个或多个表的数据 创建视图: create or replace view user_tbl_view (vid,vname,vage) as select id,user_name,age from user_tbl [with check option]|[with read only]; 创建带有错误的视图: create force view user_tbl_force_view as select * from user_table;--此时user_table可以不存在 创建外联接视图: create view user_stu_view as select u.id,u.user_name,u.password,s.ddress from user_tbl u,stu_tbl s where u.s_id(+)=s.id;--哪一方带有(+),哪一方就是次要的 删除视图: drop user_stu_view; 索引 用于提高SQL语句执行的性能 索引类型: 唯一索引,位图索引,组合索引,基于函数的索引,反向键索引 创建标准索引: create index user_id_index on user_tbl(id) tablespace schooltbs; 重建索引: alter index user_id_index rebuild; 删除索引: drop index user_id_index; 创建唯一索引: create unique index user_id_index on user_tbl(id); 创建组合索引: create index name_pass_index on user_tbl(user_name,password); 创建反向键索引: create index user_id_index on user_tbl(id) reverse; 四.使用PL/SQL 可用于创建存储过程,触发器,程序包,给SQL语句的执行添加程序逻辑。 支持SQL,在PL/SQL中可以使用: 数据操纵命令 事务控制命令 游标控制 SQL函数和SQL运算符 支持面向对象编程(OOP) 可移植性 更佳的性能,PL/SQL经过编译执行 分为三个部分:声明部分,可执行部分和异常处理部分 [declare declarations] begin executable statements [exception handlers] end; 打开输出 set serverout on; --根据输入编号获取某学员的成绩--if declare score user_tbl.score%type; begin select score into score from user_tbl where id='&id'; if score>90 then dbms_output.put_line('优秀'); elsif score>80 then dbms_output.put_line('良好'); elsif score>60 then dbms_output.put_line('及格'); else dbms_output.put_line('差'); end if; end; --根据学员姓名获取某学员的成绩--if declare score user_tbl.score%type; begin select score into score from user_tbl where user_name='&name'; if score>90 then dbms_output.put_line('优秀'); elsif score>80 then dbms_output.put_line('良好'); elsif score>60 then dbms_output.put_line('及格'); else dbms_output.put_line('差'); end if; end; --case的使用 declare grade user_tbl.grade%type; begin select grade into grade from user_tbl where id='&id'; case grade when 'A' then dbms_output.put_line('优异'); when 'B' then dbms_output.put_line('优秀'); when 'C' then dbms_output.put_line('良好'); else dbms_output.put_line('一般'); end case; end; --基本循环 declare i number(4):=1; begin loop dbms_output.put_line('loop size:'||i); i:=i+1; exit when i>10; end loop; end; --while循环 declare i number(4):=1; begin while i<=10 loop dbms_output.put_line('while loop size='||i); i:=i+1; end loop; end; --for循环 declare i number(4):=1; begin for i in 1..10 loop dbms_output.put_line('for loop Size:'||i); end loop; end; declare i number(2):=1; j number(2):=1; begin for i in reverse 1..9 loop for j in 1..i loop dbms_output.put(j||'x'||i||'='||j*i||' '); end loop; dbms_output.put_line(''); end loop; end; --动态SQL declare userId number(2); sql_str varchar2(100); userName user_tbl.user_name%type; begin execute immediate 'create table testExe(id number,test_name varchar2(20))'; userId:='&userId'; sql_str:='select user_name from user_tbl where id=:id'; execute immediate sql_str into userName using userId; dbms_output.put_line(userName); end; (or declare id_param number:='&id_param'; sql_str varchar2(100); name_param stu_tbl.stu_name%type; begin sql_str:='select stu_name from stu_tbl where id=:p'; execute immediate sql_str into name_param using id_param; dbms_output.put_line(name_param); end; / ) --异常处理 declare grade number(4); begin grade:='&grade'; case grade when 1 then dbms_output.put_line('好的'); --else dbms_output.put_line('不好'); end case; exception when case_not_found then dbms_output.put_line('输入类型不匹配!'); end; --系统异常 declare rowD user_tbl%rowtype; begin select * into rowD from user_tbl; dbms_output.put_line(rowD.id||''||rowD.user_name||' '||rowD.password); exception when too_many_rows then dbms_output.put_line('不能将多行赋予一个属性!'); end; or declare rowD user_tbl%rowtype; begin select * into rowD from user_tbl where id=5; dbms_output.put_line(rowD.id||' '||rowD.user_name||' '||rowD.password); exception when too_many_rows then dbms_output.put_line('不能将多行赋予一个属性!'); when no_data_found then dbms_output.put_line('没有您要查找的数据!'); end; --自定义错误 declare invalidError exception; category varchar2(20); begin category:='&category'; if category not in('附件','顶盘','备件') then raise invalidError; else dbms_output.put_line('您输入的类别是:'||category); end if; exception when invalidError then dbms_output.put_line('无法识别的类别!'); end; --引发应用程序异常 declare app_exception exception; grade user_tbl.grade%type; begin select grade into grade from user_tbl where id=&id; if grade='A' then raise app_exception; else dbms_output.put_line('查询的等级为:'||grade); end if; exception when app_exception then raise_application_error(-20001,'未知的等级!'); end; 五、游标管理 游标类型:隐式游标,显式游标,REF游标 REF游标用于处理运行时才能确定的动态SQL查询的结果 ==========隐式游标========== 在PL/SQL中使用DML语句时自动创建隐式游标 隐式游标自动声明、打开和关闭,其名为SQL 隐式游标的属性: %found SQL语句影响实质后返回true %notfound SQL语句没有影响实质后返回true %rowcount SQL语句影响的行数 %isopen 游标是否打开,始终为false 示例: begin update user_tbl set score=score+5; if SQL%found then dbms_output.put_line('数据被更改: '||SQL%rowcount); elsif sql%notfound then dbms_output.put_line('没有找到数据!'); end if; if SQL%isopen then dbms_output.put_line('Open'); else dbms_output.put_line('Close'); end if; end; ==========显式游标========== 在PL/SQL的声明部分定义查询,该查询可以返回多行 J 声明游标 J 打开游标 J 从游标中取回数据 J 关闭游标 声明游标完成两个任务: 给游标命名 将一个查询与游标关联 cursor cursor_name is select statement; 打开游标: open cursor_name; 取数据: fetch cursor_name into record_list; 关闭游标: close cursor_name; 显式游标的属性: %found 执行最后一条fetch语句成功返回行时为true %notfound 执行最后一条fetch语句未能返回行时为true %rowcount 返回到目前为止游标提取的行数 %isopen 游标是否打开 示例: declare users user_tbl%rowtype; cursor boys_cur is select * from user_tbl where sex='h'; begin open boys_cur; loop fetch boys_cur into users; exit when boys_cur%notfound; dbms_output.put_line(users.user_name||' '||users.password); dbms_output.put_line(boys_cur%rowcount); end loop; close boys_cur; end; 带参的显式游标 declare users user_tbl%rowtype; cursor boys_cur(sexParam varchar2) is select * from user_tbl where sex=sexParam; begin open boys_cur('&sex'); loop fetch boys_cur into users; exit when boys_cur%notfound; dbms_output.put_line(users.user_name||' '||users.password); dbms_output.put_line(boys_cur%rowcount); end loop; close boys_cur; end; 使用显式游标更新行 declare cursor user_update_cur is select sex from user_tbl for update; usersex user_tbl.sex%type; begin open user_update_cur; loop fetch user_update_cur into usersex; exit when user_update_cur%notfound; dbms_output.put_line(usersex); if usersex = 'M' then update user_tbl set score=score-5 where current of user_update_cur; else update user_tbl set score=score+5 where current of user_update_cur; end if; end loop; close user_update_cur; commit; end; 循环游标 declare cursor user_cur is select * from user_tbl; begin for username in user_cur loop dbms_output.put_line(username.user_name||' '||username.sex); end loop; end; ==========REF游标========== REF游标和游标变量用于处理运行时动态执行的SQL查询 创建游标变量的步骤: J 声明REF游标类型 J 声明REF游标类型的变量 声明类型的语法 Type ref_cursor_name is ref cursor [return return_type]; 打开游标变量的语法 Open cursor_name for select_statement; ----声明强类型的游标 declare type ref_cur is ref cursor return user_tbl%rowtype; users_cur ref_cur; ----声明弱类型的游标 declare type ref_cur is ref cursor; users_cur ref_cur; 示例 ----强类型 declare type ref_cur is ref cursor return user_tbl%rowtype; users_cur ref_cur; users user_tbl%rowtype; begin open users_cur for select * from user_tbl where user_name='ny2t92'; loop fetch users_cur into users; exit when users_cur%notfound; dbms_output.put_line(users.user_Name); end loop; close users_cur; end; ----弱类型 declare type ref_cur is ref cursor; my_cur ref_cur; users user_tbl%rowtype; stus stu_tbl%rowtype; begin open my_cur for select * from user_tbl; loop fetch my_cur into users; exit when my_cur%notfound; dbms_output.put_line(users.user_Name); end loop; close my_cur; open my_cur for select * from user_tbl where user_name='ny2t92'; loop fetch my_cur into users; exit when my_cur%notfound; dbms_output.put_line(users.user_Name); end loop; close my_cur; open my_cur for select * from stu_tbl; loop fetch my_cur into stus; exit when my_cur%notfound; dbms_output.put_line(stus.stu_Name); end loop; close my_cur; end; ----动态SQL游标 declare type ref_cur is ref cursor; my_cur ref_cur; users user_tbl%rowtype; username varchar2(20); sqlstmt varchar2(200); begin username:='&username'; sqlstmt := 'select * from user_tbl where user_name= :name'; open my_cur for sqlstmt using username; loop fetch my_cur into users; exit when my_cur%notfound; dbms_output.put_line(users.user_Name); end loop; close my_cur; end; 六.子程序 子程序分为:存储过程和函数,它是命名的PL/SQL块,编译并存储在数据库中。 子程序的各个部分:声明部分,可执行部分,异常处理部分。 过程----执行某些操作 函数----执行操作并返回值 ==========存储过程========== 创建过程的语法: create or replace procedure proce_name (parameter_list) is|as local variable declaration begin executable statements exception exception_handlers end proce_name; 过程参数的三种模式: In----用于接收调用的值,默认的参数模式 Out----用于向调用程序返回值 In out----用于接收调用程序的值,并向调用程序返回更新的值 执行过程的语法: Execute proce_name(parameter_list); 或 Declare Variable var_list; Begin Proce_name(var_list); End; 将过程执行的权限授予其他用户: Grant execute on proce_name to scott; Grant execute on proce_name to public; 删除存储过程: Drop procedure proce_name; ==========函数========== 创建函数的语法: Create or replace function Fun_name (parameter_list) Return datatype is|as Local declarations Begin Executable statements; Return result; Exception Exce_handlers; End; 函数只能接收in参数,不能接受out或in out参数,形参不能是PL/SQL类型 函数的返回类型也必须是数据库类型 访问函数的方式: J 使用PL/SQL块 J 使用SQL语句 Select fun_name(parameter_list) from dual;
ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键.ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHECK (检查)--检查在约束中指定的条件是否得到了满足. UNIQUE (唯一)--保证在指定的列中没有重复值.在该表中每一个值或者每一组值都将是唯一的. PRIMARY KEY (主键)--用来唯一的标识出表的每一行,并且防止出现NULL值,一个表只能有一个主键约束. POREIGN KEY (外部键)--通过使用公共列在表之间建立一种父子(parent-child)关系,在表上定义的外部键可以指向主键或者其他表的唯一键. 1--设置每行显示多少字符 set linesize 300; 2 设置每页显示多少条记录 set pagesize 30; 3 用户名的切换: 如 conn system/tiger Conn sys/change_on_install as sysdba(注意超级用户 在后面加as sysdba) 4 在超级用户下查找普通用户的表是查不到的 必须这样查找 如 select * from scott.emp(普通用户下的emp表) 5 查看当前是那个用户身份登录: show user; 6 查看有多少张表: select * from tab;(注意不同用户下的表是不同的) 7查看表的结构: desc emp(emp为表名) 8 取出重复的列(DISTINCT): 如 SELECT DISTINCT JOB EMP(去掉job的重复的值) 9字符串的链接操作用: || 10 查询有奖金的员工: select* from emp where comm is not null; 11 查询没有奖金的员工信息: select * from emp where comm is null; 12 两个条件以上就得用and 如查询工资大雨1500和有奖金的员工 select * from emp where sal>1500 and comm is not null; 13 表示两个条件有一个满足就可就用:or 如查询工资大于1500或者没有奖金的员工信息 Select * from emp where sal>1500 or comm is not null; 14取反可以用not 如 查询员工工资不大于1500和有奖金的员工信息 如: Select * from emp where not (sal>1500 or comm is not null); 15 在什么什么之间用between----and----如查询工资在1500和3000之间的员工信息: Select * from emp where sal between 1500 and 3000; 16 查询员工编号是2323, 4555, 2222的员工具体信息: 如 Select * from emp where empno in(2323,4555,2222); 17.l模糊查询 like 一般结合"%"和"_"使用其中%:表示可以匹配任意长度的内容,"_"表示匹配一个长度放入内容 如: 查询员工姓名中第二哥字母是M的员工信息: Select * from emp where ename LIKE '_M%'; 又如姓名中包含M的员工 Select * from emp where ename LIKE '%M%'; 18oracle中不等于有两种表示方式"<>"和"!=" 19 排序用order by {asc desc}其中asc 是升序排列 如果不写就默认按升序排列desc是按降序排列 排序语句放在sal语句的最后如: 按员工工资进行排序 Select * from emp order by sal asc(升序) Selecct * from emp order by sal desc(降序) Select * from emp where deptno='10' order by sal desc,hiredate asc;(查询部门10的员工工资的升序排列如果工资相等就按员工的入职时间排序) 20.group by 用于对查询的结果进行分组统计: 显示每个部门的平均工资和最高工资 如: Select avg(sal),max(sal) from emp group by deptno; Having 子句用于限制分组显示结果: 显示平均工资大于2000的的部门号和他的平均工资? 如:select avg(sal), deptno from emp group by deptno having avg(sal)>2000; 2. 单行函数: 1 小写变大写: upper 如 select * from emp where ename=upper('smith'); 讲一个字符串变为小写字母表示 如: select lower('HELLO WORLD') FROM DUAL; 将单词的首字母变大写 用 INITCAP 如: SELECT INITCAP('HELLO WORLD') FROM DUAL; 2.字符串的操作 Substr()截取字符串 length()字符串的长度 replace()替换字符串 3数值函数 四舍五入: round(); 截断小数位:trunc(); 一.入门部分 1. 创建表空间 create tablespace schooltbs datafile ‘D:\oracle\datasource\schooltbs.dbf’ size 10M autoextend on; 2. 删除表空间 drop tablespace schooltbs[including contents and datafiles]; 3. 查询表空间基本信息 select *||tablespace_name from DBA_TABLESPACES; 4. 创建用户 create user lihua identified by lihua default tablespace schooltbs temporary tablespace temp; 5. 更改用户 alter user lihua identified by 123 default tablespace users; 6. 锁定用户 alter user lihua account lock|unlock; 7. 删除用户 drop user lihua cascade;--删除用户模式 8. oracle数据库中的角色 connect,dba,select_catalog_role,delete_catalog_role,execute_catalog_role,exp_full_database,imp_full_database,resource 9. 授予连接服务器的角色 grant connect to lihua; 10.授予使用表空间的角色 grant resource to lihua with grant option;--该用户也有授权的权限 11.授予操作表的权限 grant select,insert on user_tbl to scott;--当前用户 grant delete,update on lihua.user_tbl to scott;--系统管理员 12.修改表的结构(alter) Alter table 表名 add(列的名称,列的类型); 二.SQL查询和SQL函数 1.SQl支持的命令: 数据定义语言(DDL):create,alter,drop 数据操纵语言(DML):insert,delete,update,select 数据控制语言(DCL):grant,revoke 事务控制语言(TCL):commit,savepoint,rollback 2.Oracle数据类型 字符,数值,日期,RAW,LOB 字符型 char:1-2000字节的定长字符 varchar2:1-4000字节的变长字符 long:2GB的变长字符 注意:一个表中最多可有一列为long型 Long列不能定义唯一约束或主键约束 long列上不能创建索引 过程或存储过程不能接受long类型的参数。 数值型 number:最高精度38位 日期时间型 date:精确到ss timestamp:秒值精确到小数点后6位 函数 sysdate,systimestamp返回系统当前日期,时间和时区。 更改时间的显示 alter session set nls_date_language=’american’; alter session set nls_date_format=’yyyy-mm-dd’; Oracle中的伪列 像一个表列,但没有存储在表中 伪列可以查询,但不能插入、更新和修改它们的值 常用的伪列:rowid和rownum rowid:表中行的存储地址,可唯一标示数据库中的某一行,可以使用该列快速定位表中的行。 rownum:查询返回结果集中的行的序号,可以使用它来限制查询返回的行数。 3.数据定义语言 用于操作表的命令 create table alter table truncate table drop table 修改表的命令 alter table stu_table rename to stu_tbl;--修改表名 alter table stu_tbl rename column stu_sex to sex;--修改列名 alter table stu_tbl add (stu_age number);--添加新列 alter table stu_tbl drop(sex);--删除列 alter table stu_tbl modify(stu_sex varchar2(2));--更改列的数据类型 alter table stu_tbl add constraint pk_stu_tbl primary key(id);--添加约束 4.数据操纵语言 select,update,delete,insert 利用现有的表创建表 create table stu_tbl_log as select id,stu_name,stu_age from stu_tbl;-- 选择无重复的行 select distinct stu_name from stu_tbl;-- 插入来自其他表中的记录 insert into stu_tbl_log select id,stu_name,stu_age from stu_tbl; 5.数据控制语言 grant,revoke 6.事务控制语言 commit,savepoint,rollback 7.SQL操作符 算术操作符:L+-*/ 比较操作符:L=,!=,<>,>,<,>=,<=,between-and,in,like,is null等 逻辑操作符:Land,or,not 集合操作符:Lunion,union all,intersect,minus 连接操作符:L|| 示例中stu_tbl_log中的数据如下: ID STU_NAME STU_AGE ---------- -------------------- ---------- 1000 李华 20 1001 accp 20 1003 nimda 3 stu_tbl中的数据如下: ID STU_NAME ST STU_AGE ---------- -------------------- -- ---------- 1000 李华 男 20 1001 accp 男 20 1002 admin 男 30 示例: select (3+2)/2 from dual;--算术操作符,结果:2.5 select * from stu_tbl where stu_age>=20;--比较操作符 select * from stu_tbl where stu_name like '%a%';--比较操作符:like select * from stu_tbl where stu_name like 'a___';--比较操作符:like select * from stu_tbl where stu_age in(20,30);--比较操作符:in select * from stu_tbl where stu_age between 20 and 30;--比较操作符:between select stu_name from stu_tbl union all select stu_name from stu_tbl_log;--集合操作符:union all,测试结果具体如下: STU_NAME ----------- 李华 accp admin 李华 accp nimda 已选择6行。 select stu_name from stu_tbl union select stu_name from stu_tbl_log;--集合操作符:union,测试结果具体如下: STU_NAME --------- accp admin nimda 李华 select stu_name from stu_tbl intersect select stu_name from stu_tbl_log;--集合操作符:intersect,测试结具体如下: STU_NAME ---------- accp 李华 select stu_name from stu_tbl minus select stu_name from stu_tbl_log;--集合操作符:minus,测试结果如下: STU_NAME ---------- Admin 从中可以看出: minus是获取第一张表独有的数据 intersect是获取两张表中都有的数据 union是整合两张表的数据,都有的只显示一次 union all是纯粹的两张表数据整合 select id,stu_name||' '||stu_sex as name_sex,stu_age from stu_tbl;--连接操作符||,测试结果具体如下: ID NAME_SEX STU_AGE ---------- ----------------------- ---------- 1000 李华 男 20 1001 accp 男 20 1002 admin 男 30 8.SQL函数 单行函数:从表中查询的每一行只返回一个值,可出现在select子句,where子句中 日期函数 数字函数 字符函数 转换函数:ToChar(),ToDate(),ToNumber() 其他函数: Nvl(exp1,exp2):表达式一为null时,返回表达式二 Nvl2(exp1,exp2,exp3):表达式一为null时返回表达式三,否则返回表达式二 Nullif(exp1,exp2):两表达式相等时,返回null,否则返回表达式一 分组函数:基于一组行来返回 Avg,Min,Max,Sum,Count Group by,having 分析函数 Row_number,rank,dense_rank 示例: select u.user_name,sum(oi.order_num*oi.order_price) as total,row_number() over (order by sum(oi.order_num*oi.order_price) desc) as sort from order_item_tbl oi,user_tbl u,order_tbl o where oi.order_id = o.id and o.user_id = u.id group by u.user_name; 三.锁和数据库对象 1.锁:数据库用来控制共享资源并发访问的机制。 锁的类型:行级锁,表级锁 行级锁:对正在被修改的行进行锁定。行级锁也被称之为排他锁。 在使用下列语句时,Oracle会自动应用行级锁: insert,update,delete,select…… for update select……for update允许用户一次锁定多条记录进行更新。 使用commit or rollback释放锁。 表级锁: lock table user_tbl in mode mode; 表级锁类型: 行共享 row share 行排他 row exclusive 共享 share 共享行排他 share row exclusive 排他 exclusive 死锁:两个或两个以上的事务相互等待对方释放资源,从而形成死锁 2.数据库对象 oracle数据库对象又称模式对象 数据库对象是逻辑结构的集合,最基本的数据库对象是表 数据库对象: 表,序列,视图,索引 序列 用于生成唯一,连续序号的对象。 创建语法: create sequence user_id_seq start with 1000 increment by 1 maxvalue 2000 minvalue 1000 nocycle cache 1000;--指定内存中预先分配的序号 访问序列: select user_id_seq.currval from dual; select user_id-seq.nextval from dual; 更改删除序列: alter sequence user_id_seq maxvalue 10000;--不能修改其start with 值 drop sequence user_id_seq; 在Hibernate中访问序列: user_id_seq 视图 以经过定制的方式显示来自一个或多个表的数据 创建视图: create or replace view user_tbl_view (vid,vname,vage) as select id,user_name,age from user_tbl [with check option]|[with read only]; 创建带有错误的视图: create force view user_tbl_force_view as select * from user_table;--此时user_table可以不存在 创建外联接视图: create view user_stu_view as select u.id,u.user_name,u.password,s.ddress from user_tbl u,stu_tbl s where u.s_id(+)=s.id;--哪一方带有(+),哪一方就是次要的 删除视图: drop user_stu_view; 索引 用于提高SQL语句执行的性能 索引类型: 唯一索引,位图索引,组合索引,基于函数的索引,反向键索引 创建标准索引: create index user_id_index on user_tbl(id) tablespace schooltbs; 重建索引: alter index user_id_index rebuild; 删除索引: drop index user_id_index; 创建唯一索引: create unique index user_id_index on user_tbl(id); 创建组合索引: create index name_pass_index on user_tbl(user_name,password); 创建反向键索引: create index user_id_index on user_tbl(id) reverse; 四.使用PL/SQL 可用于创建存储过程,触发器,程序包,给SQL语句的执行添加程序逻辑。 支持SQL,在PL/SQL中可以使用: 数据操纵命令 事务控制命令 游标控制 SQL函数和SQL运算符 支持面向对象编程(OOP) 可移植性 更佳的性能,PL/SQL经过编译执行 分为三个部分:声明部分,可执行部分和异常处理部分 [declare declarations] begin executable statements [exception handlers] end; 打开输出 set serverout on; --根据输入编号获取某学员的成绩--if declare score user_tbl.score%type; begin select score into score from user_tbl where id='&id'; if score>90 then dbms_output.put_line('优秀'); elsif score>80 then dbms_output.put_line('良好'); elsif score>60 then dbms_output.put_line('及格'); else dbms_output.put_line('差'); end if; end; --根据学员姓名获取某学员的成绩--if declare score user_tbl.score%type; begin select score into score from user_tbl where user_name='&name'; if score>90 then dbms_output.put_line('优秀'); elsif score>80 then dbms_output.put_line('良好'); elsif score>60 then dbms_output.put_line('及格'); else dbms_output.put_line('差'); end if; end; --case的使用 declare grade user_tbl.grade%type; begin select grade into grade from user_tbl where id='&id'; case grade when 'A' then dbms_output.put_line('优异'); when 'B' then dbms_output.put_line('优秀'); when 'C' then dbms_output.put_line('良好'); else dbms_output.put_line('一般'); end case; end; --基本循环 declare i number(4):=1; begin loop dbms_output.put_line('loop size:'||i); i:=i+1; exit when i>10; end loop; end; --while循环 declare i number(4):=1; begin while i<=10 loop dbms_output.put_line('while loop size='||i); i:=i+1; end loop; end; --for循环 declare i number(4):=1; begin for i in 1..10 loop dbms_output.put_line('for loop Size:'||i); end loop; end; declare i number(2):=1; j number(2):=1; begin for i in reverse 1..9 loop for j in 1..i loop dbms_output.put(j||'x'||i||'='||j*i||' '); end loop; dbms_output.put_line(''); end loop; end; --动态SQL declare userId number(2); sql_str varchar2(100); userName user_tbl.user_name%type; begin execute immediate 'create table testExe(id number,test_name varchar2(20))'; userId:='&userId'; sql_str:='select user_name from user_tbl where id=:id'; execute immediate sql_str into userName using userId; dbms_output.put_line(userName); end; (or declare id_param number:='&id_param'; sql_str varchar2(100); name_param stu_tbl.stu_name%type; begin sql_str:='select stu_name from stu_tbl where id=:p'; execute immediate sql_str into name_param using id_param; dbms_output.put_line(name_param); end; / ) --异常处理 declare grade number(4); begin grade:='&grade'; case grade when 1 then dbms_output.put_line('好的'); --else dbms_output.put_line('不好'); end case; exception when case_not_found then dbms_output.put_line('输入类型不匹配!'); end; --系统异常 declare rowD user_tbl%rowtype; begin select * into rowD from user_tbl; dbms_output.put_line(rowD.id||''||rowD.user_name||' '||rowD.password); exception when too_many_rows then dbms_output.put_line('不能将多行赋予一个属性!'); end; or declare rowD user_tbl%rowtype; begin select * into rowD from user_tbl where id=5; dbms_output.put_line(rowD.id||' '||rowD.user_name||' '||rowD.password); exception when too_many_rows then dbms_output.put_line('不能将多行赋予一个属性!'); when no_data_found then dbms_output.put_line('没有您要查找的数据!'); end; --自定义错误 declare invalidError exception; category varchar2(20); begin category:='&category'; if category not in('附件','顶盘','备件') then raise invalidError; else dbms_output.put_line('您输入的类别是:'||category); end if; exception when invalidError then dbms_output.put_line('无法识别的类别!'); end; --引发应用程序异常 declare app_exception exception; grade user_tbl.grade%type; begin select grade into grade from user_tbl where id=&id; if grade='A' then raise app_exception; else dbms_output.put_line('查询的等级为:'||grade); end if; exception when app_exception then raise_application_error(-20001,'未知的等级!'); end; 五、游标管理 游标类型:隐式游标,显式游标,REF游标 REF游标用于处理运行时才能确定的动态SQL查询的结果 ==========隐式游标========== 在PL/SQL中使用DML语句时自动创建隐式游标 隐式游标自动声明、打开和关闭,其名为SQL 隐式游标的属性: %found SQL语句影响实质后返回true %notfound SQL语句没有影响实质后返回true %rowcount SQL语句影响的行数 %isopen 游标是否打开,始终为false 示例: begin update user_tbl set score=score+5; if SQL%found then dbms_output.put_line('数据被更改: '||SQL%rowcount); elsif sql%notfound then dbms_output.put_line('没有找到数据!'); end if; if SQL%isopen then dbms_output.put_line('Open'); else dbms_output.put_line('Close'); end if; end; ==========显式游标========== 在PL/SQL的声明部分定义查询,该查询可以返回多行 J 声明游标 J 打开游标 J 从游标中取回数据 J 关闭游标 声明游标完成两个任务: 给游标命名 将一个查询与游标关联 cursor cursor_name is select statement; 打开游标: open cursor_name; 取数据: fetch cursor_name into record_list; 关闭游标: close cursor_name; 显式游标的属性: %found 执行最后一条fetch语句成功返回行时为true %notfound 执行最后一条fetch语句未能返回行时为true %rowcount 返回到目前为止游标提取的行数 %isopen 游标是否打开 示例: declare users user_tbl%rowtype; cursor boys_cur is select * from user_tbl where sex='h'; begin open boys_cur; loop fetch boys_cur into users; exit when boys_cur%notfound; dbms_output.put_line(users.user_name||' '||users.password); dbms_output.put_line(boys_cur%rowcount); end loop; close boys_cur; end; 带参的显式游标 declare users user_tbl%rowtype; cursor boys_cur(sexParam varchar2) is select * from user_tbl where sex=sexParam; begin open boys_cur('&sex'); loop fetch boys_cur into users; exit when boys_cur%notfound; dbms_output.put_line(users.user_name||' '||users.password); dbms_output.put_line(boys_cur%rowcount); end loop; close boys_cur; end; 使用显式游标更新行 declare cursor user_update_cur is select sex from user_tbl for update; usersex user_tbl.sex%type; begin open user_update_cur; loop fetch user_update_cur into usersex; exit when user_update_cur%notfound; dbms_output.put_line(usersex); if usersex = 'M' then update user_tbl set score=score-5 where current of user_update_cur; else update user_tbl set score=score+5 where current of user_update_cur; end if; end loop; close user_update_cur; commit; end; 循环游标 declare cursor user_cur is select * from user_tbl; begin for username in user_cur loop dbms_output.put_line(username.user_name||' '||username.sex); end loop; end; ==========REF游标========== REF游标和游标变量用于处理运行时动态执行的SQL查询 创建游标变量的步骤: J 声明REF游标类型 J 声明REF游标类型的变量 声明类型的语法 Type ref_cursor_name is ref cursor [return return_type]; 打开游标变量的语法 Open cursor_name for select_statement; ----声明强类型的游标 declare type ref_cur is ref cursor return user_tbl%rowtype; users_cur ref_cur; ----声明弱类型的游标 declare type ref_cur is ref cursor; users_cur ref_cur; 示例 ----强类型 declare type ref_cur is ref cursor return user_tbl%rowtype; users_cur ref_cur; users user_tbl%rowtype; begin open users_cur for select * from user_tbl where user_name='ny2t92'; loop fetch users_cur into users; exit when users_cur%notfound; dbms_output.put_line(users.user_Name); end loop; close users_cur; end; ----弱类型 declare type ref_cur is ref cursor; my_cur ref_cur; users user_tbl%rowtype; stus stu_tbl%rowtype; begin open my_cur for select * from user_tbl; loop fetch my_cur into users; exit when my_cur%notfound; dbms_output.put_line(users.user_Name); end loop; close my_cur; open my_cur for select * from user_tbl where user_name='ny2t92'; loop fetch my_cur into users; exit when my_cur%notfound; dbms_output.put_line(users.user_Name); end loop; close my_cur; open my_cur for select * from stu_tbl; loop fetch my_cur into stus; exit when my_cur%notfound; dbms_output.put_line(stus.stu_Name); end loop; close my_cur; end; ----动态SQL游标 declare type ref_cur is ref cursor; my_cur ref_cur; users user_tbl%rowtype; username varchar2(20); sqlstmt varchar2(200); begin username:='&username'; sqlstmt := 'select * from user_tbl where user_name= :name'; open my_cur for sqlstmt using username; loop fetch my_cur into users; exit when my_cur%notfound; dbms_output.put_line(users.user_Name); end loop; close my_cur; end; 六.子程序 子程序分为:存储过程和函数,它是命名的PL/SQL块,编译并存储在数据库中。 子程序的各个部分:声明部分,可执行部分,异常处理部分。 过程----执行某些操作 函数----执行操作并返回值 ==========存储过程========== 创建过程的语法: create or replace procedure proce_name (parameter_list) is|as local variable declaration begin executable statements exception exception_handlers end proce_name; 过程参数的三种模式: In----用于接收调用的值,默认的参数模式 Out----用于向调用程序返回值 In out----用于接收调用程序的值,并向调用程序返回更新的值 执行过程的语法: Execute proce_name(parameter_list); 或 Declare Variable var_list; Begin Proce_name(var_list); End; 将过程执行的权限授予其他用户: Grant execute on proce_name to scott; Grant execute on proce_name to public; 删除存储过程: Drop procedure proce_name; ==========函数========== 创建函数的语法: Create or replace function Fun_name (parameter_list) Return datatype is|as Local declarations Begin Executable statements; Return result; Exception Exce_handlers; End; 函数只能接收in参数,不能接受out或in out参数,形参不能是PL/SQL类型 函数的返回类型也必须是数据库类型 访问函数的方式: J 使用PL/SQL块 J 使用SQL语句 Select fun_name(parameter_list) from dual;
为了保证Linux系统的安全性,我们应该尽量避免直接使用root账户,因此可以考虑禁用root账户来防止破解和登陆。 工具/原料 Linux操作系统 方法/步骤 1 使用root账户登录系统,添加一个普通账户例如test,并为其设置密码 useradd test passwd test 2 编辑配置文件/etc/ssh/sshd_config 修改PermitRootLogin 后面的yes 为 no ,并且去掉前面的注释符 3 最后重启sshd服务 /etc/init.d/ssh restart 或者service sshd restart,此时再用root用户登录,如果不能登陆则代表配置成功。如果需要使用root权限,可以使用su/sudo进行切换 END 注意事项 禁用root用户后使用sftp时可能一些目录无法访问
LVM磁盘管理 本文转自:http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。 与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、 'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。 如图所示LVM模型: 由四个磁盘分区可以组成一个很大的空间,然后在这些空间上划分一些逻辑分区,当一个逻辑分区的空间不够用的时候,可以从剩余空间上划分一些空间给空间不够用的分区使用。 二、 LVM基本术语 前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语: 物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。 物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。 卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。 逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。 PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。 LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。 简单来说就是: PV:是物理的磁盘分区 VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。 LV:也就是从VG中划分的逻辑分区 如下图所示PV、VG、LV三者关系: 三、 安装LVM 首先确定系统中是否安装了lvm工具: [root@www root]# rpm –qa|grep lvm lvm-1.0.3-4 如果命令结果输入类似于上例,那么说明系统已经安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或者从光盘装LVM rpm工具包。 四、 创建和管理LVM 要创建一个LVM系统,一般需要经过以下步骤: 1、 创建分区 使用分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别仅仅是LVM的分区类型为8e。如下列图所示: 查看磁盘分区表 使用fdisk创建分区,根据设备文件的绝对路径(/dev/hda)进入分区管理 一定要指定分区的格式为8e,这是LVM的分区格式 2、 创建PV 3、 创建VG 创建完成VG之后,才能从VG中划分一个LV。 4、 创建LV 创建了一个名字为lvData,容量大小是100M的分区,其中:-L:指定LV的大小 -n:指定LV的名。Vo1Group00:表示从这个VG中划分LV; 5、LV格式化及挂载 下一步需要对LV进行格式化(使用mksf进行格式化操作),然后LV才能存储资料 将格式化后的LV分区挂载到指定的目录下,就可以像普通目录一样存储数据了 挂载之后,可以看到此LV的容量。 如果要在系统启动的时候启动LV,最好是将lvData写入fstable 文件中,如下所示: 使用Vim编辑器,打开/etc/fstab,在最后一行添加如图中所示,其中/dev/VolGroup00/lvData指定需要挂载的分区LV,/root/test指定要挂载的目录(挂载点),ext3分区文件系统格式,其它使用默认即可 扩容当前分区 一、首先创建一块新的分区: fdisk /dev/hda n l #选择逻辑分区,如果没有,则首先创建扩展分区,然后再添加逻辑分区(硬盘:最多四个分区P-P-P-P或P-P-P-E) 6 #分区号(从5开始),/dev/hda6 t 8e #分区类型8e表示LVM分区 w #写入分区表 partprobe #重读分区表 mkfs.ext3 /dev/hda6 #格式化 partx /dev/hda #查看当前硬盘的分区表及使用情况 二、创建PV,扩容VG,LV pvcreate /dev/hda6 vgdisplay #查看当前已经存在的VG信息,以存在VG:VolGroup00为例 vgextend VolGroup00 /dev/hda6 #扩展VolGroup00 lvdisplay 或者 pvscan #查看已经存在的LV信息,以存在LV:LogVol01为例 lvextend –L 1G /dev/VolGroup00/LogVol01 #扩展LV resize2fs /dev/VolGroup00/LogVol01 #执行该重设大小,对于当前正在使用的LogVol01有效 df –h #查看挂载情况,已经扩容 Email:gaojun_le@163.com
linux zip 命令详解 功能说明:压缩文件。 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期时间>][-<压缩效率>][压缩文件][文件...][-i <范本样式>][-x <范本样式>] 补充说明:zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。 参 数: -A 调整可执行的自动解压缩文件。 -b<工作目录> 指定暂时存放文件的目录。 -c 替每个被压缩的文件加上注释。 -d 从压缩文件内删除指定的文件。 -D 压缩文件内不建立目录名称。 -f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。 -F 尝试修复已损坏的压缩文件。 -g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。 -h 在线帮助。 -i<范本样式> 只压缩符合条件的文件。 -j 只保存文件名称及其内容,而不存放任何目录名称。 -J 删除压缩文件前面不必要的数据。 -k 使用MS-DOS兼容格式的文件名称。 -l 压缩文件时,把LF字符置换成LF+CR字符。 -ll 压缩文件时,把LF+CR字符置换成LF字符。 -L 显示版权信息。 -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。 -n<字尾字符串> 不压缩具有特定字尾字符串的文件。 -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。 -q 不显示指令执行过程。 -r 递归处理,将指定目录下的所有文件和子目录一并处理。 -S 包含系统和隐藏文件。 -t<日期时间> 把压缩文件的日期设成指定的日期。 -T 检查备份文件内的每个文件是否正确无误。 -u 更换较新的文件到压缩文件内。 -v 显示指令执行过程或显示版本信息。 -V 保存VMS操作系统的文件属性。 -w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。 -x<范本样式> 压缩时排除符合条件的文件。 -X 不保存额外的文件属性。 -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。 -z 替压缩文件加上注释。 -$ 保存第一个被压缩文件所在磁盘的卷册名称。 -<压缩效率> 压缩效率是一个介于1-9的数值。 linux unzip 命令详解 功能说明:解压缩zip文件 语 法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z] 补充说明:unzip为.zip压缩文件的解压缩程序。 参 数: -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。 -f 更新现有的文件。 -l 显示压缩文件内所包含的文件。 -p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。 -t 检查压缩文件是否正确。 -u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。 -v 执行是时显示详细的信息。 -z 仅显示压缩文件的备注文字。 -a 对文本文件进行必要的字符转换。 -b 不要对文本文件进行字符转换。 -C 压缩文件中的文件名称区分大小写。 -j 不处理压缩文件中原有的目录路径。 -L 将压缩文件中的全部文件名改为小写。 -M 将输出结果送到more程序处理。 -n 解压缩时不要覆盖原有的文件。 -o 不必先询问用户,unzip执行后覆盖原有文件。 -P<密码> 使用zip的密码选项。 -q 执行时不显示任何信息。 -s 将文件名中的空白字符转换为底线字符。 -V 保留VMS的文件版本信息。 -X 解压缩时同时回存文件原来的UID/GID。 [.zip文件] 指定.zip压缩文件。 [文件] 指定要处理.zip压缩文件中的哪些文件。 -d<目录> 指定文件解压缩后所要存储的目录。 -x<文件> 指定不要处理.zip压缩文件中的哪些文件。 -Z unzip -Z等于执行zipinfo指令 范例: zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。 1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip: # zip -r yasuo.zip abc.txt dir1 2.我下载了一个yasuo.zip文件,想解压缩: # unzip yasuo.zip 3.我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们: # unzip abc\?.zip 注释:?表示一个字符,如果用*表示任意多个字符。 4.我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么: # unzip -v large.zip 5.我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了 # unzip -t large.zip 6.我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录: # unzip -j music.zip 转自 http://www.cnblogs.com/chinareny2k/archive/2010/01/05/1639468.html
遇到一个比较大的文本文件需要去除空行,首先想到的自然是正则表达式。偷懒去网上找了几个删除空行的正则表达式,填到EditPlus里居然都不能用...而且大多数的正则表达式都用到了"\r",也就是回车符,关于"\n"和"\r"的区别我以后再写,今天只是为了记录一个正则表达式。 ^[ \t]*\n 解释一下: 1、^表示一行的开头。空行嘛,肯定在一行的开头就是空的... 2、[ \t],"\t"前面还有一个空格。[]表示范围中的字符,里面写入空格和制表符(tab),因为空行可能是由空格和制表符构成。 3、*表示0次或任意次。也就是说这个空行可以没有空格或制表符,也可以有任意个前面[]里的字符。 4、\n就是换行符了。 这样在EditPlus里选择替换,然后勾选正则表达式,输入正则表达式,全部替换即可。不过EditPlus有个小bug,有时候不能一次替换完全,要多按几次"全部替换"才行... 转自 http://www.slyar.com/blog/editplus-regexp-blankline.html
1、sysdumpdev -e 查看系统dump需要多大空间 0453-041 Estimated dump size in bytes:585734553 2、sysdumpdev -l 查看dump路径 primary /dev/hd6 secondary /dev/sysdempnull copy directory /var/adm/ras forced copy flag TRUE always allow dump FALSE dump compression ON 3、
使用此命令 #/usr/lpp/diagnostics/bin/usysfault –s normal 如果此命令执行还亮,再使用下面的方法关闭小型机橙色告警灯: 使用root用户登陆系统,执行“diag”命令,回车继续; 1、选择“Task Selection”,回车继续; 2、选择“Identify and Attention Indicators”,回车继续; 3、选择“Set System Attention Indicator to Normal”,回车,“Set System Attention Indicator to Normal”前面出现“+”号,表示选定此项; 4、按“F7”提交。以上步骤可以熄灭小型机橙色告警灯 重置告警灯状态: 1、在上一个步骤中关闭告警灯后,需要重置告警灯状态,则在下一次重启后,小型机的面板黄灯不会再亮 2、使用root用户登陆系统,执行“diag”命令,回车继续; 3、选择“Task Selection”,回车继续; 4、选择“Log Repair Action”,回车继续; 5、选择需要重置告警灯的设备,如:sysplanar0,回车; 6、按“F7”提交,回车确定; 7、按“F10”离开“diag”。
在使用PHP模板Smarty过程中,如果不涉及自定义目录结构的话,按照下面的目录组织就可以直接使用了(前提是需要阅读以下用户手册)。 图上的每个目录都有了相应的说明,关于smarty的工作原理就是按照Smarty的语法规则编写模本文件,然后PHP脚本提供对应的数据,二者通过Smarty模板引擎最终输出可以展示的文件(包含格式+数据)。 如下图是Smarty最基本的工作原理,当然Smarty还提供更多强大的功能。 接下来就是一个Hello Smarty的体验了。 1.编一个提供数据的PHP文件(index.php) <?php require('./smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); $_smarty->display('index.tpl'); ?> 2.编一个用户展示数据的模本文件index.tpl(注意模板文件要放置到templates文件夹中) <!DOCTYPE html> <html> <head> <title>{$title}</title> </head> <body> <h3>Hello, {$name}</h3> </body> </html> 3.访问index.php 至此Smarty就可以工作了,但是关于Smarty的用法不是本文的重点,本文的重点是Smarty的目录结果配置。 为了说明Smarty的目录结构配置,先引入一个问题:目前的php文件都在工程根目录,实际应用中这样并不可取,这时候我们新建一个demo1.php放置到test目录下,看看会发生什么情况。 1. ./test/demo1.php代码如下: <?php require('../smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); var_dump($_smarty->getTemplateDir()); $_smarty->display('index.tpl'); ?> 注意: 模板文件不变 引入Smarty.class.php文件的路径发生变化。 打印模板目录信息(getTemplateDir()) 2. 访问/test/demo1.php文件看看结果: 首先问题出在模板文件index.tpl找不到,其次打印出的模板目录是:'.\templates\'很显然当前test目录下并不存在template目录,这个时候该怎么办呢? 3.自定义目录结构 实际开发中目录结构自然不能因为某个框架或者组件变成死的,当然框架或组件的开发者一般都会提供最大限度的可扩展,可配置。 上面的问题产生的原因倒不是应为我们的test目录下没有templates目录,而是我们在使用Smarty的时候完全采用了默认的配置,这样做方便了使用,单不利于项目的组织和管理。 我们能够做的就是将Smarty的自定义配置分离出来,单独做一个文件,然后在使用到Smarty对象的地方直接引用即可。 3.1下面是一个简单的分离示例(smarty.config.php): <?php //Smarty PHP configuration define('REAL_PATH', dirname(__FILE__)); require(REAL_PATH.'/smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->setCacheDir(REAL_PATH.'/cache'); $_smarty->setConfigDir(REAL_PATH.'/configs'); $_smarty->setPluginsDir(REAL_PATH.'/plugins'); $_smarty->setTemplateDir(REAL_PATH.'/templates'); $_smarty->setCompileDir(REAL_PATH.'/templates_c'); //添加Smarty自带的插件库 $_smarty->addPluginsDir(REAL_PATH.'/smarty/plugins'); //检测Smarty目录结构配置是否有效 // $_smarty->testInstall(); ?> 3.2 将smarty.config.php放置到工程的根目录,然后去掉$_smarty->testInstall()的注释,访问smarty.config.php看看有什么效果: 看到这么多Ok,就说明我们的Smarty目录结构配置成功了。 3.3接下来我们要使用smarty.config.php,在test目录下创建demo2.php: <?php require('../smarty.config.php'); // global $_smarty; $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); $_smarty->display('index.tpl'); ?> 注意: 包含smarty.config.php的路径 3.4 接下来访问tset/demo2.php看看什么效果: 看到这个结果和我们最开始的结果是一致的,这样我们就可以在项目中使用Smarty的时候不用关心Smarty的要求的目录结果是什么样子的了,当然并非一点都不关心,这个时候我们只需要维护smarty.config.php中的配置。 4.smarty.config.php配置的一点延伸 从3.1中smarty.config.php的配置代码中看,我们引入Smarty.class.php类的时候使用的绝对路径,这样做就可以保证项目中任何通过引入smarty.config.php文件来使用Smarty类能够正常加载。 做到这一步之后,接下来为了防止通过浏览器直接访问Smarty库以及它的依赖目录(cache, template, plugins, configs, templates_c),我们需要做点安全方面的工作,这个时候只需要吧Smarty库和它的依赖目录至于服务器文档根目录之外, 然后修改smart.config.php文件中的配置即可。 smarty3.7的目录结果如下图: 然后修改一下smarty.config.php中的配置即可,如下代码行。 define('REAL_PATH', 'D:\smarty3.7'); 注:如通过浏览器访问 http://localhost/smarty/smarty/Smarty.class.php; http://localhost/smarty/templates/index.tpl; 都是不安全的。原文地址: http://aiilive.blog.51cto.com/1925756/1421211
在使用PHP模板Smarty过程中,如果不涉及自定义目录结构的话,按照下面的目录组织就可以直接使用了(前提是需要阅读以下用户手册)。 图上的每个目录都有了相应的说明,关于smarty的工作原理就是按照Smarty的语法规则编写模本文件,然后PHP脚本提供对应的数据,二者通过Smarty模板引擎最终输出可以展示的文件(包含格式+数据)。 如下图是Smarty最基本的工作原理,当然Smarty还提供更多强大的功能。 接下来就是一个Hello Smarty的体验了。 1.编一个提供数据的PHP文件(index.php) <?php require('./smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); $_smarty->display('index.tpl'); ?> 2.编一个用户展示数据的模本文件index.tpl(注意模板文件要放置到templates文件夹中) <!DOCTYPE html> <html> <head> <title>{$title}</title> </head> <body> <h3>Hello, {$name}</h3> </body> </html> 3.访问index.php 至此Smarty就可以工作了,但是关于Smarty的用法不是本文的重点,本文的重点是Smarty的目录结果配置。 为了说明Smarty的目录结构配置,先引入一个问题:目前的php文件都在工程根目录,实际应用中这样并不可取,这时候我们新建一个demo1.php放置到test目录下,看看会发生什么情况。 1. ./test/demo1.php代码如下: <?php require('../smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); var_dump($_smarty->getTemplateDir()); $_smarty->display('index.tpl'); ?> 注意: 模板文件不变 引入Smarty.class.php文件的路径发生变化。 打印模板目录信息(getTemplateDir()) 2. 访问/test/demo1.php文件看看结果: 首先问题出在模板文件index.tpl找不到,其次打印出的模板目录是:'.\templates\'很显然当前test目录下并不存在template目录,这个时候该怎么办呢? 3.自定义目录结构 实际开发中目录结构自然不能因为某个框架或者组件变成死的,当然框架或组件的开发者一般都会提供最大限度的可扩展,可配置。 上面的问题产生的原因倒不是应为我们的test目录下没有templates目录,而是我们在使用Smarty的时候完全采用了默认的配置,这样做方便了使用,单不利于项目的组织和管理。 我们能够做的就是将Smarty的自定义配置分离出来,单独做一个文件,然后在使用到Smarty对象的地方直接引用即可。 3.1下面是一个简单的分离示例(smarty.config.php): <?php //Smarty PHP configuration define('REAL_PATH', dirname(__FILE__)); require(REAL_PATH.'/smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->setCacheDir(REAL_PATH.'/cache'); $_smarty->setConfigDir(REAL_PATH.'/configs'); $_smarty->setPluginsDir(REAL_PATH.'/plugins'); $_smarty->setTemplateDir(REAL_PATH.'/templates'); $_smarty->setCompileDir(REAL_PATH.'/templates_c'); //添加Smarty自带的插件库 $_smarty->addPluginsDir(REAL_PATH.'/smarty/plugins'); //检测Smarty目录结构配置是否有效 // $_smarty->testInstall(); ?> 3.2 将smarty.config.php放置到工程的根目录,然后去掉$_smarty->testInstall()的注释,访问smarty.config.php看看有什么效果: 看到这么多Ok,就说明我们的Smarty目录结构配置成功了。 3.3接下来我们要使用smarty.config.php,在test目录下创建demo2.php: <?php require('../smarty.config.php'); // global $_smarty; $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); $_smarty->display('index.tpl'); ?> 注意: 包含smarty.config.php的路径 3.4 接下来访问tset/demo2.php看看什么效果: 看到这个结果和我们最开始的结果是一致的,这样我们就可以在项目中使用Smarty的时候不用关心Smarty的要求的目录结果是什么样子的了,当然并非一点都不关心,这个时候我们只需要维护smarty.config.php中的配置。 4.smarty.config.php配置的一点延伸 从3.1中smarty.config.php的配置代码中看,我们引入Smarty.class.php类的时候使用的绝对路径,这样做就可以保证项目中任何通过引入smarty.config.php文件来使用Smarty类能够正常加载。 做到这一步之后,接下来为了防止通过浏览器直接访问Smarty库以及它的依赖目录(cache, template, plugins, configs, templates_c),我们需要做点安全方面的工作,这个时候只需要吧Smarty库和它的依赖目录至于服务器文档根目录之外, 然后修改smart.config.php文件中的配置即可。 smarty3.7的目录结果如下图: 然后修改一下smarty.config.php中的配置即可,如下代码行。 define('REAL_PATH', 'D:\smarty3.7'); 注:如通过浏览器访问 http://localhost/smarty/smarty/Smarty.class.php; http://localhost/smarty/templates/index.tpl; 都是不安全的。原文地址: http://aiilive.blog.51cto.com/1925756/1421211
在使用PHP模板Smarty过程中,如果不涉及自定义目录结构的话,按照下面的目录组织就可以直接使用了(前提是需要阅读以下用户手册)。 图上的每个目录都有了相应的说明,关于smarty的工作原理就是按照Smarty的语法规则编写模本文件,然后PHP脚本提供对应的数据,二者通过Smarty模板引擎最终输出可以展示的文件(包含格式+数据)。 如下图是Smarty最基本的工作原理,当然Smarty还提供更多强大的功能。 接下来就是一个Hello Smarty的体验了。 1.编一个提供数据的PHP文件(index.php) <?php require('./smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); $_smarty->display('index.tpl'); ?> 2.编一个用户展示数据的模本文件index.tpl(注意模板文件要放置到templates文件夹中) <!DOCTYPE html> <html> <head> <title>{$title}</title> </head> <body> <h3>Hello, {$name}</h3> </body> </html> 3.访问index.php 至此Smarty就可以工作了,但是关于Smarty的用法不是本文的重点,本文的重点是Smarty的目录结果配置。 为了说明Smarty的目录结构配置,先引入一个问题:目前的php文件都在工程根目录,实际应用中这样并不可取,这时候我们新建一个demo1.php放置到test目录下,看看会发生什么情况。 1. ./test/demo1.php代码如下: <?php require('../smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); var_dump($_smarty->getTemplateDir()); $_smarty->display('index.tpl'); ?> 注意: 模板文件不变 引入Smarty.class.php文件的路径发生变化。 打印模板目录信息(getTemplateDir()) 2. 访问/test/demo1.php文件看看结果: 首先问题出在模板文件index.tpl找不到,其次打印出的模板目录是:'.\templates\'很显然当前test目录下并不存在template目录,这个时候该怎么办呢? 3.自定义目录结构 实际开发中目录结构自然不能因为某个框架或者组件变成死的,当然框架或组件的开发者一般都会提供最大限度的可扩展,可配置。 上面的问题产生的原因倒不是应为我们的test目录下没有templates目录,而是我们在使用Smarty的时候完全采用了默认的配置,这样做方便了使用,单不利于项目的组织和管理。 我们能够做的就是将Smarty的自定义配置分离出来,单独做一个文件,然后在使用到Smarty对象的地方直接引用即可。 3.1下面是一个简单的分离示例(smarty.config.php): <?php //Smarty PHP configuration define('REAL_PATH', dirname(__FILE__)); require(REAL_PATH.'/smarty/Smarty.class.php'); $_smarty=new Smarty(); $_smarty->setCacheDir(REAL_PATH.'/cache'); $_smarty->setConfigDir(REAL_PATH.'/configs'); $_smarty->setPluginsDir(REAL_PATH.'/plugins'); $_smarty->setTemplateDir(REAL_PATH.'/templates'); $_smarty->setCompileDir(REAL_PATH.'/templates_c'); //添加Smarty自带的插件库 $_smarty->addPluginsDir(REAL_PATH.'/smarty/plugins'); //检测Smarty目录结构配置是否有效 // $_smarty->testInstall(); ?> 3.2 将smarty.config.php放置到工程的根目录,然后去掉$_smarty->testInstall()的注释,访问smarty.config.php看看有什么效果: 看到这么多Ok,就说明我们的Smarty目录结构配置成功了。 3.3接下来我们要使用smarty.config.php,在test目录下创建demo2.php: <?php require('../smarty.config.php'); // global $_smarty; $_smarty->assign('title', '欢迎'); $_smarty->assign('name', 'Smarty'); $_smarty->display('index.tpl'); ?> 注意: 包含smarty.config.php的路径 3.4 接下来访问tset/demo2.php看看什么效果: 看到这个结果和我们最开始的结果是一致的,这样我们就可以在项目中使用Smarty的时候不用关心Smarty的要求的目录结果是什么样子的了,当然并非一点都不关心,这个时候我们只需要维护smarty.config.php中的配置。 4.smarty.config.php配置的一点延伸 从3.1中smarty.config.php的配置代码中看,我们引入Smarty.class.php类的时候使用的绝对路径,这样做就可以保证项目中任何通过引入smarty.config.php文件来使用Smarty类能够正常加载。 做到这一步之后,接下来为了防止通过浏览器直接访问Smarty库以及它的依赖目录(cache, template, plugins, configs, templates_c),我们需要做点安全方面的工作,这个时候只需要吧Smarty库和它的依赖目录至于服务器文档根目录之外, 然后修改smart.config.php文件中的配置即可。 smarty3.7的目录结果如下图: 然后修改一下smarty.config.php中的配置即可,如下代码行。 define('REAL_PATH', 'D:\smarty3.7'); 注:如通过浏览器访问 http://localhost/smarty/smarty/Smarty.class.php; http://localhost/smarty/templates/index.tpl; 都是不安全的。原文地址: http://aiilive.blog.51cto.com/1925756/1421211
Aix环境下管理Oracle 1、Aix下查看、启动数据库监听器 以oracle用户执行以下命令: ① lsnrctl status //-查看监听器状态 ② lsnrctl start //-启动监听器 2、Aix下启动/停止Oracle数据库实例 ① su – oracle //-以oracle用户登录 ② echo $ORACLE_SID //–查看当前ORACLE_SID ③ export ORACLE_SID=CEDB //–设置当前ORACLE_SID为CEDB ④ sqlplus /nolog //-以不登录到数据库服务的方式进入sqlplus环境 ⑤ conn as sysdba //-以数据库管理员的身份连接数据库,此处需要知道数据库的用户名和密码 ⑥ startup //-启动当前数据库实例 shutdown immediate //-停止当前数据库实例 Linux环境下管理Oracle 1、启动关闭监听 $lsnrctl >start >stop 2、启动数据库 以oracle身份运行: $sqlplus /nolog >connect / as sysdba >startup ######遇到无法启动,执行关闭命令 3、关闭数据库 以oracle身份运行: $sqlplus /nolog >connect / as sysdba >shutdown immediate
Aix环境下管理Oracle 1、Aix下查看、启动数据库监听器 以oracle用户执行以下命令: ① lsnrctl status //-查看监听器状态 ② lsnrctl start //-启动监听器 2、Aix下启动/停止Oracle数据库实例 ① su – oracle //-以oracle用户登录 ② echo $ORACLE_SID //–查看当前ORACLE_SID ③ export ORACLE_SID=CEDB //–设置当前ORACLE_SID为CEDB ④ sqlplus /nolog //-以不登录到数据库服务的方式进入sqlplus环境 ⑤ conn as sysdba //-以数据库管理员的身份连接数据库,此处需要知道数据库的用户名和密码 ⑥ startup //-启动当前数据库实例 shutdown immediate //-停止当前数据库实例 Linux环境下管理Oracle 1、启动关闭监听 $lsnrctl >start >stop 2、启动数据库 以oracle身份运行: $sqlplus /nolog >connect / as sysdba >startup ######遇到无法启动,执行关闭命令 3、关闭数据库 以oracle身份运行: $sqlplus /nolog >connect / as sysdba >shutdown immediate
Aix环境下管理Oracle 1、Aix下查看、启动数据库监听器 以oracle用户执行以下命令: ① lsnrctl status //-查看监听器状态 ② lsnrctl start //-启动监听器 2、Aix下启动/停止Oracle数据库实例 ① su – oracle //-以oracle用户登录 ② echo $ORACLE_SID //–查看当前ORACLE_SID ③ export ORACLE_SID=CEDB //–设置当前ORACLE_SID为CEDB ④ sqlplus /nolog //-以不登录到数据库服务的方式进入sqlplus环境 ⑤ conn as sysdba //-以数据库管理员的身份连接数据库,此处需要知道数据库的用户名和密码 ⑥ startup //-启动当前数据库实例 shutdown immediate //-停止当前数据库实例 Linux环境下管理Oracle 1、启动关闭监听 $lsnrctl >start >stop 2、启动数据库 以oracle身份运行: $sqlplus /nolog >connect / as sysdba >startup ######遇到无法启动,执行关闭命令 3、关闭数据库 以oracle身份运行: $sqlplus /nolog >connect / as sysdba >shutdown immediate
vi /etc/ssh/sshd_config文件 添加(或者修改)一行: UseDNS no 然后 service sshd restart 重启sshd即可
从卷组VG里扩展lv、删除pv,并删除物理卷PV 一、扩展LV、缩小LV 1、卸载LV 命令:umount “挂载目录” 2、扩展LV 命令:lvextend -L +500m /dev/lv00/lv01 或者 lvresize -L 5G /dev/lv00/lv01 lvextend 表示增加500M,lvresize表示增加到5G,是调整后的容量。 3、检查文件系统 命令:fsck -f /dev/vg00/lv01 4、重建文件系统 命令:resize2fs /dev/lv00/lv01 这一步很关键,重建文件系统不用担心LV的数据会丢失,当然,以防万一,也可以先备份下LV里的数据。 5、挂载LV 命令:mount /dev/lv001/lv01 /opt 缩小LV 缩小LV需要事先知道LV中的数据容量大小,缩小容量值不应超过剩余空间容量,而且要知道减少LV容量后的新大小。可以通过lvscan来查看LV容量,通过vgdisplay来查看剩余容量。 1、卸载LV 命令:umount “挂载目录” 2、检查文件系统 命令:fsck -f /dev/lv00/lv01 3、调整LV大小并重建文件系统 命令:resize2fs /dev/vg00/lv01 2G 4、减小LV容量 命令:lvreduce -L -3G /dev/vg00/lv01 5、挂载LV 命令:mount /dev/lv001/lv01 /opt 二、从卷组里删除PV 1、先查看VG里的PV情况 vgdisplay -v 2、从VG里删除PV vgreduce vg00 /dev/sdb1 3、检查确认是否删除PV vgdisplay -v vg00 | grep "/dev/sdb1" 三、删除PV 1、确认pv信息 pvdisplay "/dev/sdb1" is a new physical volume of "290.24 MB" 这里的/dev/sdb1就是要删除的pv 2、删除pv pvremove /dev/sdb1 3、确认pv是否成功删除 pvdisplay | grep "/dev/sdb1" 三、删除硬盘上的LVM分区 1、fdisk /dev/sdb 2、Command (m for help): p 3、Command (m for help): d Selected partition 1 4、Command (m for help): p <--在显示分区情况,发现已经没了 5、 Command (m for help): w 删除lv 1、卸载挂载 umount /dev/vg00/lv01 2、移除lv lvremove /dev/vg00/lv01 3、确认是否成功移除lv lvdisplay | grep "/dev/vg00/lv01"
userdel oracle cd /home rm -rf oracle cd /var/spool/mail rm -rf oracle 若找不到oracle目录,可以find ps:find / name "*oracle*"
userdel oracle cd /home rm -rf oracle cd /var/spool/mail rm -rf oracle 若找不到oracle目录,可以find ps:find / name "*oracle*"
umount.nfs: /mydata: device is busy [root@localhost /]# umount /data/ umount.nfs: /mydata: device is busy 查看占用进程号: [root@localhost /]# fuser -m -v /data/ 用户 进程号 权限 命令 /mydata/: root 41331 www 41223 ..c.. su 将上面的进程kill掉,再删除挂载。 [root@localhost /]# kill -9 41331 41223 [root@localhost /]# umount /mydata [root@localhost /]#
ssh服务的启动与停止 1、查看是否安装ssh rpm -qa | grep openssh 显示结果中包含openssh-server-*,则说明已经安装,直接启动 2、启动/状态/停止service sshd start/status/stop /etc/rc.d/init.d/sshd start 3、启动/状态/关闭防火墙:service iptables start/status/stop /etc/rc.d/init.d/iptables stop 4、查看22端口是否开放:netstat -an|grep 22 5、查看SELinux状态: 1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled 2、getenforce ##也可以用这个命令检查 关闭SELinux: 1、临时关闭(不用重启机器): setenforce 0 ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式 2、修改配置文件需要重启机器: 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled enabled则为启动状态,重启机器即可。
ssh服务的启动与停止 1、查看是否安装ssh rpm -qa | grep openssh 显示结果中包含openssh-server-*,则说明已经安装,直接启动 2、启动/状态/停止service sshd start/status/stop /etc/rc.d/init.d/sshd start 3、启动/状态/关闭防火墙:service iptables start/status/stop /etc/rc.d/init.d/iptables stop 4、查看22端口是否开放:netstat -an|grep 22 5、查看SELinux状态: 1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled 2、getenforce ##也可以用这个命令检查 关闭SELinux: 1、临时关闭(不用重启机器): setenforce 0 ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式 2、修改配置文件需要重启机器: 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled enabled则为启动状态,重启机器即可。
vi打开一个文件后,要查找某个字符串 在命令模式下敲斜杆( / ) 这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。 如果你要继续查找此关键字,敲字符 n 就可以继续查找了。
vi打开一个文件后,要查找某个字符串 在命令模式下敲斜杆( / ) 这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。 如果你要继续查找此关键字,敲字符 n 就可以继续查找了。
对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: 1)对于.zip linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,可用命令zip -help和unzip -help查看,这里只做简单介绍,举例说明一下其用法: # zip yajiu.zip yajiu.jpg yajiu.png 这条命令是将yajiu.jpg和yajiu.png压缩成一个zip包 # zip yajiu.zip *.jpg 这条命令是将所有.jpg的文件压缩成一个zip包 # zip -r yajiu.zip yajiu 这条命令是将文件夹yajiu压缩成一个zip包 # unzip yajiu.zip 这条命令是将yajiu.zip中的所有文件解压出来 yajiu@yajiu-desktop:~$ cd 图片 yajiu@yajiu-desktop:~/图片zip yajiu.zip yajiu.jpg yajiu.png updating: yajiu.jpg (deflated 34%) updating: yajiu.png (deflated 0%) yajiu@yajiu-desktop:~/图片$ zip yajiu.zip *.jpg adding: 1.jpg (deflated 34%) adding: 2.jpg (deflated 0%) yajiu@yajiu-desktop:~/图片$ zip -r yajiu.zip yajiu adding: yajiu/ (stored 0%) adding: yajiu/yajiu.zip (stored 0%) adding: yajiu/yajiu.jpg (deflated 34%) adding: yajiu/yajiu.rar (deflated 0%) adding: yajiu/yajiu.7z (deflated 0%) adding: yajiu/yajiu.png (deflated 0%) yajiu@yajiu-desktop:~/图片$ unzip yajiu.zip Archive: yajiu.zip replace 1.jpg? [y]es, [n]o, [A]ll, [N]one, [r]ename: y inflating: 1.jpg replace 2.jpg? [y]es, [n]o, [A]ll, [N]one, [r]ename: y inflating: 2.jpg yajiu@yajiu-desktop:~/图片$ 2)对于.rar 安装: sudo apt-get install rar unrar 或者可从http://www.rarsoft.com/download.htm下载 RAR for Linux 编译安装 # tar -xzpvf rarlinux-3.8.0.tar.gz # cd rar # make 这样就安装好了,安装之后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压程序。它们的参数选项很多,可用命令rar -help和unrar -help查看,这里亦简单举例说明一下其用法: # rar a yajiu.rar yajiu.jpg yajiu.png 这条命令是将yajiu.jpg和yajiu.png压缩成一个rar包 # rar a yajiu.rar *.jpg 这条命令是将所有.jpg的文件压缩成一个rar包 # rar a yajiu.rar yajiu 这条命令是将文件夹yajiu压缩成一个rar包 # unrar e yajiu.rar 这条命令是将yajiu.rar中的所有文件解压出来 yajiu@yajiu-desktop:~$ cd 图片 yajiu@yajiu-desktop:~/图片$ rar a yajiu.rar yajiu.jpg yajiu.png RAR 3.80 beta 2 Copyright (c) 1993-2008 Alexander Roshal 16 Jun 2008 Shareware version Type RAR -? for help Evaluation copy. Please register. Creating archive yajiu.rar Adding yajiu.jpg OK Adding yajiu.png OK Done yajiu@yajiu-desktop:~/图片$ rar a yajiu.rar *.jpg RAR 3.80 beta 2 Copyright (c) 1993-2008 Alexander Roshal 16 Jun 2008 Shareware version Type RAR -? for help Evaluation copy. Please register. Creating archive yajiu.rar Adding 1.jpg OK Adding 2.jpg OK Done yajiu@yajiu-desktop:~/图片$ rar a yajiu.rar yajiu RAR 3.80 beta 2 Copyright (c) 1993-2008 Alexander Roshal 16 Jun 2008 Shareware version Type RAR -? for help Evaluation copy. Please register. Creating archive yajiu.rar Adding yajiu/yajiu.zip OK Adding yajiu/yajiu.jpg OK Adding yajiu/yajiu.rar OK Adding yajiu/yajiu.7z OK Adding yajiu/yajiu.png OK Adding yajiu OK Done yajiu@yajiu-desktop:~/图片$ unrar e yajiu.rar UNRAR 3.80 beta 2 freeware Copyright (c) 1993-2008 Alexander Roshal Extracting from yajiu.rar 1.jpg already exists. Overwrite it ? [Y]es, [N]o, [A]ll, n[E]ver, [R]ename, [Q]uit Y Extracting 1.jpg OK 7a008fc287fe680c0ff477e9.jpg already exists. Overwrite it ? [Y]es, [N]o, [A]ll, n[E]ver, [R]ename, [Q]uit Y Extracting 2.jpg OK All OK yajiu@yajiu-desktop:~/图片$ 2)对于.7z 支持 7Z,ZIP,Zip64,CAB,RAR,ARJ,GZIP,BZIP2,TAR,CPIO,RPM,ISO,DEB 压缩文件格式 安装: sudo apt-get install p7zip p7zip-full p7zip-rar # 7z a yajiu.7z yajiu.jpg yajiu.png 这条命令是将yajiu.jpg和yajiu.png压缩成一个7z包 # 7z a yajiu.7z *.jpg 这条命令是将所有.jpg的文件压缩成一个7z包 # 7z a yajiu.7z yajiu 这条命令是将文件夹yajiu压缩成一个7z包 # 7z e yajiu.7z 这条命令是将yajiu.7z中的所有文件解压出来,e是解压到当前路径 # 7z x yajiu.7z 这条命令是将yajiu.7z中的所有文件解压出来,x是解压到压缩包命名的目录下 yajiu@yajiu-desktop:~$ cd 图片 yajiu@yajiu-desktop:~/图片$ 7z a yajiu.7z yajiu.jpg yajiu.png 7-Zip (A) 4.58 beta Copyright (c) 1999-2008 Igor Pavlov 2008-05-05 p7zip Version 4.58 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,2 CPUs) Scanning Creating archive yajiu.7z Compressing yajiu.jpg Compressing yajiu.png Everything is Ok yajiu@yajiu-desktop:~/图片$ 7z a yajiu.7z *.jpg 7-Zip (A) 4.58 beta Copyright (c) 1999-2008 Igor Pavlov 2008-05-05 p7zip Version 4.58 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,2 CPUs) Scanning Creating archive yajiu.7z Compressing 1.jpg Compressing 2.jpg Everything is Ok yajiu@yajiu-desktop:~/图片$ 7z a yajiu.7z yajiu 7-Zip (A) 4.58 beta Copyright (c) 1999-2008 Igor Pavlov 2008-05-05 p7zip Version 4.58 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,2 CPUs) Scanning Creating archive yajiu.7z Compressing yajiu/yajiu.7z Compressing yajiu/yajiu.rar Compressing yajiu/yajiu.zip Compressing yajiu/yajiu.jpg Compressing yajiu/yajiu.png Everything is Ok yajiu@yajiu-desktop:~/图片$ 7z x yajiu.7z 7-Zip 4.58 beta Copyright (c) 1999-2008 Igor Pavlov 2008-05-05 p7zip Version 4.58 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,2 CPUs) Processing archive: yajiu.7z file 1.jpg already exists. Overwrite with 1.jpg? (Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename / (Q)uit? Y Extracting 1.jpg file 2.jpg already exists. Overwrite with 2.jpg? (Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename / (Q)uit? Y Extracting 2.jpg Everything is Ok Files: 2 Size: 112564 Compressed: 96228 yajiu@yajiu-desktop:~/图片$
今天一个很偶然的机会看到了linux中的find命令,然后我在网上搜索了一下这方面的内容,为了方便大家学习参考,我就总结一下,一上午的劳动成果,呵呵! 首先是find的语法: find [起始目录] 寻找条件 操作 还有种表述方式:find PATH OPTION [-exec COMMAND { } \;] 因为find命令会根据我们给的option,也就是寻找条件从我们给出的目录开始对其中文件及其下子目录中的文件进行递归搜索,所以我觉的这个地方说是“起始目录”是非常好的。 该命令中的寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。逻辑运 算符 and、or、not 的含义为: (1) and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条 件都满足时,寻找条件才算满足。例如: find –name ’tmp’ –xtype c -user ’inin’ % 该命令寻找三个给定条件都满足的所有文件 (2) or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足 时,寻找条件就算满足。例如: find –name ’tmp’ –o –name ’mina*’ % 该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。 (3) not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件 。例如: find ! –name ’tmp’ % 该命令查询文件名不是’tmp’的所有文件。 需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“\”来去除括号的意义。例: find \(–name ’tmp’ –xtype c -user ’inin’ \) 我觉的现在我应该说下出了查询条件,在find中的option的内容了: 在option中,具体有参数: -name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]。 -lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符 *、?、[ ]。 -gid n 查找属于ID号为 n 的用户组的所有文件。 -uid n 查找属于ID号为 n 的用户的所有文件。 -group ’字串’ 查找属于用户组名为所给字串的所有的文件。 -user ’字串’ 查找属于用户名为所给字串的所有的文件。 -empty 查找大小为 0的目录或文件。 -path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。 -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。 -size n[bckw] 查找指定文件大小的文件,n 后面的字符表示单位,缺省为 b,代表512字节的块。 -type x 查找类型为 x 的文件,x 为下列字符之一: b 块设备文件 c 字符设备文件 d 目录文件 p 命名管道(FIFO) f 普通文件 l 符号链接文件(symbolic links) s socket文件 -xtype x 与 -type 基本相同,但只查找符号链接文件。 以时间为条件查找 -amin n 查找n分钟以前被访问过的所有文件。 -atime n 查找n天以前被访问过的所有文件。 -cmin n 查找n分钟以前文件状态被修改过的所有文件。 -ctime n 查找n天以前文件状态被修改过的所有文件。 -mmin n 查找n分钟以前文件内容被修改过的所有文件。 -mtime n 查找n天以前文件内容被修改过的所有文件。 -print:将搜索结果输出到标准输出。 例子:在root以及子目录查找不包括目录/root/bin的,greek用户的,文件类型为普通文件的,3天之前的名为test-find.c的文件,并将结构输出,find命令如下: find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -print 当然在这其中,-print是一个默认选项,我们不必刻意去配置它。 我们再看一下exec选项: -exec:对搜索的结构指令指定的shell命令。注意格式要正确:"-exec 命令 {} \;" 在}和\之间一定要有空格才行; {}表示命令的参数即为所找到的文件;命令的末尾必须以“ \;”结束。 例子:对上述例子搜索出来的文件进行删除操作,命令如下: find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -exec rm {} \; find命令指令实例: find . - name ‘main*’ - exec more {} \; % 查找当前目录中所有以main开头的文件,并显示这些文件的内容。 find . \(- name a.out - o - name ‘*.o’\)> - atime +7 - exec rm {} \; % 删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。 % 命令中的“.”表示当前目录,此时 find 将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。 % “\(” 和 “\)” 表示括号(),其中的 “\” 称为转义符。之所以这样写是由于对 Shell 而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。 % “-name a.out” 是指要查找名为a.out的文件; % “-name ‘*.o’” 是指要查找所有名字以 .o 结尾的文件。 这两个 -name 之间的 -o 表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件。 % find命令在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间 是否在7天以前(条件 -atime +7),若是,则对该文件执行命令 rm(-exec rm {} \;)。 其中 {} 代表当前查到的符合条件的文件名,\;则是语法所要求的。 % 上述命令中第一行的最后一个 \ 是续行符。当命令太长而在一行写不下时,可输入一个 \,之后系统将显示一个 >,指示用户继续输入命令。
折腾了半天,里标记一下,以备后用。 一、同步环境 1、ntp客户端:windows7,关闭了防火墙,ip:192.168.1.101 2、ntp服务端:windows7下虚拟机redhat5.5,关闭了防火墙+selinux,ip:192.168.1.105 二、NTP服务端步骤: 1、cd /etc && cp ntp.conf ntp.bak.conf 2、vi ntp.conf (1)找到restrict开始的部分,删除之,改为以下三行: restrict default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict 192.168.1.0 mask 255.255.255.0 nomodify (2)找到: # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). 添加以下3条NTP时间服务器 server s1b.time.edu.cn server s1a.time.edu.cn server 210.72.145.44 参考:国内常用NTP服务器地址及IP:http://www.douban.com/note/171309770/ 保存ntp.conf,执行:service ntpd restart 三、windows客户端操作 1、客户端“开始”,搜索里输入gpedit.msc,然后回车 图1 打开如下窗口: 图2 2、单击“配置windows ntp客户端”,在打开的窗口里,选择“启用”,然后修改下面的选项框:NtpServer:192.168.1.105(也就是服务端ip),类型:NTP,然后保存。 图3 3、回到图2对话框,单击“启用windows ntp客户端”,如果选项框是空白,点击右上方的“上一个配置”。 图4 然后,可以看到下图5,单击“确定”保存。 4、把客户端时间与服务端时间修改误差大一些,测试的时候可以更好的看到效果。 双击任务栏最右边的时间,打开“日期和时间”,切换到“Internet时间”-“更改设置”,在服务器一栏里输入:192.168.1.105,然后“立即更新”,不出意外的话,接着会看到更新成功的提示。
centos使用网易yum源提示404错误解决办法 原文地址:http://www.dedecms8.com/os/linux/49994.html 本地安装的centos5.5,使用网易163 yum更新源的时候,提示404错误:[Errno 14] HTTP Error 404: Not Found 直接相应的地址,发现网易镜像网站目录里已经不存在此页,真正存储这些文件的地址是http://mirrors.163.com/centos/5/ 于是根据情况修改CentOS5-Base-163如下: # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-5 - Base - 163.com baseurl=http://mirrors.163.com/centos/5/os/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=os gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #released updates [updates] name=CentOS-5 - Updates - 163.com baseurl=http://mirrors.163.com/centos/5/updates/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=updates gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #packages used/produced in the build but not released [addons] name=CentOS-5 - Addons - 163.com baseurl=http://mirrors.163.com/centos/5/addons/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=addons gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #additional packages that may be useful [extras] name=CentOS-5 - Extras - 163.com baseurl=http://mirrors.163.com/centos/5/extras/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=extras gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-5 - Plus - 163.com baseurl=http://mirrors.163.com/centos/5/centosplus/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=centosplus gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #contrib - packages by Centos Users [contrib] name=CentOS-5 - Contrib - 163.com baseurl=http://mirrors.163.com/centos/5/contrib/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=contrib gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
centos使用网易yum源提示404错误解决办法 原文地址:http://www.dedecms8.com/os/linux/49994.html 本地安装的centos5.5,使用网易163 yum更新源的时候,提示404错误:[Errno 14] HTTP Error 404: Not Found 直接相应的地址,发现网易镜像网站目录里已经不存在此页,真正存储这些文件的地址是http://mirrors.163.com/centos/5/ 于是根据情况修改CentOS5-Base-163如下: # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-5 - Base - 163.com baseurl=http://mirrors.163.com/centos/5/os/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=os gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #released updates [updates] name=CentOS-5 - Updates - 163.com baseurl=http://mirrors.163.com/centos/5/updates/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=updates gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #packages used/produced in the build but not released [addons] name=CentOS-5 - Addons - 163.com baseurl=http://mirrors.163.com/centos/5/addons/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=addons gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #additional packages that may be useful [extras] name=CentOS-5 - Extras - 163.com baseurl=http://mirrors.163.com/centos/5/extras/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=extras gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-5 - Plus - 163.com baseurl=http://mirrors.163.com/centos/5/centosplus/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=centosplus gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 #contrib - packages by Centos Users [contrib] name=CentOS-5 - Contrib - 163.com baseurl=http://mirrors.163.com/centos/5/contrib/$basearch/ #mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=contrib gpgcheck=1 enabled=0 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
linux 下查看文件个数及大小 ls -l |grep "^-"|wc -l 或 find ./company -type f | wc -l 查看某文件夹下文件的个数,包括子文件夹里的。 ls -lR|grep "^-"|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的。 ls -lR|grep "^d"|wc -l 说明: ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等) grep "^-" 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d wc -l 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于 一行信息对应一个文件,所以也就是文件的个数。 Linux查看文件夹大小 du -sh 查看当前文件夹大小 du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序 du -sk filename 查看指定文件大小 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。 du可以查看文件及文件夹的大小。 两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。 下面分别简要介绍 df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子: 以下是代码片段: [yayug@yayu ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 3.9G 300M 3.4G 8% / /dev/sda7 100G 188M 95G 1% /data0 /dev/sdb1 133G 80G 47G 64% /data1 /dev/sda6 7.8G 218M 7.2G 3% /var /dev/sda5 7.8G 166M 7.2G 3% /tmp /dev/sda3 9.7G 2.5G 6.8G 27% /usr tmpfs 2.0G 0 2.0G 0% /dev/shm 参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。 上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1 这个分割区被挂在根目录下。 接下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。 FreeBSD下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。 du:查询文件或文件夹的磁盘使用空间 如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小. 提醒:一向命令比linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d。 以下是代码片段: [root@bsso yayu]# du -h --max-depth=1 work/testing 27M work/testing/logs 35M work/testing [root@bsso yayu]# du -h --max-depth=1 work/testing/* 8.0K work/testing/func.php 27M work/testing/logs 8.1M work/testing/nohup.out 8.0K work/testing/testing_c.php 12K work/testing/testing_func_reg.php 8.0K work/testing/testing_get.php 8.0K work/testing/testing_g.php 8.0K work/testing/var.php [root@bsso yayu]# du -h --max-depth=1 work/testing/logs/ 27M work/testing/logs/ [root@bsso yayu]# du -h --max-depth=1 work/testing/logs/* 24K work/testing/logs/errdate.log_show.log 8.0K work/testing/logs/pertime_show.log 27M work/testing/logs/show.log 值得注意的是,看见一个针对du和df命令异同的文章:《du df 差异导致文件系统误报解决》。 du 统计文件大小相加 df 统计数据块使用情况 如果有一个进程在打开一个大文件的时候,这个大文件直接被rm 或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被Kill掉。 如此一来在定期删除 /var/spool/clientmqueue下面的文件时,如果没有杀掉其进程,那么空间一直没有释放。 使用下面的命令杀掉进程之后,系统恢复。 fuser -u /var/spool/clientmqueue 查看linux文件目录的大小和文件夹包含的文件数 统计总数大小 du -sh xmldb/ du -sm * | sort -n //统计当前目录大小 并安大小 排序 du -sk * | sort -n du -sk * | grep guojf //看一个人的大小 du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字 查看此文件夹有多少文件 /*/*/* 有多少文件 du xmldb/ du xmldb/*/*/* |wc -l 40752 解释: wc [-lmw] 参数说明: -l :多少行 -m:多少字符 -w:多少字 Linux:ls以K、M、G为单位查看文件大小 #man ls …… -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) …… # ls cuss.war nohup.out # ls -l total 30372 -rw-r--r-- 1 root root 31051909 May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out # ls -lh total 30M -rw-r--r-- 1 root root 30M May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out # ll -h total 30M -rw-r--r-- 1 root root 30M May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out df命令详细用法 a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示不是某一个档案系统的所有分割区磁盘使用量 T:显示每个分割区所属的档案系统名称 常用命令:df -hi 操作详解 引用 指令 df 可以显示目前所有档案系统的最大可用空间及使用情形,请看下列这个例子: # df -h Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1.9G 389M 1.4G 21% / devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1d 989M 54K 910M 0% /tmp /dev/ad0s1f 4.8G 3.8G 657M 86% /usr /dev/ad0s1e 1.9G 149M 1.6G 8% /var /dev/ad0s1g 26G 890K 24G 0% /volume2 /dev/da0s1d 325G 261G 38G 87% /volume1 我们加了参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。 上面的指令输出的第一个字段及最后一个字段分别是档案系统及其挂入点。我们可以看到 /dev/ad0s1a 这个分割区被挂在根目录下。我们在上一小节提到过 ad 所代表的是 IDE 的硬盘,而 s1 表示第一个主要扇区。我另外有一个 SCSI 硬盘,它的代号是 da,它的容量很大,主要用来存放数据。devfs 是一个特别的档案系统,该档案系统并非真的磁盘,而是 FreeBSD 用来管理系统硬件装置的虚拟档案系统。 接下来的四个字段 Size、Used、Avail、及 Capacity 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。 另外,我们还可以使用参数 -i 来查看目前档案系统 inode 的使用情形。有的时候虽然档案系统还有空间,但若没有足够的 inode 来存放档案的信息,一样会不能增加新的档案。 # df -ih Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/ad0s1a 1.9G 389M 1.4G 21% 20495 262127 7% / devfs 1.0K 1.0K 0B 100% 0 0 100% /dev /dev/ad0s1d 989M 62K 910M 0% 24 141286 0% /tmp /dev/ad0s1f 4.8G 3.8G 657M 86% 311439 348015 47% /usr /dev/ad0s1e 1.9G 149M 1.6G 8% 1758 280864 1% /var /dev/ad0s1g 26G 890K 24G 0% 12 3532786 0% /volume2 /dev/da0s1d 325G 261G 38G 87% 707277 43311409 2% /volume1 我们可以看到根目录的已经用掉的 inode 数量为 20495,还有 262127 的可用 inode。 小提示 还记得什么是 inode 吗?所谓的 inode 是用来存放档案及目录的基本信息 (metadata),包含时间、档名、使用者及群组等。在分割扇区时,系统会先做出一堆 inode 以供以后使用,inode 的数量关系着系统中可以建立的档案及目录总数。如果要存的档案大部分都很小,则同样大小的硬盘中会有较多的档案,也就是说需要较多的 inode 来挂档案及目录。 du:查询档案或目录的磁盘使用空间 a:显示全部目录和其次目录下的每个档案所占的磁盘空间 b:大小用bytes来表示 (默认值为k bytes) c:最后再加上总计 (默认值) s:只显示各档案大小的总合 (summarize) x:只计算同属同一个档案系统的档案 L:计算所有的档案大小 常用命令:du -a 操作详解 引用 指令 du 能以指定的目录下的子目录为单位,显示每个目录内所有档案所占用的磁盘空间大小。例如: # du -h /etc 104K /etc/defaults 6.0K /etc/X11 8.0K /etc/bluetooth 4.0K /etc/gnats 52K /etc/isdn 388K /etc/mail 68K /etc/mtree 2.0K /etc/ntp 38K /etc/pam.d 44K /etc/periodic/daily 6.0K /etc/periodic/monthly 42K /etc/periodic/security 16K /etc/periodic/weekly 110K /etc/periodic 6.0K /etc/ppp 318K /etc/rc.d 2.0K /etc/skel 130K /etc/ssh 10K /etc/ssl 1.7M /etc 我们目样使用 -h 参数来显示 human-readable 的格式。在应用时,我们可以使用 du 这个指令来查看哪个目录占用最多的空间。不过,du 的输出结果通常很长,我们可以加上 -s 参数来省略指定目录下的子目录,而只显示该目录的总合即可: # du -sh /etc 1.7M /etc 在查看目录的使用情形时,我们可以将输出结果导到 sort 指令进行排序,以了解哪个档案用了最多的空间: # du /etc | sort -nr | more 1746 /etc 388 /etc/mail 318 /etc/rc.d 130 /etc/ssh 110 /etc/periodic 104 /etc/defaults 68 /etc/mtree 52 /etc/isdn 44 /etc/periodic/daily 42 /etc/periodic/security 38 /etc/pam.d 16 /etc/periodic/weekly 10 /etc/ssl 8 /etc/bluetooth 6 /etc/ppp 6 /etc/periodic/monthly 6 /etc/X11 4 /etc/gnats 2 /etc/skel 2 /etc/ntp sort 的参数 -nr 表示要以数字排序法进行反向排序,因为我们要对目录大小做排序,所以不可以使用 human-readable 的大小输出,不然目录大小中会有 K、M 等字样,会造成排序不正确。
linux 下查看文件个数及大小 ls -l |grep "^-"|wc -l 或 find ./company -type f | wc -l 查看某文件夹下文件的个数,包括子文件夹里的。 ls -lR|grep "^-"|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的。 ls -lR|grep "^d"|wc -l 说明: ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等) grep "^-" 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d wc -l 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于 一行信息对应一个文件,所以也就是文件的个数。 Linux查看文件夹大小 du -sh 查看当前文件夹大小 du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序 du -sk filename 查看指定文件大小 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。 du可以查看文件及文件夹的大小。 两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。 下面分别简要介绍 df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子: 以下是代码片段: [yayug@yayu ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 3.9G 300M 3.4G 8% / /dev/sda7 100G 188M 95G 1% /data0 /dev/sdb1 133G 80G 47G 64% /data1 /dev/sda6 7.8G 218M 7.2G 3% /var /dev/sda5 7.8G 166M 7.2G 3% /tmp /dev/sda3 9.7G 2.5G 6.8G 27% /usr tmpfs 2.0G 0 2.0G 0% /dev/shm 参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。 上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1 这个分割区被挂在根目录下。 接下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。 FreeBSD下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。 du:查询文件或文件夹的磁盘使用空间 如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小. 提醒:一向命令比linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d。 以下是代码片段: [root@bsso yayu]# du -h --max-depth=1 work/testing 27M work/testing/logs 35M work/testing [root@bsso yayu]# du -h --max-depth=1 work/testing/* 8.0K work/testing/func.php 27M work/testing/logs 8.1M work/testing/nohup.out 8.0K work/testing/testing_c.php 12K work/testing/testing_func_reg.php 8.0K work/testing/testing_get.php 8.0K work/testing/testing_g.php 8.0K work/testing/var.php [root@bsso yayu]# du -h --max-depth=1 work/testing/logs/ 27M work/testing/logs/ [root@bsso yayu]# du -h --max-depth=1 work/testing/logs/* 24K work/testing/logs/errdate.log_show.log 8.0K work/testing/logs/pertime_show.log 27M work/testing/logs/show.log 值得注意的是,看见一个针对du和df命令异同的文章:《du df 差异导致文件系统误报解决》。 du 统计文件大小相加 df 统计数据块使用情况 如果有一个进程在打开一个大文件的时候,这个大文件直接被rm 或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被Kill掉。 如此一来在定期删除 /var/spool/clientmqueue下面的文件时,如果没有杀掉其进程,那么空间一直没有释放。 使用下面的命令杀掉进程之后,系统恢复。 fuser -u /var/spool/clientmqueue 查看linux文件目录的大小和文件夹包含的文件数 统计总数大小 du -sh xmldb/ du -sm * | sort -n //统计当前目录大小 并安大小 排序 du -sk * | sort -n du -sk * | grep guojf //看一个人的大小 du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字 查看此文件夹有多少文件 /*/*/* 有多少文件 du xmldb/ du xmldb/*/*/* |wc -l 40752 解释: wc [-lmw] 参数说明: -l :多少行 -m:多少字符 -w:多少字 Linux:ls以K、M、G为单位查看文件大小 #man ls …… -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) …… # ls cuss.war nohup.out # ls -l total 30372 -rw-r--r-- 1 root root 31051909 May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out # ls -lh total 30M -rw-r--r-- 1 root root 30M May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out # ll -h total 30M -rw-r--r-- 1 root root 30M May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out df命令详细用法 a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示不是某一个档案系统的所有分割区磁盘使用量 T:显示每个分割区所属的档案系统名称 常用命令:df -hi 操作详解 引用 指令 df 可以显示目前所有档案系统的最大可用空间及使用情形,请看下列这个例子: # df -h Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1.9G 389M 1.4G 21% / devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1d 989M 54K 910M 0% /tmp /dev/ad0s1f 4.8G 3.8G 657M 86% /usr /dev/ad0s1e 1.9G 149M 1.6G 8% /var /dev/ad0s1g 26G 890K 24G 0% /volume2 /dev/da0s1d 325G 261G 38G 87% /volume1 我们加了参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。 上面的指令输出的第一个字段及最后一个字段分别是档案系统及其挂入点。我们可以看到 /dev/ad0s1a 这个分割区被挂在根目录下。我们在上一小节提到过 ad 所代表的是 IDE 的硬盘,而 s1 表示第一个主要扇区。我另外有一个 SCSI 硬盘,它的代号是 da,它的容量很大,主要用来存放数据。devfs 是一个特别的档案系统,该档案系统并非真的磁盘,而是 FreeBSD 用来管理系统硬件装置的虚拟档案系统。 接下来的四个字段 Size、Used、Avail、及 Capacity 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。 另外,我们还可以使用参数 -i 来查看目前档案系统 inode 的使用情形。有的时候虽然档案系统还有空间,但若没有足够的 inode 来存放档案的信息,一样会不能增加新的档案。 # df -ih Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/ad0s1a 1.9G 389M 1.4G 21% 20495 262127 7% / devfs 1.0K 1.0K 0B 100% 0 0 100% /dev /dev/ad0s1d 989M 62K 910M 0% 24 141286 0% /tmp /dev/ad0s1f 4.8G 3.8G 657M 86% 311439 348015 47% /usr /dev/ad0s1e 1.9G 149M 1.6G 8% 1758 280864 1% /var /dev/ad0s1g 26G 890K 24G 0% 12 3532786 0% /volume2 /dev/da0s1d 325G 261G 38G 87% 707277 43311409 2% /volume1 我们可以看到根目录的已经用掉的 inode 数量为 20495,还有 262127 的可用 inode。 小提示 还记得什么是 inode 吗?所谓的 inode 是用来存放档案及目录的基本信息 (metadata),包含时间、档名、使用者及群组等。在分割扇区时,系统会先做出一堆 inode 以供以后使用,inode 的数量关系着系统中可以建立的档案及目录总数。如果要存的档案大部分都很小,则同样大小的硬盘中会有较多的档案,也就是说需要较多的 inode 来挂档案及目录。 du:查询档案或目录的磁盘使用空间 a:显示全部目录和其次目录下的每个档案所占的磁盘空间 b:大小用bytes来表示 (默认值为k bytes) c:最后再加上总计 (默认值) s:只显示各档案大小的总合 (summarize) x:只计算同属同一个档案系统的档案 L:计算所有的档案大小 常用命令:du -a 操作详解 引用 指令 du 能以指定的目录下的子目录为单位,显示每个目录内所有档案所占用的磁盘空间大小。例如: # du -h /etc 104K /etc/defaults 6.0K /etc/X11 8.0K /etc/bluetooth 4.0K /etc/gnats 52K /etc/isdn 388K /etc/mail 68K /etc/mtree 2.0K /etc/ntp 38K /etc/pam.d 44K /etc/periodic/daily 6.0K /etc/periodic/monthly 42K /etc/periodic/security 16K /etc/periodic/weekly 110K /etc/periodic 6.0K /etc/ppp 318K /etc/rc.d 2.0K /etc/skel 130K /etc/ssh 10K /etc/ssl 1.7M /etc 我们目样使用 -h 参数来显示 human-readable 的格式。在应用时,我们可以使用 du 这个指令来查看哪个目录占用最多的空间。不过,du 的输出结果通常很长,我们可以加上 -s 参数来省略指定目录下的子目录,而只显示该目录的总合即可: # du -sh /etc 1.7M /etc 在查看目录的使用情形时,我们可以将输出结果导到 sort 指令进行排序,以了解哪个档案用了最多的空间: # du /etc | sort -nr | more 1746 /etc 388 /etc/mail 318 /etc/rc.d 130 /etc/ssh 110 /etc/periodic 104 /etc/defaults 68 /etc/mtree 52 /etc/isdn 44 /etc/periodic/daily 42 /etc/periodic/security 38 /etc/pam.d 16 /etc/periodic/weekly 10 /etc/ssl 8 /etc/bluetooth 6 /etc/ppp 6 /etc/periodic/monthly 6 /etc/X11 4 /etc/gnats 2 /etc/skel 2 /etc/ntp sort 的参数 -nr 表示要以数字排序法进行反向排序,因为我们要对目录大小做排序,所以不可以使用 human-readable 的大小输出,不然目录大小中会有 K、M 等字样,会造成排序不正确。
linux 下查看文件个数及大小 ls -l |grep "^-"|wc -l 或 find ./company -type f | wc -l 查看某文件夹下文件的个数,包括子文件夹里的。 ls -lR|grep "^-"|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的。 ls -lR|grep "^d"|wc -l 说明: ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等) grep "^-" 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d wc -l 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于 一行信息对应一个文件,所以也就是文件的个数。 Linux查看文件夹大小 du -sh 查看当前文件夹大小 du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序 du -sk filename 查看指定文件大小 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。 du可以查看文件及文件夹的大小。 两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。 下面分别简要介绍 df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子: 以下是代码片段: [yayug@yayu ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 3.9G 300M 3.4G 8% / /dev/sda7 100G 188M 95G 1% /data0 /dev/sdb1 133G 80G 47G 64% /data1 /dev/sda6 7.8G 218M 7.2G 3% /var /dev/sda5 7.8G 166M 7.2G 3% /tmp /dev/sda3 9.7G 2.5G 6.8G 27% /usr tmpfs 2.0G 0 2.0G 0% /dev/shm 参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。 上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1 这个分割区被挂在根目录下。 接下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。 FreeBSD下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。 du:查询文件或文件夹的磁盘使用空间 如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小. 提醒:一向命令比linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d。 以下是代码片段: [root@bsso yayu]# du -h --max-depth=1 work/testing 27M work/testing/logs 35M work/testing [root@bsso yayu]# du -h --max-depth=1 work/testing/* 8.0K work/testing/func.php 27M work/testing/logs 8.1M work/testing/nohup.out 8.0K work/testing/testing_c.php 12K work/testing/testing_func_reg.php 8.0K work/testing/testing_get.php 8.0K work/testing/testing_g.php 8.0K work/testing/var.php [root@bsso yayu]# du -h --max-depth=1 work/testing/logs/ 27M work/testing/logs/ [root@bsso yayu]# du -h --max-depth=1 work/testing/logs/* 24K work/testing/logs/errdate.log_show.log 8.0K work/testing/logs/pertime_show.log 27M work/testing/logs/show.log 值得注意的是,看见一个针对du和df命令异同的文章:《du df 差异导致文件系统误报解决》。 du 统计文件大小相加 df 统计数据块使用情况 如果有一个进程在打开一个大文件的时候,这个大文件直接被rm 或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被Kill掉。 如此一来在定期删除 /var/spool/clientmqueue下面的文件时,如果没有杀掉其进程,那么空间一直没有释放。 使用下面的命令杀掉进程之后,系统恢复。 fuser -u /var/spool/clientmqueue 查看linux文件目录的大小和文件夹包含的文件数 统计总数大小 du -sh xmldb/ du -sm * | sort -n //统计当前目录大小 并安大小 排序 du -sk * | sort -n du -sk * | grep guojf //看一个人的大小 du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字 查看此文件夹有多少文件 /*/*/* 有多少文件 du xmldb/ du xmldb/*/*/* |wc -l 40752 解释: wc [-lmw] 参数说明: -l :多少行 -m:多少字符 -w:多少字 Linux:ls以K、M、G为单位查看文件大小 #man ls …… -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) …… # ls cuss.war nohup.out # ls -l total 30372 -rw-r--r-- 1 root root 31051909 May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out # ls -lh total 30M -rw-r--r-- 1 root root 30M May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out # ll -h total 30M -rw-r--r-- 1 root root 30M May 24 10:07 cuss.war -rw------- 1 root root 0 Mar 20 13:52 nohup.out df命令详细用法 a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示不是某一个档案系统的所有分割区磁盘使用量 T:显示每个分割区所属的档案系统名称 常用命令:df -hi 操作详解 引用 指令 df 可以显示目前所有档案系统的最大可用空间及使用情形,请看下列这个例子: # df -h Filesystem Size Used Avail Capacity Mounted on /dev/ad0s1a 1.9G 389M 1.4G 21% / devfs 1.0K 1.0K 0B 100% /dev /dev/ad0s1d 989M 54K 910M 0% /tmp /dev/ad0s1f 4.8G 3.8G 657M 86% /usr /dev/ad0s1e 1.9G 149M 1.6G 8% /var /dev/ad0s1g 26G 890K 24G 0% /volume2 /dev/da0s1d 325G 261G 38G 87% /volume1 我们加了参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。 上面的指令输出的第一个字段及最后一个字段分别是档案系统及其挂入点。我们可以看到 /dev/ad0s1a 这个分割区被挂在根目录下。我们在上一小节提到过 ad 所代表的是 IDE 的硬盘,而 s1 表示第一个主要扇区。我另外有一个 SCSI 硬盘,它的代号是 da,它的容量很大,主要用来存放数据。devfs 是一个特别的档案系统,该档案系统并非真的磁盘,而是 FreeBSD 用来管理系统硬件装置的虚拟档案系统。 接下来的四个字段 Size、Used、Avail、及 Capacity 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。 另外,我们还可以使用参数 -i 来查看目前档案系统 inode 的使用情形。有的时候虽然档案系统还有空间,但若没有足够的 inode 来存放档案的信息,一样会不能增加新的档案。 # df -ih Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/ad0s1a 1.9G 389M 1.4G 21% 20495 262127 7% / devfs 1.0K 1.0K 0B 100% 0 0 100% /dev /dev/ad0s1d 989M 62K 910M 0% 24 141286 0% /tmp /dev/ad0s1f 4.8G 3.8G 657M 86% 311439 348015 47% /usr /dev/ad0s1e 1.9G 149M 1.6G 8% 1758 280864 1% /var /dev/ad0s1g 26G 890K 24G 0% 12 3532786 0% /volume2 /dev/da0s1d 325G 261G 38G 87% 707277 43311409 2% /volume1 我们可以看到根目录的已经用掉的 inode 数量为 20495,还有 262127 的可用 inode。 小提示 还记得什么是 inode 吗?所谓的 inode 是用来存放档案及目录的基本信息 (metadata),包含时间、档名、使用者及群组等。在分割扇区时,系统会先做出一堆 inode 以供以后使用,inode 的数量关系着系统中可以建立的档案及目录总数。如果要存的档案大部分都很小,则同样大小的硬盘中会有较多的档案,也就是说需要较多的 inode 来挂档案及目录。 du:查询档案或目录的磁盘使用空间 a:显示全部目录和其次目录下的每个档案所占的磁盘空间 b:大小用bytes来表示 (默认值为k bytes) c:最后再加上总计 (默认值) s:只显示各档案大小的总合 (summarize) x:只计算同属同一个档案系统的档案 L:计算所有的档案大小 常用命令:du -a 操作详解 引用 指令 du 能以指定的目录下的子目录为单位,显示每个目录内所有档案所占用的磁盘空间大小。例如: # du -h /etc 104K /etc/defaults 6.0K /etc/X11 8.0K /etc/bluetooth 4.0K /etc/gnats 52K /etc/isdn 388K /etc/mail 68K /etc/mtree 2.0K /etc/ntp 38K /etc/pam.d 44K /etc/periodic/daily 6.0K /etc/periodic/monthly 42K /etc/periodic/security 16K /etc/periodic/weekly 110K /etc/periodic 6.0K /etc/ppp 318K /etc/rc.d 2.0K /etc/skel 130K /etc/ssh 10K /etc/ssl 1.7M /etc 我们目样使用 -h 参数来显示 human-readable 的格式。在应用时,我们可以使用 du 这个指令来查看哪个目录占用最多的空间。不过,du 的输出结果通常很长,我们可以加上 -s 参数来省略指定目录下的子目录,而只显示该目录的总合即可: # du -sh /etc 1.7M /etc 在查看目录的使用情形时,我们可以将输出结果导到 sort 指令进行排序,以了解哪个档案用了最多的空间: # du /etc | sort -nr | more 1746 /etc 388 /etc/mail 318 /etc/rc.d 130 /etc/ssh 110 /etc/periodic 104 /etc/defaults 68 /etc/mtree 52 /etc/isdn 44 /etc/periodic/daily 42 /etc/periodic/security 38 /etc/pam.d 16 /etc/periodic/weekly 10 /etc/ssl 8 /etc/bluetooth 6 /etc/ppp 6 /etc/periodic/monthly 6 /etc/X11 4 /etc/gnats 2 /etc/skel 2 /etc/ntp sort 的参数 -nr 表示要以数字排序法进行反向排序,因为我们要对目录大小做排序,所以不可以使用 human-readable 的大小输出,不然目录大小中会有 K、M 等字样,会造成排序不正确。