Querying 'random' Oracle data via openquery in SQL Server returning the same data for multiple runs
In the query you have it appears as though you are grabbing the first two hundred rows, and then sorting those by dbms_random.value. 

This would be due to Oracle's query precedence which performs the query and then sorts the results. You would want to randomly sort the results first and then return the first two hundred rows. Using a subquery should provide you with the data that you want.

select * from openquery(ORA_DB, 'select * from 
                                (
                                   select XX_NUMBER, XX_CODE, UNIT, XX_serial, XX_date, XX_area, building, location, XX_status, owner_code, qa_XX_no  
                                   from qa_eligible_XX 
                                   where qa_XX_no = 4 
                                   and owner_code &lt;&gt; ''G'' 
                                   and last_trans_code = ''OL'' 
                                   and XX_cycle = ''90 - 120 Periodic'' 
                                   and XX_date &lt; sysdate - 90 
                                   order by dbms_random.value
                               )
                               where rownum &lt;= 200 ')