ORACLE创建表空间报错。ORA-01119和ORA-27040。

前两天,我正在帮同事搭建一个ORACLE数据库。
那人急得满头大汗。
说创建表空间的时候老是报错,ORA-01 1 1 9 和ORA-2 7 04 0,这让我很头疼。
我查看了日志,发现权限和路径设置错误。

我记得去年在机房调试时也遇到过同样的错误。
那是半夜,灯光下,我拿着服务器敲着键盘,重新配置了环境变量PATH。
哎呀,这些小事真是烦人啊。

必须首先初始化数据库。
我打开终端,输入 sqlplus/sysdba,然后按 Enter。
屏幕黑了,命令行跳动,感觉就像在和一台机器说话。
然后输入startup,稍等片刻,就可以看到数据库已经挂载了,就是这样。

下一步是创建临时表空间。
我逐行输入: SQL 创建临时表空间 joffice_temp 临时文件'/u01 /app/oracle/oradata/orcl/joffice_temp01 .dbf' 尺寸3 2 M 自动延伸至下一个 3 2 m 屏幕上显示 Extension Management Local;
Create Tablespace...,然后再次等待。
然后创建永久表空间: SQL 创建表空间办公室 记录 数据文件'/u01 /app/oracle/oradata/orcl/joffice_data.dbf' 尺寸3 2 M 自动延伸至下一个 3 2 m 边境管理本地;
这次错误信息少了,感觉舒服多了。
然后创建用户: SQL 创建用户办公室 乔菲斯确认 默认表空间office 临时表空间 joffice_temp;
再次授予权限: SQL 授予入职资格; 乔菲斯的资源授予; 为办公室创建一个授权表; 为Joffis提供Create View;
每次执行后,我都会习惯性地检查用户列表。
确保一切有效。
这时,有同事走过来,说监视器还没有启动。

所以我打开另一个终端并输入 lsnrctl start。
稍等片刻,可以看到“ORCL”服务已经启动。
完毕!同事立即联系测试,表空间创建成功。
他高兴得拍着大腿。

等等,我突然想起来上周我在测试环境中也遇到了类似的问题。
当时发生这种情况是因为文件系统满了,我没有注意到。
因此,在创建表空间之前,最好先检查一下空间边距。
比如我在华东的机房,那些兄弟总是喜欢把那个空间用得紧紧的。

现在这个系统可以使用了,但是不知道会不会还有其他隐藏的问题。
过两天还得再去看看。
嘿,数据库这件事确实需要细心和耐心。

oracle中with的用法

说实话,Oracle中的WITH子句就是CTE,相当方便。
只需创建一个临时结果集,后续查询就可以直接使用。

例如,Oracle 1 1 g在2 008 年就开始推广这个功能,如果你想创建临时表,则不需要创建实际的表。
直接说WITH,后面直接用就可以了。

像这样: sql WITH EmployeeTemp AS(从员工中选择员工 ID、薪水、部门 ID,其中薪水 > 1 0000) SELECT FROM EmployeeTemp;
看,先选择工资1 0000以上的员工,保存到临时表EmployeeTemp中。
后面直接查EmployeeTemp就可以了,不用每次都写子查询。

另一个例子是重命名字段: sql WITH EmployeeSalaries AS(选择员工 ID,来自员工的薪水) SELECTEmployee_id,salary AS emp_salary FROM EmployeeSalaries;
这里将Employees表的结果保存到EmployeeSalaries中,然后将salary列重命名为emp_salary。
这样写代码会更清晰。

另外就是提高性能,这个特别有用。
例如: sql WITH EmployeeAvgSalary AS(选择部门 ID,AVG(工资)AS avg_salary FROM 员工组 BY 部门 ID) SELECT FROM EmployeeAvgSalary WHERE avg_salary > 5 0000;
看,先算出各个部门的平均工资,保存到EmployeeAvgSalary中。
后面我们会直接用这个结果集来过滤平均薪资超过5 万的部门,而不必每次都重新计算GROUP BY。

但请注意,WITH 子句对当前查询有效,并且会在会话结束时消失。
不像实际的桌子那样永久。

你还可以同时定义多个临时表,如下所示: sql 使用 CTE1 AS(选择 ...)、CTE2 AS(选择 ...) SELECT ... FROM CTE1 JOIN CTE2 ON ...;
只需用逗号分隔多个 CTE。

还有递归查询,比较高级。
Oracle支持递归CTE,但语法与其他数据库略有不同。
使用 CONNECT BY 或 WITH RECURSIVE。

总的来说,WITH子句使复杂的查询变得更加简单,提高了效率。
尤其是多级嵌套子查询,使用起来确实很方便。

sqlserver怎么建临时表?

记得有一次在咖啡厅,坐在我旁边桌子上的年轻人正在敲击笔记本电脑,屏幕上是数据库的命令行界面。
他皱着眉头,一边调试着代码,一边嘀咕着什么。
我瞥了一眼,发现他正在做一张临时桌子,用数字来辨别当地的分布。

等等,这很有趣。
他当时正在使用MySQL,并创建了一个临时表,其中存储了一些用户数据。
他尝试了几次,但每次断开 Wi-Fi 并重新连接时,剪贴板都会消失。
他似乎很困惑,问我为什么。
我随口提到也许数据库被自动清理了。

然后我回家查了一下资料,发现是真的。
在MySQL中,临时表有一个会话级别的唯一编号,并且在断开连接时自动消失。
临时表在全局级别具有双重计数,但通常仅在所有会话断开连接后才会消失。
男孩听完,顿时明白了,笑了两声。

这个场景提醒我,有时候技术问题就像电话号码一样简单。
但是为什么SQL Server中的临时表被划分为这一类呢?我没见过年轻人问这个问题。
等等,他也尝试过使用系统表来查询临时表是否存在,但是没有找到。
也许是因为设计时没有离开这个界面。