text:
z�Hoa�, mimetypeapplication/epub+zipPK z�H META-INF/container.xml� �
This chapter discusses advanced topics in using materialized views. It contains the following topics:
Because of the large volume of data held in a data warehouse, partitioning is an extremely useful option when designing a database. Partitioning the fact tables improves scalability, simplifies system administration, and makes it possible to define local indexes that can be efficiently rebuilt. Partitioning the fact tables also improves the opportunity of fast refreshing the materialized view because this may enable Partition Change Tracking (PCT) refresh on the materialized view. Partitioning a materialized view also has benefits for refresh, because the refresh procedure can then use parallel DML in more scenarios and PCT-based refresh can use truncate partition to efficiently maintain the materialized view. See Oracle Database VLDB and Partitioning Guide for further details about partitioning.
It is possible and advantageous to track freshness to a finer grain than the entire materialized view. The ability to identify which rows in a materialized view are affected by a certain detail table partition, is known as Partition Change Tracking. When one or more of the detail tables are partitioned, it may be possible to identify the specific rows in the materialized view that correspond to a modified detail partition(s); those rows become stale when a partition is modified while all other rows remain fresh.
You can use PCT to identify which materialized view rows correspond to a particular partition. PCT is also used to support fast refresh after partition maintenance operations on detail tables. For instance, if a detail table partition is truncated or dropped, the affected rows in the materialized view are identified and deleted.
Identifying which materialized view rows are fresh or stale, rather than considering the entire materialized view as stale, allows query rewrite to use those rows that are fresh while in
ENFORCED or
TRUSTED modes. Several views, such as
DBA_MVIEW_DETAIL_PARTITION, detail which partitions are stale or fresh. Oracle does not rewrite against partial stale materialized views if partition change tracking on the changed table is enabled by the presence of join dependent expression in the materialized view. See "Join Dependent Expression" for more information.
To support PCT, a materialized view must satisfy the following requirements:
At least one of the detail tables referenced by the materialized view must be partitioned.
Partitioned tables must use either range, list or composite partitioning.
The top level partition key must consist of only a single column.
The materialized view must contain either the partition key column or a partition marker or
ROWID or join dependent expression of the detail table. See Oracle Database PL/SQL Packages and Types Reference for details regarding the
DBMS_MVIEW.PMARKER function.
If you use a
BY clause, the partition key column or the partition marker or
ROWID or join dependent expression must be present in the
BY clause.
If you use an analytic window function or the
MODEL clause, the partition key column or the partition marker or
ROWID or join dependent expression must be present in their respective
BY subclauses.
Data modifications can only occur on the partitioned table. If PCT refresh is being done for a table which has join dependent expression in the materialized view, then data modifications should not have occurred in any of the join dependent tables.
COMPATIBILITY initialization parameter must be a minimum of 22.214.171.124.0.
PCT is not supported for a materialized view that refers to views, remote tables, or outer joins.
Partition change tracking requires sufficient information in the materialized view to be able to correlate a detail row in the source partitioned detail table to the corresponding materialized view row. This can be accomplished by including the detail table partition key columns in the
SELECT list and, if
BY is used, in the
BY list.
Consider an example of a materialized view storing daily customer sales. The following example uses the
sh sample schema and the three detail tables
products, and
times to create the materialized view.
sales table is partitioned by
time_id column and
products is partitioned by the
prod_id column.
times is not a partitioned table.
Example 10-1 Partition Key
The following is an example:
CREATE MATERIALIZED VIEW LOG ON SALES WITH ROWID (prod_id, time_id, quantity_sold, amount_sold) INCLUDING NEW VALUES; CREATE MATERIALIZED VIEW LOG ON PRODUCTS WITH ROWID (prod_id, prod_name, prod_desc) INCLUDING NEW VALUES; CREATE MATERIALIZED VIEW LOG ON TIMES WITH ROWID (time_id, calendar_month_name, calendar_year) INCLUDING NEW VALUES; CREATE MATERIALIZED VIEW cust_dly_sales_mv BUILD DEFERRED REFRESH FAST ON DEMAND ENABLE QUERY REWRITE AS SELECT s.time_id, p.prod_id, p.prod_name, COUNT(*), SUM(s.quantity_sold), SUM(s.amount_sold), COUNT(s.quantity_sold), COUNT(s.amount_sold) FROM sales s, products p, times t WHERE s.time_id = t.time_id AND s.prod_id = p.prod_id GROUP BY s.time_id, p.prod_id, p.prod_name;
cust_dly_sales_mv, PCT is enabled on both the
sales table and
products table because their respective partitioning key columns
time_id and
prod_id are in the materialized view.
An expression consisting of columns from tables directly or indirectly joined through equijoins to the partitioned detail table on the partitioning key and which is either a dimensional attribute or a dimension hierarchical parent of the joining key is called a join dependent expression. The set of tables in the path to detail table are called join dependent tables. Consider the following:
SELECT s.time_id, t.calendar_month_name FROM sales s, times t WHERE s.time_id = t.time_id;
In this query,
times table is a join dependent table since it is joined to
sales table on the partitioning key column
time_id. Moreover,
calendar_month_name is a dimension hierarchical attribute of
times.time_id, because
calendar_month_name is an attribute of
times.mon_id and
times.mon_id is a dimension hierarchical parent of
times.time_id. Hence, the expression
calendar_month_name from
times tables is a join dependent expression. Let's consider another example:
SELECT s.time_id, y.calendar_year_name FROM sales s, times_d d, times_m m, times_y y WHERE s.time_id = d.time_id AND d.day_id = m.day_id AND m.mon_id = y.mon_id;
times table is denormalized into
times_m and
times_y tables. The expression
calendar_year_name from
times_y table is a join dependent expression and the tables
times_m and
times_y are join dependent tables. This is because
times_y table is joined indirectly through
times_m and
times_d tables to sales table on its partitioning key column
This lets users create materialized views containing aggregates on some level higher than the partitioning key of the detail table. Consider the following example of materialized view storing monthly customer sales.
Example 10-2 Join Dependent Expression
Assuming the presence of materialized view logs defined earlier, the materialized view can be created using the following DDL:
CREATE MATERIALIZED VIEW cust_mth_sales_mv BUILD DEFERRED REFRESH FAST ON DEMAND ENABLE QUERY REWRITE AS SELECT t.calendar_month_name, p.prod_id, p.prod_name, COUNT(*), SUM(s.quantity_sold), SUM(s.amount_sold), COUNT(s.quantity_sold), COUNT(s.amount_sold) FROM sales s, products p, times t WHERE s.time_id = t.time_id AND s.prod_id = p.prod_id GROUP BY t.calendar_month_name, p.prod_id, p.prod_name;
Here, you can correlate a detail table row to its corresponding materialized view row using the join dependent table
times and the relationship that
times.calendar_month_name is a dimensional attribute determined by
times.time_id. This enables partition change tracking on
sales table. In addition to this, PCT is enabled on products table because of presence of its partitioning key column
prod_id in the materialized view.
DBMS_MVIEW.PMARKER function is designed to significantly reduce the cardinality of the materialized view (see Example 10-3 for an example). The function returns a partition identifier that uniquely identifies the partition for a specified row within a specified partition table. Therefore, the
DBMS_MVIEW.PMARKER function is used instead of the partition key column in the
SELECT and
BY clauses.
Unlike the general case of a PL/SQL function in a materialized view, use of the
DBMS_MVIEW.PMARKER does not prevent rewrite with that materialized view even when the rewrite mode is
As an example of using the
PMARKER function, consider calculating a typical number, such as revenue generated by a product category during a given year. If there were 1000 different products sold each month, it would result in 12,000 rows in the materialized view.
Example 10-3 Partition Marker
Consider an example of a materialized view storing the yearly sales revenue for each product category. With approximately hundreds of different products in each product category, including the partitioning key column
prod_id of the
products table in the materialized view would substantially increase the cardinality. Instead, this materialized view uses the
DBMS_MVIEW.PMARKER function, which increases the cardinality of materialized view by a factor of the number of partitions in the
products table.
CREATE MATERIALIZED VIEW prod_yr_sales_mv BUILD DEFERRED REFRESH FAST ON DEMAND ENABLE QUERY REWRITE AS SELECT DBMS_MVIEW.PMARKER(p.rowid), p.prod_category, t.calendar_year, COUNT(*), SUM(s.amount_sold), SUM(s.quantity_sold), COUNT(s.amount_sold), COUNT(s.quantity_sold) FROM sales s, products p, times t WHERE s.time_id = t.time_id AND s.prod_id = p.prod_id GROUP BY DBMS_MVIEW.PMARKER (p.rowid), p.prod_category, t.calendar_year;
prod_yr_sales_mv includes the
DBMS_MVIEW.PMARKER function on the
products table in its
SELECT list. This enables partition change tracking on
products table with significantly less cardinality impact than grouping by the partition key column
prod_id. In this example, the desired level of aggregation for the
prod_yr_sales_mv is to group by
products.prod_category. Using the
DBMS_MVIEW.PMARKER function, the materialized view cardinality is increased only by a factor of the number of partitions in the
products table. This would generally be significantly less than the cardinality impact of including the partition key columns.
Note that partition change tracking is enabled on
sales table because of presence of join dependent expression
calendar_year in the
SELECT list.
A subsequent
INSERT statement adds a new row to the
sales_part3 partition of table
sales. At this point, because
cust_dly_sales_mv has PCT available on table
sales using a partition key, Oracle can identify the stale rows in the materialized view
cust_dly_sales_mv corresponding to
sales_part3 partition (The other rows are unchanged in their freshness state). Query rewrite cannot identify the fresh portion of materialized views
cust_mth_sales_mv and
prod_yr_sales_mv because PCT is available on table sales using join dependent expressions. Query rewrite can determine the fresh portion of a materialized view on changes to a detail table only if PCT is available on the detail table using a partition key or partition marker.
Partitioning a materialized view involves defining the materialized view with the standard Oracle partitioning clauses, as illustrated in the following example. This statement creates a materialized view called
part_sales_mv, which uses three partitions, can be fast refreshed, and is eligible for query rewrite:
CREATE MATERIALIZED VIEW part_sales_mv PARALLEL PARTITION BY RANGE (time_id) (PARTITION month1 VALUES LESS THAN (TO_DATE('31-12-1998', 'DD-MM-YYYY')) PCTFREE 0 STORAGE (INITIAL 8M) TABLESPACE sf1, PARTITION month2 VALUES LESS THAN (TO_DATE('31-12-1999', 'DD-MM-YYYY')) PCTFREE 0 STORAGE (INITIAL 8M) TABLESPACE sf2, PARTITION month3 VALUES LESS THAN (TO_DATE('31-12-2000', 'DD-MM-YYYY')) PCTFREE 0 STORAGE (INITIAL 8M) TABLESPACE sf3) BUILD DEFERRED REFRESH FAST ENABLE QUERY REWRITE AS SELECT s.cust_id, s.time_id, SUM(s.amount_sold) AS sum_dol_sales, SUM(s.quantity_sold) AS sum_unit_sales FROM sales s GROUP BY s.time_id, s.cust_id;
Alternatively, a materialized view can be registered to a partitioned prebuilt table as illustrated in the following example:
CREATE TABLE part_sales_tab_mv(time_id, cust_id, sum_dollar_sales, sum_unit_sale) PARALLEL PARTITION BY RANGE (time_id) (PARTITION month1 VALUES LESS THAN (TO_DATE('31-12-1998', 'DD-MM-YYYY')) PCTFREE 0 STORAGE (INITIAL 8M) TABLESPACE sf1, PARTITION month2 VALUES LESS THAN (TO_DATE('31-12-1999', 'DD-MM-YYYY')) PCTFREE 0 STORAGE (INITIAL 8M) TABLESPACE sf2, PARTITION month3 VALUES LESS THAN (TO_DATE('31-12-2000', 'DD-MM-YYYY')) PCTFREE 0 STORAGE (INITIAL 8M) TABLESPACE sf3) AS SELECT s.time_id, s.cust_id, SUM(s.amount_sold) AS sum_dollar_sales, SUM(s.quantity_sold) AS sum_unit_sales FROM sales s GROUP BY s.time_id, s.cust_id; CREATE MATERIALIZED VIEW part_sales_tab_mv ON PREBUILT TABLE ENABLE QUERY REWRITE AS SELECT s.time_id, s.cust_id, SUM(s.amount_sold) AS sum_dollar_sales, SUM(s.quantity_sold) AS sum_unit_sales FROM sales s GROUP BY s.time_id, s.cust_id;
In this example, the table
part_sales_tab_mv has been partitioned over three months and then the materialized view was registered to use the prebuilt table. This materialized view is eligible for query rewrite because the
REWRITE clause has been included.
When a materialized view is partitioned on the partitioning key column or join dependent expressions of the detail table, it is more efficient to use a
PARTITION statement to remove one or more partitions of the materialized view during refresh and then repopulate the partition with new data. Oracle Database uses this variant of fast refresh (called PCT refresh) with partition truncation if the following conditions are satisfied in addition to other conditions described in "Partition Change Tracking".
The materialized view is partitioned on the partitioning key column or join dependent expressions of the detail table.
If PCT is enabled using either the partitioning key column or join expressions, the materialized view should be range or list partitioned.
PCT refresh is nonatomic.
When a data warehouse or data mart contains a time dimension, it is often desirable to archive the oldest information and then reuse the storage for new information. This is called the rolling window scenario. If the fact tables or materialized views include a time dimension and are horizontally partitioned by the time attribute, then management of rolling materialized views can be reduced to a few fast partition maintenance operations provided the unit of data that is rolled out equals, or is at least aligned with, the range partitions.
If you plan to have rolling materialized views in your data warehouse, you should determine how frequently you plan to perform partition maintenance operations, and you should plan to partition fact tables and materialized views to reduce the amount of system administration overhead required when old data is aged out. An additional consideration is that you might want to use data compression on your infrequently updated partitions.
You are not restricted to using range partitions. For example, a composite partition using both a time value and a key value could result in a good partition solution for your data.
See Chapter 16, "Maintaining the Data Warehouse" for further details regarding
FRESH and for details regarding compression.
This section discusses the concepts used by analytic SQL and how relational databases can handle these types of queries. It also illustrates the best approach for creating materialized views using a common scenario.
While data warehouse environments typically view data in the form of a star schema, for analytical SQL queries, data is held in the form of a hierarchical cube. A hierarchical cube includes the data aggregated along the rollup hierarchy of each of its dimensions and these aggregations are combined across dimensions. It includes the typical set of aggregations needed for business intelligence queries.
Example 10-4 Hierarchical Cube
Consider a sales data set with two dimensions, each of which has a 4-level hierarchy:
Time, which contains (all times), year, quarter, and month.
Product, which contains (all products), division, brand, and item.
This means there are 16 aggregate groups in the hierarchical cube. This is because the four levels of time are multiplied by four levels of product to produce the cube. Table 10-1 shows the four levels of each dimension.
Table 10-1 ROLLUP By Time and Product
|ROLLUP By Time
|ROLLUP By Product
year, quarter, month
division, brand, item
year, quarter
division, brand
all times
all products
Note that as you increase the number of dimensions and levels, the number of groups to calculate increases dramatically. This example involves 16 groups, but if you were to add just two more dimensions with the same number of levels, you would have 4 x 4 x 4 x 4 = 256 different groups. Also, consider that a similar increase in groups occurs if you have multiple hierarchies in your dimensions. For example, the time dimension might have an additional hierarchy of fiscal month rolling up to fiscal quarter and then fiscal year. Handling the explosion of groups has historically been the major challenge in data storage for online analytical processing systems.
Typical online analytical queries slice and dice different parts of the cube comparing aggregations from one level to aggregation from another level. For instance, a query might find sales of the grocery division for the month of January, 2002 and compare them with total sales of the grocery division for all of 2001.
Materialized views with multiple aggregate groups give their best performance for refresh and query rewrite when partitioned appropriately.
PCT refresh in a rolling window scenario requires partitioning at the top level on some level from the time dimension. And, partition pruning for queries rewritten against this materialized view requires partitioning on
GROUPING_ID column. Hence, the most effective partitioning scheme for these materialized views is to use composite partitioning (range-list on (
GROUPING_ID) columns). By partitioning the materialized views this way, you enable:
PCT refresh, thereby improving refresh performance.
Partition pruning: only relevant aggregate groups are accessed, thereby greatly reducing the query processing cost.
If you do not want to use PCT refresh, you can just partition by list on
GROUPING_ID column.
You should consider data compression when using highly redundant data, such as tables with many foreign keys. In particular, materialized views created with the
ROLLUP clause are likely candidates. See Oracle Database SQL Language Reference for data compression syntax and restrictions and "Storage And Table Compression" for details regarding compression.
Oracle Database provides support for materialized views whose defining query involves set operators. Materialized views with set operators can now be created enabled for query rewrite. You can refresh the materialized view using either
COMMIT or
DEMAND refresh.
Fast refresh is supported if the defining query has the
ALL operator at the top level and each query block in the
ALL, meets the requirements of a materialized view with aggregates or materialized view with joins only. Further, the materialized view must include a constant column (known as a
ALL marker) that has a distinct value in each query block, which, in the following example, is columns
1 marker and
2 marker.
See "Restrictions on Fast Refresh on Materialized Views with UNION ALL" for detailed restrictions on fast refresh for materialized views with
The following examples illustrate creation of fast refreshable materialized views involving
Example 10-5 Materialized View Using UNION ALL with Two Join Views
To create a
ALL materialized view with two join views, the materialized view logs must have the rowid column and, in the following example, the
ALL marker is the columns,
1 marker and
2 marker.
CREATE MATERIALIZED VIEW LOG ON sales WITH ROWID; CREATE MATERIALIZED VIEW LOG ON customers WITH ROWID; CREATE MATERIALIZED VIEW unionall_sales_cust_joins_mv REFRESH FAST ON COMMIT ENABLE QUERY REWRITE AS (SELECT c.rowid crid, s.rowid srid, c.cust_id, s.amount_sold, 1 marker FROM sales s, customers c WHERE s.cust_id = c.cust_id AND c.cust_last_name = 'Smith') UNION ALL (SELECT c.rowid crid, s.rowid srid, c.cust_id, s.amount_sold, 2 marker FROM sales s, customers c WHERE s.cust_id = c.cust_id AND c.cust_last_name = 'Brown');
Example 10-6 Materialized View Using UNION ALL with Joins and Aggregates
The following example shows a
ALL of a materialized view with joins and a materialized view with aggregates. A couple of things can be noted in this example. Nulls or constants can be used to ensure that the data types of the corresponding
SELECT list columns match. Also, the
ALL marker column can be a string literal, which is
'Year' umarker,
'Quarter' umarker, or
'Daily' umarker in the following example:
CREATE MATERIALIZED VIEW LOG ON sales WITH ROWID, SEQUENCE (amount_sold, time_id) INCLUDING NEW VALUES; CREATE MATERIALIZED VIEW LOG ON times WITH ROWID, SEQUENCE (time_id, fiscal_year, fiscal_quarter_number, day_number_in_week) INCLUDING NEW VALUES; CREATE MATERIALIZED VIEW unionall_sales_mix_mv REFRESH FAST ON DEMAND AS (SELECT 'Year' umarker, NULL, NULL, t.fiscal_year, SUM(s.amount_sold) amt, COUNT(s.amount_sold), COUNT(*) FROM sales s, times t WHERE s.time_id = t.time_id GROUP BY t.fiscal_year) UNION ALL (SELECT 'Quarter' umarker, NULL, NULL, t.fiscal_quarter_number, SUM(s.amount_sold) amt, COUNT(s.amount_sold), COUNT(*) FROM sales s, times t WHERE s.time_id = t.time_id and t.fiscal_year = 2001 GROUP BY t.fiscal_quarter_number) UNION ALL (SELECT 'Daily' umarker, s.rowid rid, t.rowid rid2, t.day_number_in_week, s.amount_sold amt, 1, 1 FROM sales s, times t WHERE s.time_id = t.time_id AND t.time_id between '01-Jan-01' AND '01-Dec-31');
Models, which�4*� provide array-based computations in SQL, can be used in materialized views. Because the
MODEL clause calculations can be expensive, you may want to use two separate materialized views: one for the model calculations and one for the
BY query. For example, instead of using one, long materialized view, you could create the following materialized views:
CREATE MATERIALIZED VIEW my_groupby_mv REFRESH FAST ENABLE QUERY REWRITE AS SELECT country_name country, prod_name prod, calendar_year year, SUM(amount_sold) sale, COUNT(amount_sold) cnt, COUNT(*) cntstr FROM sales, times, customers, countries, products WHERE sales.time_id = times.time_id AND sales.prod_id = products.prod_id AND sales.cust_id = customers.cust_id AND customers.country_id = countries.country_id GROUP BY country_name, prod_name, calendar_year; CREATE MATERIALIZED VIEW my_model_mv ENABLE QUERY REWRITE AS SELECT country, prod, year, sale, cnt FROM my_groupby_mv MODEL PARTITION BY(country) DIMENSION BY(prod, year) MEASURES(sale s) IGNORE NAV (s['Shorts', 2000] = 0.2 * AVG(s)[CV(), year BETWEEN 1996 AND 1999], s['Kids Pajama', 2000] = 0.5 * AVG(s)[CV(), year BETWEEN 1995 AND 1999], s['Boys Pajama', 2000] = 0.6 * AVG(s)[CV(), year BETWEEN 1994 AND 1999], ... <hundreds of other update rules>);
By using two materialized views, you can incrementally maintain the materialized view
my_groupby_mv. The materialized view
my_model_mv is on a much smaller data set because it is built on
my_groupby_mv and can be maintained by a complete refresh.
Materialized views with models can use complete refresh or PCT refresh only, and are available for partial text query rewrite only.
See Also:Chapter 23, "SQL for Modeling" for further details about model calculations
Dependencies related to materialized views are automatically maintained to ensure correct operation. When a materialized view is created, the materialized view depends on the detail tables referenced in its definition. Any DML operation, such as an
INSERT, or
UPDATE, or DDL operation on any dependency in the materialized view will cause it to become invalid. To revalidate a materialized view, use the
COMPILE statement.
A materialized view is automatically revalidated when it is referenced. In many cases, the materialized view will be successfully and transparently revalidated. However, if a column has been dropped in a table referenced by a materialized view or the owner of the materialized view did not have one of the query rewrite privileges and that privilege has now been granted to the owner, you should use the following statement to revalidate the materialized view:
ALTER MATERIALIZED VIEW mview_name COMPILE;
The state of a materialized view can be checked by querying the data dictionary views
USER_MVIEWS or
ALL_MVIEWS. The column
STALENESS will show one of the values
UNDEFINED, or
NEEDS_COMPILE to indicate whether the materialized view can be used. The state is maintained automatically. However, if the staleness of a materialized view is marked as
NEEDS_COMPILE, you could issue an
COMPILE statement to validate the materialized view and get the correct staleness state. If the state of a materialized view is
UNUSABLE, you must perform a complete refresh to bring the materialized view back to the
FRESH state. If the materialized view is based on a prebuilt table that you never refresh, you must drop and re-create the materialized view. The staleness of remote materialized views is not tracked. Thus, if you use remote materialized views for rewrite, they are considered to be trusted.
To create a materialized view in your own schema, you must have the
VIEW privilege and the
SELECT privilege to any tables referenced that are in another schema. To create a materialized view in another schema, you must have the
VIEW privilege and the owner of the materialized view needs
SELECT privileges to the tables referenced if they are from another schema. Moreover, if you enable query rewrite on a materialized view that references tables outside your schema, you must have the
REWRITE privilege or the
REWRITE object privilege on each table outside your schema.
If the materialized view is on a prebuilt container, the creator, if different from the owner, must have
GRANT privilege on the container table.
If you continue to get a privilege error while trying to create a materialized view and you believe that all the required privileges have been granted, then the problem is most likely due to a privilege not being granted explicitly and trying to inherit the privilege from a role instead. The owner of the materialized view must have explicitly been granted
SELECT access to the referenced tables if the tables are in a different schema.
If the materialized view is being created with
REFRESH specified, then the owner of the materialized view requires an additional privilege if any of the tables in the defining query are outside the owner's schema. In that case, the owner requires the
REFRESH system privilege or the
REFRESH object privilege on each table outside the owner's schema.
For all security concerns, a materialized view serves as a view that happens to be materialized when you are directly querying the materialized view. When creating a view or materialized view, the owner must have the necessary permissions to access the underlying base relations of the view or materialized view that they are creating. With these permissions, the owner can publish a view or materialized view that other users can access, assuming they have been granted access to the view or materialized view.
Using materialized views with Virtual Private Database is similar. When you create a materialized view, there must not be any VPD policies in effect against the base relations of the materialized view for the owner of the materialized view. However, the owner of the materialized view may establish a VPD policy on the new materialized view. Users who access the materialized view are subject to the VPD policy on the materialized view. However, they are not additionally subject to the VPD policies of the underlying base relations of the materialized view, since security processing of the underlying base relations is performed against the owner of the materialized view.
When you access a materialized view using query rewrite, the materialized view serves as an access structure much like an index. As such, the security implications for materialized views accessed in this way are much the same as for indexes: all security checks are performed against the relations specified in the request query. The index or materialized view is used to speed the performance of accessing the data, not provide any additional security checks. Thus, the presence of the index or materialized view presents no additional security checking.
This holds true when you are accessing a materialized view using query rewrite in the presence of VPD. The request query is subject to any VPD policies that are present against the relations specified in the query. Query rewrite may rewrite the query to use a materialize view instead of accessing the detail relations, but only if it can guarantee to deliver exactly the same rows as if the rewrite had not occurred. Specifically, query rewrite must retain and respect any VPD policies against the relations specified in the request query. However, any VPD policies against the materialized view itself do not have effect when the materialized view is accessed using query rewrite. This is because the data is already protected by the VPD policies against the relations in the request query.
Query rewrite does not use its full and partial text match modes with request queries that include relations with active VPD policies, but it does use general rewrite methods. This is because VPD transparently transforms the request query to affect the VPD policy. If query rewrite were to perform a text match transformation against a request query with a VPD policy, the effect would be to negate the VPD policy.
In addition, when you create or refresh a materialized view, the owner of the materialized view must not have any active VPD policies in effect against the base relations of the materialized view, or an error is returned. The materialized view owner must either have no such VPD policies, or any such policy must return
NULL. This is because VPD would transparently modify the defining query of the materialized view such that the set of rows contained by the materialized view would not match the set of rows indicated by the materialized view definition.
One way to work around this restriction yet still create a materialized view containing the desired VPD-specified subset of rows is to create the materialized view in a user account that has no active VPD policies against the detail relations of the materialized view. In addition, you can include a predicate in the
WHERE clause of the materialized view that embodies the effect of the VPD policy. When query rewrite attempts to rewrite a request query that has that VPD policy, it matches up the VPD-generated predicate on the request query with the predicate you directly specify when you create the materialized view.
Six modifications can be made to a materialized view. You can:
Change its refresh option (
Change its refresh mode (
Recompile it.
Enable or disable its use for query rewrite.
Consider it fresh.
Partition maintenance operations.
All other changes are achieved by dropping and then re-creating the materialized view.
COMPILE clause of the
VIEW statement can be used when the materialized view has been invalidated. This compile process is quick, and allows the materialized view to be used by query rewrite again.
See Also:
This chapter discusses extraction, which is the process of taking data from an operational system and moving it to your data warehouse or staging system. The chapter discusses:
Extraction is the operation of extracting data from a source system for further use in a data warehouse environment. This is the first step of the ETL process. After the extraction, this data can be transformed and loaded into the data warehouse.
The source systems for a data warehouse are typically transaction processing applications. For example, one of the source systems for a sales analysis data warehouse might be an order entry system that records all of the current order activities.
Designing and creating the extraction process is often one of the most time-consuming tasks in the ETL process and, indeed, in the entire data warehousing process. The source systems might be very complex and poorly documented, and thus determining which data needs to be extracted can be difficult. The data has to be extracted normally not only once, but several times in a periodic manner to supply all changed data to the data warehouse and keep it up-to-date. Moreover, the source system typically cannot be modified, nor can its performance or availability be adjusted, to accommodate the needs of the data warehouse extraction process.
These are important considerations for extraction and ETL in general. This chapter, however, focuses on the technical considerations of having different kinds of sources and extraction methods. It assumes that the data warehouse team has already identified the data that will be extracted, and discusses common techniques used for extracting data from source databases.
Designing this process means making decisions about the following two main aspects:
Which extraction method do I choose?
This influences the source system, the transportation process, and the time needed for refreshing the warehouse.
How do I provide the extracted data for further processing?
This influences the transportation method, and the need for cleaning and transforming the data.
The extraction method you should choose is highly dependent on the source system and also from the business needs in the target data warehouse environment. Very often, there is no possibility to add additional logic to the source systems to enhance an incremental extraction of data due to the performance or the increased workload of these systems. Sometimes even the customer is not allowed to add anything to an out-of-the-box application system.
There are two types of logical extraction:
The data is extracted completely from the source system. Because this extraction reflects all the data currently available on the source system, there's no need to keep track of changes to the data source since the last successful extraction. The source data will be provided as-is and no additional logical information (for example, timestamps) is necessary on the source site. An example for a full extraction may be an export file of a distinct table or a remote SQL statement scanning the complete source table.
At a specific point in time, only the data that has changed since a well-defined event back in history is extracted. This event may be the last time of extraction or a more complex business event like the last booking day of a fiscal period. To identify this delta change there must be a possibility to identify all the changed information since this specific time event. This information can be either provided by the source data itself such as an application column, reflecting the last-changed timestamp or a change table where an appropriate additional mechanism keeps track of the changes besides the originating transactions. In most cases, using the latter method means adding extraction logic to the source system.
Many data warehouses do not use any change-capture techniques as part of the extraction process. Instead, entire tables from the source systems are extracted to the data warehouse or staging area, and these tables are compared with a previous extract from the source system to identify the changed data. This approach may not have significant impact on the source systems, but it clearly can place a considerable burden on the data warehouse processes, particularly if the data volumes are large.
Oracle's Change Data Capture (CDC) mechanism can extract and maintain such delta information. See Chapter 17, "Change Data Capture" for further details about the Change Data Capture framework.
Depending on the chosen logical extraction method and the capabilities and restrictions on the source side, the extracted data can be physically extracted by two mechanisms. The data can either be extracted online from the source system or from an offline structure. Such an offline structure might already exist or it might be generated by an extraction routine.
There are the following methods of physical extraction:
The data is extracted directly from the source system itself. The extraction process can connect directly to the source system to access the source tables themselves or to an intermediate system that stores the data in a preconfigured manner (for example, snapshot logs or change tables). Note that the intermediate system is not necessarily physically different from the source system.
With online extractions, you must consider whether the distributed transactions are using original source objects or prepared source objects.
The data is not extracted directly from the source system but is staged explicitly outside the original source system. The data already has an existing structure (for example, redo logs, archive logs or transportable tablespaces) or was created by an extraction routine.
You should consider the following structures:
Flat files
Data in a defined, generic format. Additional information about the source object is necessary for further processing.
Dump files
Oracle-specific format. Information about the containing objects may or may not be included, depending on the chosen utility.
Redo and archive logs
Information is in a special, additional dump file.
Transportable tablespaces
A powerful way to extract and move large volumes of data between Oracle databases. A more detailed example of using this feature to extract and transport data is provided in Chapter 14, "Transportation in Data Warehouses". Oracle recommends that you use transportable tablespaces whenever possible, because they can provide considerable advantages in performance and manageability over other extraction techniques.
See Oracle Database Utilities for more information on using export/import.
An important consideration for extraction is incremental extraction, also called Change Data Capture. If a data warehouse extracts data from an operational system on a nightly basis, then the data warehouse requires only the data that has changed since the last extraction (that is, the data that has been modified in the past 24 hours). Change Data Capture is also the key-enabling technology for providing near real-time, or on-time, data warehousing.
When it is possible to efficiently identify and extract only the most recently changed data, the extraction process (and all downstream operations in the ETL process) can be much more efficient, because it must extract a much smaller volume of data. Unfortunately, for many source systems, identifying the recently modified data may be difficult or intrusive to the operation of the system. Change Data Capture is typically the most challenging technical issue in data extraction.
Because change data capture is often desirable as part of the extraction process and it might not be possible to use the Change Data Capture mechanism, this section describes several techniques for implementing a self-developed change capture on Oracle Database source systems:
These techniques are based upon the characteristics of the source systems, or may require modifications to the source systems. Thus, each of these techniques must be carefully evaluated by the owners of the source system prior to implementation.
Each of these techniques can work in conjunction with the data extraction technique discussed previously. For example, timestamps can be used whether the data is being unloaded to a file or accessed through a distributed query. See Chapter 17, "Change Data Capture" for further details.
The tables in some operational systems have timestamp columns. The timestamp specifies the time and date that a given row was last modified. If the tables in an operational system have columns containing timestamps, then the latest data can easily be identified using the timestamp columns. For example, the following query might be useful for extracting today's data from an
orders table:
SELECT * FROM orders WHERE TRUNC(CAST(order_date AS date),'dd') = TO_DATE(SYSDATE,'dd-mon-yyyy');
If the timestamp information is not available in an operational source system, you are not always able to modify the system to include timestamps. Such modification would require, first, modifying the operational system's tables to include a new timestamp column and then creating a trigger to update the timestamp column following every operation that modifies a given row.
Some source systems might use range partitioning, such that the source tables are partitioned along a date key, which allows for easy identification of new data. For example, if you are extracting from an
orders table, and the
orders table is partitioned by week, then it is easy to identify the current week's data.
Triggers can be created in operational systems to keep track of recently updated records. They can then be used in conjunction with timestamp columns to identify the exact time and date when a given row was last modified. You do this by creating a trigger on each source table that requires change data capture. Following each DML statement that is executed on the source table, this trigger updates the timestamp column with the current time. Thus, the timestamp column provides the exact time and date when a given row was last modified.
A similar internalized trigger-based technique is used for Oracle materialized view logs. These logs are used by materialized views to identify changed data, and these logs are accessible to end users. However, the format of the materialized view logs is not documented and might change over time.
If you want to use a trigger-based mechanism, use synchronous change data capture. It is recommended that you use synchronous Change Data Capture for trigger based change capture, because CDC provides an externalized interface for accessing the change information and provides a framework for maintaining the distribution of this information to various clients.
Materialized view logs rely on triggers, but they provide an advantage in that the creation and maintenance of this change-data system is largely managed by the database.
However, Oracle recommends the usage of synchronous Change Data Capture for trigger-based change capture, since CDC provides an externalized interface for accessing the change information and provides a framework for maintaining the distribution of this information to various clients
Trigger-based techniques might affect performance on the source systems, and this impact should be carefully considered prior to implementation on a production source system.
You can extract data in two ways:
Most database systems provide mechanisms for exporting or unloading data from the internal database format into flat files. Extracts from mainframe systems often use COBOL programs, but many databases, and third-party software vendors, provide export or unload utilities.
Data extraction does not necessarily mean that entire database structures are unloaded in flat files. In many cases, it may be appropriate to unload entire database tables or objects. In other cases, it may be more appropriate to unload only a subset of a given table such as the changes on the source system since the last extraction or the results of joining multiple tables together. Different extraction techniques vary in their capabilities to support these two scenarios.
When the source system is an Oracle database, several alternatives are available for extracting data into files:
The most basic technique for extracting data is to execute a SQL query in SQL*Plus and direct the output of the query to a file. For example, to extract a flat file,
country_city.log, with the pipe sign as delimiter between column values, containing a list of the cities in the US in the tables
countries and
customers, the following SQL script could be run:
SET echo off SET pagesize 0 SPOOL country_city.log SELECT distinct t1.country_name ||'|'|| t2.cust_city FROM countries t1, customers t2 WHERE t1.country_id = t2.country_id AND t1.country_name= 'United States of America'; SPOOL off
The exact format of the output file can be specified using SQL*Plus system variables.
This extraction technique offers the advantage of storing the result in a customized format. Note that, using the external table data pump unload facility, you can also extract the result of an arbitrary SQL operation. The example previously extracts the results of a join.
This extraction technique can be parallelized by initiating multiple, concurrent SQL*Plus sessions, each session running a separate query representing a different portion of the data to be extracted. For example, suppose that you wish to extract data from an
orders table, and that the
orders table has been range partitioned by month, with partitions
orders_feb1998, and so on. To extract a single year of data from the
orders table, you could initiate 12 concurrent SQL*Plus sessions, each extracting a single partition. The SQL script for one such session could be:
SPOOL order_jan.dat SELECT * FROM orders PARTITION (orders_jan1998); SPOOL OFF
These 12 SQL*Plus processes would concurrently spool data to 12 separate files. You can then concatenate them if necessary (using operating system utilities) following the extraction. If you are planning to use SQL*Loader for loading into the target, these 12 files can be used as is for a parallel load with 12 SQL*Loader sessions. See Chapter 14, "Transportation in Data Warehouses" for an example.
Even if the
orders table is not partitioned, it is still possible to parallelize the extraction either based on logical or physical criteria. The logical method is based on logical ranges of column values, for example:
SELECT ... WHERE order_date BETWEEN TO_DATE('01-JAN-99') AND TO_DATE('31-JAN-99');
The physical method is based on a range of values. By viewing the data dictionary, it is possible to identify the Oracle Database data blocks that make up the
orders table. Using this information, you could then derive a set of rowid-range queries for extracting data from the
orders table:
SELECT * FROM orders WHERE rowid BETWEEN value1 and value2;
Parallelizing the extraction of complex SQL queries is sometimes possible, although the process of breaking a single complex query into multiple components can be challenging. In particular, the coordination of independent processes to guarantee a globally consistent view can be difficult. Unlike the SQL*Plus approach, using the external table data pump unload functionality provides transparent parallel capabilities.
Note that all parallel techniques can use considerably more CPU and I/O resources on the source system, and the impact on the source system should be evaluated before parallelizing any extraction technique.
OCI programs (or other programs using Oracle call interfaces, such as Pro*C programs), can also be used to extract data. These techniques typically provide improved performance over the SQL*Plus approach, although they also require additional programming. Like the SQL*Plus approach, an OCI program can extract the results of any SQL query. Furthermore, the parallelization techniques described for the SQL*Plus approach can be readily applied to OCI programs as well.
When using OCI or SQL*Plus for extraction, you need additional information besides the data itself. At minimum, you need information about the extracted columns. It is also helpful to know the extraction format, which might be the separator between distinct columns.
The Export utility allows tables (including data) to be exported into Oracle Database export files. Unlike the SQL*Plus and OCI approaches, which describe the extraction of the results of a SQL statement, Export provides a mechanism for extracting database objects. Thus, Export differs from the previous approaches in several important ways:
The export files contain metadata as well as data. An export file contains not only the raw data of a table, but also information on how to re-create the table, potentially including any indexes, constraints, grants, and other attributes associated with that table.
A single export file may contain a subset of a single object, many database objects, or even an entire schema.
Export cannot be directly used to export the results of a complex SQL query. Export can be used only to extract subsets of distinct database objects.
The output of the Export utility must be processed using the Import utility.
Oracle provides the original Export and Import utilities for backward compatibility and the data pump export/import infrastructure for high-performant, scalable and parallel extraction. See Oracle Database Utilities for further details.
In addition to the Export Utility, you can use external tables to extract the results from any
SELECT operation. The data is stored in the platform independent, Oracle-internal data pump format and can be processed as regular external table on the target system. The following example extracts the result of a join operation in parallel into the four specified files. The only allowed external table type for extracting data is the Oracle-internal format
CREATE DIRECTORY def_dir AS '/net/dlsun48/private/hbaer/WORK/FEATURES/et'; DROP TABLE extract_cust; CREATE TABLE extract_cust ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY def_dir ACCESS PARAMETERS (NOBADFILE NOLOGFILE) LOCATION ('extract_cust1.exp', 'extract_cust2.exp', 'extract_cust3.exp', 'extract_cust4.exp')) PARALLEL 4 REJECT LIMIT UNLIMITED AS SELECT c.*, co.country_name, co.country_subregion, co.country_region FROM customers c, countries co where co.country_id=c.country_id;
The total number of extraction files specified limits the maximum degree of parallelism for the write operation. Note that the parallelizing of the extraction does not automatically parallelize the
SELECT portion of the statement.
Unlike using any kind of export/import, the metadata for the external table is not part of the created files when using the external table data pump unload. To extract the appropriate metadata for the external table, use the
DBMS_METADATA package, as illustrated in the following statement:
Using distributed-query technology, one Oracle database can directly query tables located in various different source systems, such as another Oracle database or a legacy system connected with the Oracle gateway technology. Specifically, a data warehouse or staging database can directly access tables and data located in a connected source system. Gateways are another form of distributed-query technology. Gateways allow an Oracle database (such as a data warehouse) to access database tables stored in remote, non-Oracle databases. This is the simplest method for moving data between two Oracle databases because it combines the extraction and transformation into a single step, and requires minimal programming. However, this is not always feasible.
Suppose that you wanted to extract a list of employee names with department names from a source database and store this data into the data warehouse. Using an Oracle Net connection and distributed-query technology, this can be achieved using a single SQL statement:
CREATE TABLE country_city AS SELECT distinct t1.country_name, t2.cust_city FROM countries@source_db t1, customers@source_db t2 WHERE t1.country_id = t2.country_id AND t1.country_name='United States of America';
This statement creates a local table in a data mart,
country_city, and populates it with data from the
countries and
customers tables on the source system.
This technique is ideal for moving small volumes of data. However, the data is transported from the source system to the data warehouse through a single Oracle Net connection. Thus, the scalability of this technique is limited. For larger data volumes, file-based data extraction and transportation techniques are often more scalable and thus more appropriate.
See Also:
Data Warehousing Guide
11g Release 2 (11.2)
July 2013
Oracle Database Data Warehousing Guide, 11g Release 2 (11.2)
Copyright © 2001, 2013, Oracle and/or its affiliates. All rights reserved.
Primary Author: Paul Lane
Contributor: Patrick Amor, Hermann Baer, Mark Bauer, Subhransu Basu, Srikanth Bellamkonda, Randy Bello, Paula Bingham, Tolga Bozkaya, Lucy Burgess, Donna Carver, Rushan Chen, Benoit Dageville, John Haydu, Lilian Hobbs, Hakan Jakobsson, George Lumpkin, Alex Melidis, Valarie Moore, Cetin Ozbutun, Ananth Raghavan, Jack Raitto, Ray Roccaforte, Sankar Subramanian, Gregory Smith, Margaret Taft, Murali Thiyagarajan, Ashish Thusoo, Thomas Tong, Mark Van de Wiel, Jean-Francois Verrier, Gary Vincent, Andreas Walter, Andy Witkowski, Min Xiao, Tsae-Feng Yu
This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.
The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.
If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable:
U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle USA, Inc., 500 Oracle Parkway, Redwood City, CA 94065.
This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
This software and documentation may provide access to or information on content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services.


text:
33 years of experience
3380 Reservoir Oval E
Bronx, NY 10467 Phone number & directions
A medical license is required for a doctor to practice medicine in a particular state. Requirements vary by state but most require, at a minimum, post-graduate training in the doctor's specific specialty. An NPI number is a national identifier unique to an individual health care provider and is managed by the Center for Medicare & Medicaid Services (CMS).
Learn more about Dr. Lynne Reitman:
View the full profile to get information on:
- Qualifications
- What's important to you
View full profile
Patient Reviews
Write a Review
Prepare before visiting Dr. Reitman
Bipolar Disorder Patient Education Learn all about symptoms, treatments and medications of bipolar disorder by reading our BD patient education guide.Before Visiting Dr. Reitman Learn More
|More Patient Guides & Topics
ADHD in Adults
Erectile Dysfunction
Major Depressive Disorder
Specialties & Research
Dr. Lynne Reitman, MD is board certified in Psychiatry.
- She has special expertise in 7 areas:
- Attention Deficit Disorder (ADD) / Attention Deficit Hyperactivity Disorder (ADHD)
- Bipolar Disorder / Manic Depressive Disorder
- Depression
- Depressive Disorder
- Insomnia
- Schizophrenia
- Sleep Disorders
Education & Awards
Dr. Reitman graduated from Stony Brook University.
Dr. Reitman has 3 hospital affiliations:
- Montefiore Medical Center: Moses Division
- Children's Hospital at Montefiore Medical Center
- Montefiore Medical Center: Weiler Division
Similar doctors nearby
Dr. Tanya Azarani
Dr. Ruben Gonzalez
Dr. Ching-Yi Tan
Dr. Susan Weinstein
Dr. Adam Silberman
Dr. Shreya Nagula
- Additional Information
- Dr. Lynne Reitman MD is a female Psychiatrist, has 33 years of experience and practices in Psychiatry.
- Where does Dr. Lynne Reitman practice?
- Dr. Lynne Reitman has 7 office locations.
Dr. Lynne Reitman practices Psychiatry near Bronx, NY.
See Bronx Psychiatrists.

subset: commoncrawl


text:
Top Definition
Oh my god, last night I saw my first UniCock. It was so amazing I had to take a moment to appreciate its beauty.
di SalaciousB 20 febbraio 2015
Trending Now
Can you define these popular missing words?
my friend has a unicock!! EWWWWWW
di ikillunicorns 07 maggio 2011


text:
Search this Blog
Wright State University Libraries' Special Collections and Archives welcomes you to our blog. Join us as we share information, news, and special events; highlight our collections; and discuss archival issues. For more information:
* Visit our website
* Email us
* Visit us on the fourth floor of Dunbar Library
Subscribe to Blog via EmailReceive an email notification when a new post is available.
Follow me on TwitterMy Tweets
Recent Posts
- Sarah Byrn Rickman to speak about WASPs on Oct 3
- David McCullough in new video 'applauds' efforts to save Wright factory
- Sept. 12: Upcoming Talk on Pulitzer Air Races, American Aviation and Speed Supremacy, 1920-1925
- Archives receives PROPS Award from NAHA
- Save the Date: Wright Brothers Aero Carnival, Sept. 10, 2016
- Lorenz Publishing Company's Female Editor
- Dan Patterson to speak at Huffman Prairie Aviation History Society, Aug. 1
- In Memoriam: Dr. Lewis K. Shupe
- We're hiring! Archivist/Reference and Outreach
- Upcoming Talk on Aeronautics in the Civil War
Blog Calendar
Tag Archives: 1st OVI
"Going home not as strong"
In this August 7, 1864 letter, William Patterson reports to his mother that he is getting better each day, but is still not well enough to join his regiment in Chattanooga. The 1st OVI has been relieved of duty at the front … Continue reading
William Moves from Hospital
In this July 24, 1864 letter to his mother, William Patterson reports that he has moved to a boarding housed in Nashville and has been detailed to a General Court Martial board. The letter notes that he will likely remain in … Continue reading
Posted in Civil War, Patterson Family, SC&A Tagged 1st Ohio Volunteer Infantry, 1st OVI, Civil War, MS-236, Patterson, Patterson family, William Patterson Leave a comment
1st OVI Mustering Out
Beginning in mid-to-late July, the 1st OVI was ordered to the rear to begin being mustered out due to expiration of term of service (3 years). The regiment was mustered out by company with the first companies mustered out on August 1, … Continue reading


text:
Asheville Gunsmith School
Carolina Guns & Gear
3106 Sweeten Creek Rd, Asheville, NC 28803
- (828) 348-1384
Train for Success
Get The Tech Skills You Need For A
Rewarding Career. Train At UTI.
Microsoft Store
10% Student Discount
For All Students, Parents & Faculty
1. Asheville-Buncombe Technical Community College
340 Victoria RdAsheville, NC 28801
From Business: Asheville-Buncombe Technical Community college (A-B Tech) celebrates its 50th anniversary September 1, 2009. Established as an Industrial Education Center, A-B Tech…
2. Carolina Guns & Gear
Bought my 1st pistol a few days ago. They answered my noob questions without making me feel stupid. Came back a few days later for a holster, and ag…
3. Leicester Pawn & Gun Shop
I purchased a pistol from them. They were nothing but professional. Great selection of guns and very knowledgeable. They had the best prices I have …
4. Alan's Jewelry & Pawn
Love them, excellent, fast and very friendly service I have had several pawns with them over the years as well as a few layaways.... I highly recomm…
5. Franklin's Outdoor Sports Inc
Well, I coordinated my FFL transfer and requested that he let me open the package upon my arrival. Instead he went ahead and opened it and I can sa…
6. Blue Ridge Montessori School
Wonderful traditional Montessori Preschool in North Asheville. Ms. Gayle has her M.Ed. in Early Childhood Montessori Education, has over 15 years o…
7. On Target Shooting Range Inc
Friendly staff, and nice range. There's a good selection of guns and accessories as well. Go check them out.
8. Providence Christian Academy
Your child is going to love it here! The teachers truly care about the individual student's needs in every way. The school offers early morning care…
9. Rainbow Mtn School
This is a place where my children feel exceptionally valued and safe. The teachers are wonderfully warm and caring. The school has undergone major…
10. South University
140 Sweeten Creek RdAsheville, NC 28803
This phone number is for a fax machine and is not the number to the receptionist. The real number is 828-252-2486
11. Evergreen Community Charter School Special Services
My child was bullied physically and emotionally for years at this school which is so widely admired and respected within the community. Rather than …
12. Arden Reading Clinic
383 1 Weaverville HighwayAsheville, NC 28804
From Business: Arden Reading Clinic is well-known as a full-service tutorial which specializes in teaching students with learning differences. Differences among all students vary …
13. Beverly Hills Baptist Church
777 Tunnel RdAsheville, NC 28805
14. Finkelstein's Inc
21 Broadway StAsheville, NC 28801
From Business: If you have unwanted jewelry, or need some extra cash, contact the professional pawn brokers at Finkelstein's. We are a pawn shop in Asheville, NC offering the larg…
15. Asheville School
360 Asheville School RdAsheville, NC 28806
From Business: Asheville School offers various extracurricular activities and programs for students. It offers an extensive curriculum that includes English, mathematics, science,…
16. His Kids Childcare Center
48 Woodland Hills RdAsheville, NC 28804
From Business: Carolina Christian School exists to provide a quality education based on a Christian worldview. Carolina Christian School offers a college preparatory curriculum fo…
17. ResCare HomeCare
Asheville, NC 28804
From Business: ResCare HomeCare provides personalized non-medical home care services to people of all ages, physical conditions and cognitive abilities. We offer quality in-home s…
18. Asheville TEACCH Center
162 Coxe AveAsheville, NC 28801
19. Central Weekday School
27 Church StAsheville, NC 28801
20. Asheville Music School
101 S Lexington AveAsheville, NC 28801
21. Pre-School Satellite Program For The Hearing Impaired
46 Haywood StAsheville, NC 28801
22. Lenoir-Rhyne University
36 Montford AveAsheville, NC 28801
23. St Timothy's School
1 N Pack SqAsheville, NC 28801
24. Elementry School Cafeteria Isaac Dickson
90 Montford AveAsheville, NC 28801
25. Bun County Schools Maintenance
167 Craven StAsheville, NC 28806
26. Child Kingdom Montessori
106 Westgate PkwyAsheville, NC 28806
27. ResCare HomeCare
40 Merrimon AveAsheville, NC 28801
28. Mind Of Christ Academy
143 Waynesville AveAsheville, NC 28806
29. French Broad River Academy Inc
191 Lyman St # 316Asheville, NC 28801
30. Asheville Superintendents Ofc
85 Mountain StAsheville, NC 28801
Train for Success
Get The Tech Skills You Need For A
Rewarding Career. Train At UTI.
Microsoft Store
10% Student Discount
For All Students, Parents & Faculty


text:
Patrick S. Naggar is the artist choosen by Christine Degraeve for the next edition of Mélanges at blank. Invitations have arrived. Opening on the 7th of November 2013.
Visit facebook for more informations.
TALES is the name of a new bar in Brussels. We were involved since the early stage of the project so we did practically everything.
VisitBrussels, the tourist info agency in Brussels asked us to create a souvenir for Brussel's giftshops. Brussels having a high rain level, we found that a raincoat was the most useful object a tourist can bear around the streets of Brussels.


text:
Audreys are always stunningly gorgeous. She can be bossy at times but that can be a good thing. She always knows what to say and will stand up for her friends. She's hardcore and is usually the one to start a statement. Her friends are girls AND boys and she treats them all equally. She can usually find herself falling back in love with the same person she once fell in love with. She just wants to find the right guy. When it comes to music her taste is off the charts! And her clothes are always gonna make you turn your head and look with awe. Shes thin but her butt and thighs are to die for. Every girl wishes she was an Audrey.
Guy1: Woah I think I'm in love.
Guy2: Seriously? With who?
Guy1: Audrey, I couldn't stop staring at her!
Guy2: Hey there calm down!
Guy1: Do you think she'd ever fall for me?
Guy2: I think she'd fall for you twice.
Audrey: Hi guys.
Guy1: I love you Audrey!
Audrey: I-I love you too.
Guy2: Seriously? With who?
Guy1: Audrey, I couldn't stop staring at her!
Guy2: Hey there calm down!
Guy1: Do you think she'd ever fall for me?
Guy2: I think she'd fall for you twice.
Audrey: Hi guys.
Guy1: I love you Audrey!
Audrey: I-I love you too.
by Scarecrow44 December 05, 2010
audrey is a a beautiful, seemingly confident girl. she has a good sense of humor, an adorable smile, and beautiful big eyes. she flirts shameless and is usually called a tease. she can be a goofball and is really sarcastic. has a bit of an attitude if she's mad at you. she's got a rockin' body and a sweet ass. boys want to get with her but never really understand her. on the inside, she is actually a little self-conscious, has only really loved one guy who broke her heart, is secretly afraid of commitment, puts up walls so that people can't know the real her. she has lots of friends and is athletic too. she's smart, chill, and always down to party. doesn't trust easily and says whatevers on her mind. audrey is the kind of girl who just wants someone to love her back, but never believes them if they do. she's a amazing girl who everyone wants to be around.
Audrey is defiantly someone i'd wanna chill with.
by bossman3 March 27, 2010
Audrey is your best friend. She will be at your side through thick and thin, and once you are best friends with Audrey you are friends forever. Audrey is a beautiful person inside and out. She is tall with hips TO DIE FOR!! Not to mention her sweet ass which everyone is jealous of. She knows how to hold everyone captivated when she talks and will always say the right thing. Anything Audrey says will be worth listening to. Audrey loves exploring, especially in forests. When it's party night with the gals, you can bet Audrey will be the life of the party! She is very good at hiding her feelings and will put others before herself ALWAYS!
Girl: I'm so upset lately, I don't know what to do..
Audrey: Don't worry, I will always be here for you. Count on my for anything
Girl: :)
Audrey: Don't worry, I will always be here for you. Count on my for anything
Girl: :)
by Not Audrey May 14, 2013
a girl who will listen to everything you have to say. she'll remember it too. she has a good heart but she thinks shes a bitch she's sarcastic and funny but sometimes she has her downs. when shes down she doesn't want anyone to know so she hides it for the sake of her family and friends. she's reliable and will do anything to help people out. if she's upset, she will close herself out from the rest of the world hoping people will leave her be. she doesn't want anyone to worry about her and she doesn't want to be pitied. She's constantly building walls up so no one can break in. Unfortunately, her walls break easily. When she tells you she cried or if you see her cry, you know she's at her weakest. The one time she believed in love, her heart broke... and she'll call you up to cry and tell you how stupid she is. Audrey is a girl who will go through so much but get through it for the sake of everyone else around her. She is much loved.
That girl right there, she's an Audrey.
by headrick September 07, 2010
Most beautiful and amazing girl you will ever meet. She has the cutest smile and the bluest, breathtaking eyes. A girl you will talk on the phone with for hours and you will never get bored, and when you're with her you your heart will race. She likes Jack Johnson and she listens to Pandora before she goes to bed. When she's around, you feel like you've never felt before. She is everything you could ever want in a girl and you love her with all your heart.
The girl I'm dating is just like an Audrey!
by jacobs7 December 28, 2011
The most beautiful girl ever. she has many talents and knows how to make you laugh! When you seen her you just want to be with her. She's the life of the party and when it comes to guys she gets them all ;)
You know your a winner when you have an Audrey!
by PRNCVACAAZ November 10, 2012
That girl that is very intelegent and really awesome. Everyone wants to talk to her and be her friend. She would be a great wife and will have many children. She is the fire in your heart and the light at the end of the tunnel. She likes pick up lines and can be a little shy. But he can open up to be the most beautiful personin the world.
Michael: Audrey, I like you a lot. Will you be mine?
Audrey: (insert answer here)
Audrey: (insert answer here)
by Wardog1207 April 08, 2012


text:
Android App
This project received 62 bids from talented freelancers with an average bid price of $678 USD.Get free quotes for a project like this
Skills Required
Project Budget$250 - $750 USD
Total Bids62
Project Description
I need to rewrite and upgrade an already existing hotel search app for android (I just have the apk...not sources)
i need to rewrite it because now is just a browser widget. i would like to have a self browsing app.
i need to put also an admob banner in the bottom
I need also warranty bug free assistance for one year
thank you
Looking to make some money?
- Set your budget and the timeframe
- Outline your proposal
- Get paid for your work
Hire Freelancers who also bid on this project
Looking for work?
Work on projects like this and make money from home!Sign Up Now
- Forbes
- The New York Times
- Time
- Wall Street Journal
- Times Online


text:
Many thanks to Anto Morra for the b@w video of a particularly dark song!
Thanks to all of those singing at Horatio's Bar and for the warm welcome they gave us on Saturday and Sunday
© 2016 eMinor Incorporated
All third party trademarks are the property of the respective trademark owners. ReverbNation is not affiliated with those trademark owners.
Not listening to anything?
Try one of the ReverbNation Channels


text:
ER and Emergency Services in Irving
Las Colinas Medical Center is here to help you with any medical emergency situation, ranging from minor injuries to life-threatening events. The department is open 24 hours a day, seven days a week.
With years of experience caring for families in the Dallas/Fort Worth area, our board certified emergency physicians and nurses offer top quality healthcare, advanced technology, and up-to-the-minute knowledge available to manage critical conditions. Our emergency room is well equipped to limit wait times and quickly get you the care you need.
Our team of professionals, who provide the fastest throughput of any emergency room in the area, ensure:
- triage, immediate bedding, and bedside registration.
- collaboration between physicians, nurses, and support staff.
- treatment of your illness or injury from minor to critical.
- state-of-the-art testing and diagnostics, including point of care technology.
- rapid treatment decisions leading to discharge or admission.
Know the Signs and Symptoms of Heart Attack & Stroke
When you know the signs and symptoms of heart attack and stroke, you are able to get the life-saving emergency care as soon as possible. If you find yourself experiencing these symptoms or think you might be having a heart attack or stroke, your first priority should be to call 911. Receiving fast emergency care gives you the best chance at survival and recovery.
According to the Director of the Emergency Department at LCMC, "Every second counts when it comes to treating a heart attack-time is muscle! This is the most important step in providing the highest quality care when treating cardiac patients." We are proud to be a Cycle II accredited Chest Pain Center. Las Colinas Medical Center has demonstrated its expertise and commitment to cardiac care by meeting or exceeding criteria for chest pain centers and boasts an average door to balloon time of 54 minutes—well below the national average of 90 minutes.
Watch the video below to learn more about the signs and symptoms of heart attack and stroke.
When to Visit the Emergency Room
Watch the video below to learn more about when to go to the emergency room with a possible sprain or fracture and how to stabilize the injury before you leave for the ER.
When should you take a baby or child with a fever or nausea, diarrhea, and vomiting to the emergency room? It is always a good idea to check for other symptoms and consult with your pediatrician as well as trust your instincts as a parent. Specially trained emergency pediatric staff at Las Colinas Medical Center can help determine severity, underlying causes, and treatment options for your child's symptoms. Watch the videos below and visit http://fastertx.com/ to learn more.
When should an adult with a severe headache visit the emergency room? Headaches can be symptoms of more severe underlying conditions and are taken very seriously by professionals at Las Colinas Medical Center. Check for other related symptoms, such as nausea, dizziness, or vomiting, and go to the emergency room or call 911 to be evaluated immediately. Watch the video below to learn more.


text:
Data Provided by Pollstar
Review: Nothing Can Stop THE MAGNIFICENT SEVEN, Except the Script
TV/MOVIES - PHOTOS: Cast of WILL & GRACE Together Again; Reunion Show in the Works?
ART - MOA Announces New Exhibitions to Museum
FITNESS - Amie Valpone Hosts Retreat, EATING CLEAN: THE 21-DAY PLAN TO DETOX, FIGHT INFLAMMATION, AND RESET YOUR BODY
MUSIC - The Pennsylvania Blues Festival Marks its 25th Anniversary in Style!
CLASSICAL - Las Vegas Philharmonic Presents a Symphonic Spectacular
OPERA - Photo Flash: First Look at Guerilla Opera's LOOSE, WET, PERFORATED
DANCE - Texas Performing Arts Essential Series Presents GRUPO CORPO
BROADWAY - Molly Ringwald to Lead TERMS OF ENDEARMENT Off-Broadway This Fall


text:
Find. Book. Pitchup.
- We make it a doddle to book campsites, glamping sites and caravan parks throughout the UK, Europe and the Americas.
- Trusted by over 1m holidaymakers from 99 countries
- Choose and book in minutes, with instant confirmation and no booking fees.
1 bookable site in Blarney
Blarney Caravan and Camping Park
Blarney, Co. Cork, Republic of Ireland Show on map
|Non-electric grass pitch
|4 x
|From £18.94/€22/A$32.13/US$24.69/CA$32.28/CHF23.98/kr212.07/kr164.67/kr198.30/kr2,827/$381.04/$15,781/PEN83.28/NZ$33.88/R336.97/zł94.78/R$79.60/Kč595.52/RSD2,705 per night
|Electric hardstanding pitch
|4 x
|From £21.52/€25/A$36.51/US$28.06/CA$36.68/CHF27.25/kr240.99/kr187.13/kr225.34/kr3,212/$433/$17,933/PEN94.63/NZ$38.50/R382.92/zł107.71/R$90.46/Kč676.73/RSD3,074 per night


text:
A pretty invitation for your pretty party!
Our exclusive Pretty Pony Vertical Invitations has a pretty design of purple, yellow and blue stripes with pink heart and flower accents. Best of all, these invitations can be personalized with your own custom text and color to match your party. Each 6 1/2 inch long x 3 1/4 inch wide Personalized Pretty Pony Vertical Invitation is printed on heavy paper and includes white envelope for mailing. Your party guests won't be able to resist coming to your party when they open these one of a kind invitations.
Please allow ample time for delivery. Our ship date for this product is noted in your shopping cart. Many items are shipped separately, so please allow extra time for these items to arrive. Shipping charges are based on the value of the merchandise and not the number of shipments. For additional shipping information, please contact our Customer Service Department at (email@example.com or 1-800-314-8794).


text:
Eddie Vedder
Rihanna Rocked Central Park, Chris Martin Covered Prince – and the Other Top Moments from Global Citizen Festival
Originally posted 09/26/2016 11:30AM
A-listers and world leaders alike descended upon Central Park Saturday for the 2016 Global Citizen Festival – and PEOPLE had a front-row seat!
Rihanna, Kendrick Lamar, Selena Gomez and More to Headline Star-Studded 2016 Global Citizen Festival
Originally posted 07/26/2016 07:00AM
The 2016 Global Citizen Festival is shaping up to be the most star-studded yet.
Eddie Vedder Gives Emotional Farewell Serenade to David Letterman: Watch Him Sing 'Better Man' (VIDEO)
Originally posted 05/19/2015 07:10AM
"We couldn't be happier to have him back here with us tonight," Letterman said.
Eric Clapton, Bruce Springsteen, Kanye West & More at 12-12-12 Sandy Relief Concert
Originally posted 12/12/2012 06:30PM
It's time for a concert for a great cause.
On Wednesday at 7:30 p.m., musicians including Bruce Springsteen, Paul McCartney, Alicia Keys and Kanye West took the stage at Madison Square Garden for the 12-12-12 Concert for Sandy Relief.
The concert raised money to benefit those affected by the superstorm in New York, New Jersey and Connecticut.
PHOTO: Eddie Vedder Dips and Kisses His Bride
Originally posted 09/22/2010 06:25PM
What a kiss!
Rocker Eddie Vedder and model Jill McCormick wed in a romantic ceremony in Oahu over the weekend. The Pearl Jam singer, 45, then took his bride, 32, for a twirl on the sand for their official wedding photo.
The couple – who are parents to daughters Olivia, 6, and Harper, 2 – were married Saturday in front of friends including Sean Penn, Jack Johnson, Tim Robbins, Laird Hamilton and Gabrielle Reece. – Marisa Laudadio
Eddie Vedder: Fatherhood 'Fueled My Anger' About World
Originally posted 09/19/2007 09:00AM
Alternative-rock icon Eddie Vedder spearheaded a '90s Seattle musical sound around adolescent angst. Now a 40-something father of a toddler, Vedder says he hasn't mellowed.
The most buzzed about stars this minute!
Treat Yourself! 4 Preview Issues
More On PEOPLE.com
Got a News Tip?
Send it to our People.com editors!
News Archive


text:
Trojan Family Magazine celebrates USC Thornton in a brand new photo feature.explore
Upcoming events
Music@RushHour - Classical Guitar
Keeping with tradition, the first Music@RushHour concert of the semester will showcase an international lineup of performers from the studios of William Kanengiser and Scott Tennant of Thornton's renowned Classical Guitar program. Following a rousing overture, the concert will revolve around the performance of three major works for guitar: the sonatas of Leo Brouwer, Mario Castelnuovo-Tedesco, and Alberto Ginastera. Don't miss it!
Ramo Recital Hall (BMH)
Faculty Recital: Antoinette Perry, Michele Zukovsky, James Walker & Ben Hong
Pianist Antoinette Perry will be joined by faculty members Michele Zukovsky, clarinet, James Walker, flute, and Ben Hong, cello, in a wide-ranging chamber music recital. The program will include Beethoven's Bagatelles, Op. 119 for piano; Mieczyslaw Weinberg's Clarinet Sonata, Op. 28; Jon Kimura Parker's Pan Dreams for flute and piano; and Brahms' Clarinet Trio, Op. 114.
Newman Recital Hall (AHF)
Jazz Night
Students from Thornton's Jazz Studies department present an evening of contemporary jazz as part of an ongoing series. For parking & directions, visit: https://music.usc.edu/map/
Ground Zero Performance Cafe (TRO)
Chamber Music Masterclass with Arnold Steinhardt
Arnold Steinhardt, first violinist of the Guarneri Quartet, presents a chamber music masterclass.
MacDonald Recital Hall (MUS)
Thornton Edge
Donald Crockett leads the Thornton Edge new music ensemble in a program of contemporary works by distinguished British and American composers. The performance will feature Sean Friar's Short Winds, Harrison Birtwistle's Carmen arcadiae mechanicae perpetuum, Breakfast Rhythms I and II by Joan Tower, and Timo Andres' Trade Winds.
Newman Recital Hall (AHF)
Jazz Night featuring the USC Thornton Jazz Orchestra
Music director Bob Mintzer and the USC Thornton Jazz Orchestra headline this ongoing contemporary jazz series.
Ground Zero Performance Cafe (TRO)
Faculty Recital: Cherry Rhodes with Ladd Thomas & Douglas Masek
Organ Department faculty member Cherry Rhodes performs a recital at Los Angeles' iconic downtown cathedral with guest artists Ladd Thomas and Douglas Masek. The program will feature the world premiere of Fr. Joseph Walter's Chorale, Diferencias and Glosas on Puer Natus in Bethlehem, Olivier Messiaen's Combat of Life and Death, and Rayner Brown's Sonata for Organ Duet, Alto Saxophone, Soprano Saxophone and Clarinet featuring USC Thornton faculty organists Cherry Rhodes and Ladd Thomas and saxophonist/clarinetist Douglas Masek.
Cathedral of Our Lady of the Angels
USC Thornton Wind Ensemble
The program opens with Karel Husa's Smetana Fanfare, and William Schuman's George Washington Bridge, followed by Vaughan Williams English Folksong Suite, featuring soloist Katherine Beck. Beethoven's Wind Octet in E-flat major, op. 103 brings up the second half, followed by Paul Dooley's Mavericks, and Hindemith's "March" from Symphonic Metamorphosis.
Bovard Auditorium (ADM)
Baroque Sinfonia: In stile moderno
Rotem Gilbert leads the USC Thornton Baroque Sinfonia in a program of virtuosic music from seventeenth-century Italy. The concert will feature virtuosic Italian music by Claudio Monteverdi, Luzzasco Luzzaschi, Barbara Strozzi, Luca Marenzio and Dario Castello, as well as a fiery Vivaldi bassoon concerto performed by Leah Kohn.
Newman Recital Hall (AHF)
Jazz Honors Combo
The Jazz Honors Combo, a select group of USC Thornton jazz musicians led by Jason Goldman, presents an evening of original compositions for sextet.
Carson Center (CTV)
Music@RushHour - Polish Music Spotlight
In this co-production with Polish Music Center, student artists will spotlight the best of Polish music for the Music@Rush Hour audience.
Ramo Recital Hall (BMH)
Violin Masterclass with Pamela Frank
Award-winning violinist Pamela Frank leads a masterclass with some of the outstanding students of the Strings department. Frank currently holds the Herbert R. and Evelyn Axelrod Chair in Violin Studies at the Curtis Institute of Music in Philadelphia. This masterclass is presented in collaboration with Frank's husband, physiotherapist Howard Nelson.
MacDonald Recital Hall (MUS)
Turning Artists Into Leaders
Three years since its launch, USC Thornton's Arts Leadership program celebrates its successes and looks to the future.
Music Media Solutions
The USC Thornton course teaches Music Industry principles through real-world situations.
Celebrating A Cello Extravaganza
The Piatigorsky International Cello Festival returned to USC for 10 magnificent days in May. Here's a rundown of the amazing event.
Alumna Julia Newmann's "Bones Orchestral Suite" performed live
September 28, 2016
A work by Composition alumna Julia Newmann (BM '03) was recently performed by a 55-piece orchestra as part of "The Women Who Score: Soundtracks Live." A collaboration between Grand Performances and The Alliance for Women Film Composers, the event was a celebration of 21 film, television, and videogame scores by… read more