我目前正在一大堆表上创建物化视图日志,以支持具有快速刷新的物化视图。我们正在创建的物化视图包含来自各种表的大约 30 列。我们的一个事实表包含大约 15 列,这些列将用于物化视图。
创建MV日志时,是否有必要枚举MV中所需的基表中的所有列?
CREATE MATERIALIZED VIEW LOG ON SCHEMA.TABLE_A
WITH ROWID, PRIMARY KEY, SEQUENCE (COL1, COL2, COL3, ..., COL48)
INCLUDING NEW VALUES;
Run Code Online (Sandbox Code Playgroud)
以上是我目前如何创建 MV 日志的示例。我承认以上是反复试验的结果,没有彻底了解语句中每个组件的工作原理(我最了解)。
什么情况下我需要定义哪些列应该包含在MV日志中?
一些物化视图只是跨多个表的连接。其他将包括聚合、分组、总和等。
我在 Oracle 10g 中遇到权限问题。我希望有人可以帮助我理解这一点。
我有一个带有表格的架构。我已将该表上的 select 授予一个角色。
grant select on user1.example_table to example_role;
Run Code Online (Sandbox Code Playgroud)
然后我将该角色授予用户:
grant example_role to user2;
Run Code Online (Sandbox Code Playgroud)
然后 user2 想在该表的顶部创建一个视图:
create or replace view user2.example_view as
select *
from user1.example_table;
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误:
ORA-01031: insufficient privileges
Run Code Online (Sandbox Code Playgroud)
为什么?如果他们通过角色拥有选择权限,为什么他们不能在该对象上创建视图?
我发现我必须将对象直接授予用户才能工作。
grant select on user1.example_table to user2;
Run Code Online (Sandbox Code Playgroud)
无论如何不必这样做吗?我想使用角色,因为我有很多表和很多用户,并且不想为单个用户维护一百万个不同的授权。
我想知道每次有人查询视图时,sql server 是否都会计算视图。这是因为我每次查询视图都需要很长时间。
当我试图通过仅从视图中选择前 10 行来缩短时间时,它花费了相同的时间。我怀疑 sql server 需要计算整个表的视图,即使我只想要视图中的几行,对吗?
我有一大堆需要创建的视图。其中许多视图依赖于其他视图。
如果我创建的视图依赖于尚未创建的视图,则会收到无效对象错误。
与其遍历整个过程并找出依赖关系,然后按照正确的顺序创建它们,有没有一种方法可以关闭此检查,直到创建所有视图?
视图安装后可以删除依赖视图,因此数据库可能处于视图存在依赖于不存在对象的状态。我需要它接受在创建过程中处于这种状态..
这更像是一个理论问题,但我需要尽快帮助。这里是:
通过适当使用 SQL 查询,将系统管理员所需的访问权限授予名为 STD01 的数据库用户,以便他可以创建名为 CUSTOMER 的表的视图,该表属于另一个数据库用户 STD00。
谁能帮我这个?
我知道我必须授予他 CREATE (ANY) VIEW 的系统权限,并授予他 CUSTOMER 表上的所有对象权限(SELECT、INSERT、UPDATE 和 DELETE),但我不知道我该怎么做通过使用 SQL...
我有一个完整的数据库转储并恢复了它。但是在我新恢复的服务器中,所有视图都显示为 MyISAM 表。在早期,垃圾场得到了完美的恢复。任何人都可以帮我触发这个问题吗?
问候, 普拉文
CREATE VIEW 语法是
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
Run Code Online (Sandbox Code Playgroud)
因为SECURITY您可以设置DEFINER或INVOKER。什么时候选择“定义器”才有意义?据我了解,这意味着检查我的安全权限,即创建视图的人。如果我对我们的数据库拥有完全权限,那么我只是创建了一个视图,为任何调用者提供完全访问权限。这听起来不对。难道您不总是希望安全性是实际使用视图的人吗?
这是我昨天问的一个问题 - /sf/ask/1552650921/。
我得到了一个很好的答案,对我有帮助,但我不明白为什么 LEFT JOIN 比查找慢得多。LEFT JOIN 是 16 秒 - 我很确定我的表至少优化了 90% - 在进行查找时它只有 0.14 秒。当我 LEFT JOIN 表时,它并没有那么慢,为什么要查看?
当使用mysqldump备份MySQL中,我得到了下面的错误。
mysqldump --all-databases --routines >> all.sql
mysqldump: Couldn't execute 'show table status like 'hdkien'': SELECT command denied to user 'tungbt'@'192.168.12.197' for column 'id' in table 'hdcn_hd' (1143)
Run Code Online (Sandbox Code Playgroud)
hdkien 是一种观点
CREATE ALGORITHM=UNDEFINED DEFINER=`tungbt`@`192.168.12.197` SQL SECURITY DEFINER VIEW `hdcn`.`hdkien` AS (...striped...)
Run Code Online (Sandbox Code Playgroud)
用户tungbt@192.168.12.197已经有权在表上进行选择hdcn_hd,我可以hdkien毫无问题地从视图中进行选择。
mysql> select * from hdkien limit 1;
+------+-----------+
| id | shd |
+------+-----------+
| 876 | ADFADFA1 |
+------+-----------+
Run Code Online (Sandbox Code Playgroud)
更多信息:
mysql-community-server-5.5.37-4.el6.x86_64为什么我在运行时出现错误,我该mysqldump如何解决?
更新 1 …
我有一个数据仓库,里面有很多用 SSMS 视图设计器内置的视图。查看语法,FROM我无法理解这些子句,因为ON语句没有紧跟在相关的JOIN <table>. 通常RIGHT连接查询的主表并在FROM. 所以我有这样的情况:
SELECT *
FROM tableC
LEFT JOIN TableB
RIGHT JOIN TableA
ON TableA.ID = TableB.ID
ON TableB.TypeID = TableC.TypeID
WHERE ....
Run Code Online (Sandbox Code Playgroud)
将各种JOINandON子句的顺序更改为我手写的内容会以意想不到的方式改变结果。似乎大多数 SQL 美化者都对这种丑陋的语法感到窒息,而 SSMS 则不然。我一直无法找到押韵、原因或文档来帮助解开正在发生的事情。
请提供任何建议或链接以找出和修复视图设计器查询?